Zookpeer集群启动问题

1.问题描述

今天启动zookeeper的时候,发现怎么zookeeper集群启动不起来了,一共三台机器,用脚本启动只有一台启动成功了,真的是怪了。遇到问题不慌不忙,去看日志

java.lang.RuntimeException: My id 0 not in the peer list
        at org.apache.zookeeper.server.quorum.QuorumPeer.startLeaderElection(QuorumPeer.java:674)
        at org.apache.zookeeper.server.quorum.QuorumPeer.start(QuorumPeer.java:593)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:164)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:111)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)

看了一下原来是我的myid出了问题,说是0不在列表中,估计是配错了或者什么问题。

2.问题解决

其实问题还是比较容易解决的,我去看了看132这台机器的myid确实是0,那么他不在列表中应该看一下zoo.conf的配置是不是出了什么问题。

通过看zoo.conf发现,原来我在配集群的时候,设置的是server.2=hadoop132:2888:3888给的服务器号是2,那么肯定会出错了。最后将集群中的myid与zoo.conf的配置相互对应集群顺利的启动起来了。

最玄学的是这个集群我搭起来用了几次了,没出现过问题,今天就出现这个问题,好玄学…

3.zookeeper集群的搭建

既然在搭集群的时候出现的问题,就在回顾回顾zookeeper的集群搭建吧

首先分三台机器,我们先去安装一台机器,然后在分发到其他机器中,进行修改即可

3.1将zookeeper解压到指定的目录中

tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/module/

3.2修改配置

将zookpeer/conf这个路径下的zoo.sample.cfg修改为zoo.conf

mv zoo_sample.cfg zoo.cfg

并修改zoo.conf文件,即将dataDir的目录修改一下,并添加配置

dataDir=/opt/module/zookeeper-3.4.10/zkData

# 在最后添加
#######################cluster##########################
server.2=hadoop132:2888:3888
server.3=hadoop133:2888:3888
server.4=hadoop134:2888:3888

要在你指定的这个目录下创建zkData这个文件夹

mkdir zkData

还有在配置集群配置中,是什么意思呢

其实是这样的,server.A=B:C:D。

A是一个数字,表示这个是第几号服务器;(2 3 4是随便的,只要不同就可以)

集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。

B是这个服务器的地址;

C是这个服务器Follower与集群中的Leader服务器交换信息的端口;

D是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

还有一步就是创建相应的myid文件,我们在zkData目录下创建myid,里面就添加一个2

vim myid

# 添加
2

完成上面后,还要修改zookpeer的日志文件的目录,zookpeer默认是将日志问题放在启动的当前目录,我们为了好查看日志,就将日志的存放目录进行修改,修改在zookpeer/bin/下的zkEnv.sh文件

vim  /zookeeper-3.4.13/bin/zkEnv.sh

# 修改位置在56行
if [ "x${ZOO_LOG_DIR}" = "x" ]
then
	##修改日志的目录
    ZOO_LOG_DIR="/opt/module/zookeeper-3.4.10/logs"
fi

if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
	##修改为INFO,ROLLINGFILE
    ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
fi

这个路径也是要提前创建好的

3.3分发zookeeper

将132机器上配置好的zookeeper分发到其他两台机器上,并修改响应的myid即可。

3.4启动zookeeper集群

我们在每台机器上运行

bin/zkServer.sh start

# 查看zookeeper的运行状态
bin/zkServer.sh status

其实也可以通过脚本来实现一键群起,不需要一个一个启动

# 这里我采用读hadoop中slave里面的机器地址,也可以自己随便建立一个文件,只要存放分发机器的地址即可
for i in `cat /opt/module/hadoop-2.7.2/etc/hadoop/slaves`
do
echo "========== $i ==========" 
ssh $i 'source /etc/profile;/opt/module/zookeeper-3.4.10/bin/zkServer.sh start'
done

你可能感兴趣的:(zookeeper,zookeeper,hadoop,大数据)