赞
踩
Zookeeper集群搭建相对比较容易,但有些细节需要注意,否则很可能会报错:Error contacting service. It is probably not running ,这个错误是查询集群节点状态的时候所反馈的报错信息,也就是 zkServer.sh status 这个命令的输出。
集群的根本在于节点之间互相知道对方的存在,从而互相之间能够通信,同步数据,进而达到ha高可用的状态,以上的报错最多的原因是节点间的通信受阻,而一般受阻的原因为系统防火墙的阻拦(iptables或者Firewalls)。
因此,解决方案为要么正确的设置防火墙,放行通信端口,要么关闭防火墙,使得通信端口正常工作。
在zookeeper中有三个端口需要特别注意,2888,3888,2181,其中的2888是节点服务器的对外服务端口,3888是节点之间的选举端口(通过3888端口节点内部商量选举一个leader),2181端口是客户端连接节点的端口,比如,一个服务要注册到zookeeper,那么,就需要通过2181端口告诉集群,我,是一个服务,我要你管理我,从而完成注册,以及后续的监听流程。
具体解决方案如下:
一,查看zookeeper进程,是否存在,如不存在查看zookeeper.out 文件,排查原因,直到错误解决,进程正常出现。
root@centos9 ~]# ps -ef | grep zookeep
root 947 1 0 11:51 ? 00:00:05 java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /usr/local/src/zookeeper-3.4.6/bin/../build/classes:/usr/local/src/zookeeper-3.4.6/bin/../build/lib/*.jar:/usr/local/src/zookeeper-3.4.6/bin/../lib/slf4j-log4j12-1.6.1.jar:/usr/local/src/zookeeper-3.4.6/bin/../lib/slf4j-api-1.6.1.jar:/usr/local/src/zookeeper-3.4.6/bin/../lib/netty-3.7.0.Final.jar:/usr/local/src/zookeeper-3.4.6/bin/../lib/log4j-1.2.16.jar:/usr/local/src/zookeeper-3.4.6/bin/../lib/jline-0.9.94.jar:/usr/local/src/zookeeper-3.4.6/bin/../zookeeper-3.4.6.jar:/usr/local/src/zookeeper-3.4.6/bin/../src/java/lib/*.jar:/usr/local/src/zookeeper-3.4.6/bin/../conf: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /usr/local/src/zookeeper-3.4.6/bin/../conf/zoo.cfg
root 3075 1063 0 12:26 pts/0 00:00:00 grep --color=auto zookeep
这个是正常的进程状态。
二,selinux和防火墙的状态
建议全部关闭,关闭方法不用多说。
三,vim /zookeeper.out
可能很多人不知道这个文件在哪,这个简单,find / -name zookeeper.out
如果文件内有timeout 或者refuse这样的字眼,请执行第二步。
2020-11-21 11:56:49,687 [myid:2] - INFO [QuorumPeer[myid=2]/0:0:0:0:0:0:0:0:2181:ZooKeeperServer@162] - Created server with tickTime 2000 minSessionTimeout 4000 maxSessionTimeout 40000 datadir /usr/local/zk/version-2 snapdir /usr/local/zk/version-2
2020-11-21 11:56:49,690 [myid:2] - INFO [QuorumPeer[myid=2]/0:0:0:0:0:0:0:0:2181:Leader@358] - LEADING - LEADER ELECTION TOOK - 314353
以上是文件部分片段,表示成功选举出了leader。出现了什么错误,不要慌,找这个日志文件,仔细查看报错信息,针对解决。
四,节点ID标识文件myid是否正确
myid这个文件的内容要和主配置文件的内容相呼应,比如:
server.1=192.168.0.17:2888:3888 在192.168.0.17这个机器上的配置文件设定的myid是1,那么你新建的myid文件内容就应该是1,如果你修改配置文件内容为
server.22=192.168.0.17:2888:3888 ,那么myid文件的内容就应该是22。
其中的IP可以使用域名简化,但域名需要其余的节点能够解析,因此,要么搭建dns服务自己解析,要么写入hosts文件,让节点之间互相认识,才可以写域名,否则必定报以上的错。
这个报错九成都是防火墙和selinux的锅,如果可以查到进程,基本就是这两项的问题。主配置文件的域名需要节点之间都可以互相认识才可以使用域名,否则请使用IP。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。