赞
踩
解决的方法在下面红色大号粗体,先看一段我本人的思考
我们要拷贝zoo_sample.cfg为zoo.cfg,为什么这样做呢,因为这是zookeeper重要的配置文件
就像刚开始用linux系统,在国内,我们首先就要换源,有个文件叫sources.list,我们要做的并不是立即修改sources.list里面的内容,而是拷贝一份并命名为sources.list.bat
因为前人大量的实践证明,这个文件真的很重要,安装软件时候出现的各种错误,几乎都和这文件有关,zookeeper下的zoo_sample.cfg也是如此
我们在配置zookeeper的配置文件的时候,难免会碰到下面几行的代码修改
dataDir=/export/servers/zookeeper-3.4.9/zkdatas
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
- #集群中服务器地址
- server.1=master:2888:3888
- server.2=slave1:2888:3888
- server.3=slave2:2888:3888
dataDir是指Zookeeper数据放在哪个文件中(zkdatas是我自己创建的,默认的压缩包解压后是没有的)
autopurge.snapRetainCount指快照保留的数量,单位是个,zookeeper本身就是一个集群,这里默认为3,如果想配置快照数量就把配置文件中的这一行注释打开
autopurge.purgeInterval指日志多长时间清理一次,单位是小时
配置过Zookeeper的配置文件的人都应该看过上面类似的代码
它的意思是指:
#server代表服务,服务器,后面的1,2,3其实指的是myid的值
#myid相当于每一个zookeeper的编号
#第一个编号在master上,2888:3888是访问的端口,都是固定的
既然设置了myid的值,就要写到myid的文件中
echo 1 > /export/servers/zookeeper-3.4.9/zkdatas/myid
类似于上面的命令一样,这样第一台机器就配置完成了,接下来就是分发给集群中的其他机器,分发完记得修改myid的值哦
接下来就在每一台机器上执行zookeeper-3.4.9/bin/zkServer.sh start脚本
检查状态用:zookeeper-3.4.9/bin/zkServer.sh status
看一下java相关的进程,确保zookeeper启动成功,命令行执行jps
- [root@master servers]# jps
- 17635 Jps
- 17581 QuorumPeerMain
如果你的java进程和我一样,就证明zookeeper在三台机器上,启动成功了。注意一定要在每一台运行zkServer.sh脚本,不能只启动一台master的,以前我就只启动一台,这样会一直报错
接下来,看一下只开一台,查看zookeeper集群的状态的时候报错是这样的
- root@master servers]# zookeeper-3.4.9/bin/zkServer.sh status
- ZooKeeper JMX enabled by default
- Using config: /export/servers/zookeeper-3.4.9/bin/../conf/zoo.cfg
- Error contacting service. It is probably not running.
在检查zookeeper集群开启的状态的时候,发现
master:mode follower
slave1:mode leader
slave2:mode follower
为什么是这样的呢?其实这里面有一个zookeeper leader产生的选举算法,
规则:第一台(master)先启动,是不能参加选举的,当第二台(slave1)启动的时候,就启动了选举算法,以投票为例,第一台与第二台各自给各自投了一票,
这个时候会统计票数是否过半,一共就三票,发现2票已经出去了超过了一半,就会进行票数的Pk,这时候master和slave1的票数相等都是1票,这时候就要比较myid的值,
myid的值越大,leader就是谁,所以第二台(slave1)就是leader,第三台(slave2)开启的时候,因为leader已经产生,第三台就只能是follower了
leader的产生是和启动顺序是有关系的,所以我的zookeeper启动顺序是
No1、master
No2、slave1
No3、slave2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。