ZooKeeperJMXenabled by default Using config:Error contacting serviceIt is probably not running的解决与思考

解决的方法在下面红色大号粗体,先看一段我本人的思考

我们要拷贝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.

解决的办法就是,把另外几台全都开启zkServer.sh start

在检查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

 

 

 

上一篇:微信小程序基础语法(2)


下一篇:★ Linked List Cycle II -- LeetCode