zookeeper 集群安装配置启动

一、准备

1、在VMware中安装三台虚拟机;

2、三台机器/etc/hosts分别为luxiangzhou1(192.168.200.101)、luxiangzhou2(192.168.200.102、luxiangzhou3(192.168.200.103);

zookeeper 集群安装配置启动

3、可以ssh免登陆访问;

zookeeper 集群安装配置启动

4、安装jdk(jdk_1.6.0_45);

5、解压zookeeper到/user/java目录下(zookeeper-3.3.6);

zookeeper 集群安装配置启动

6、将三台机器下面的/usr/java/zookeeper-3.3.6/conf/zoo_sample.cfg文件重命名为zoo.cfg;

7、将zoo.cfg文件中dataDir改为/usr/java/zookeeper/data;

添加server.1=luxiangzhou1:2888:3888
server.2=luxiangzhou2:2888:3888
server.3=luxiangzhou3:2888:3888

zookeeper 集群安装配置启动

6、创建/usr/java/zookeeper文件夹,用来放zookpeeper数据;

/usr/java/zookeeper文件夹下创建data、log文件夹;

/usr/java/zookeeper/data文件夹下创建myid文件,注意myid内容和zoo.cfg配置文件中server.id=host:port:port的id一致;


二、启动zookeeper

启动zookeeper:/usr/java/zookeeper-3.3.6/bin/zkServer.sh start

关闭zookeeper:/usr/java/zookeeper-3.3.6/bin/zkServer.sh stop

查看zookeeper角色,是leader还是foller:/usr/java/zookeeper-3.3.6/bin/zkServer.sh status

查看zookeeper是否启动成功:jps ,看是否含有QuorumPeerMain进程

查看zookeeper启动日志:/usr/java/zookeeper-3.3.6/bin/zookeeper.out


三、zookeeper启动错误

zookeeper启动错误1:创建/usr/java/zookeeper/daya/myid文件
[[email protected] bin]# more zookeeper.out 
2017-10-10 14:00:59,143 - INFO  [main:[email protected]] - Reading configuration from: /usr/java/zookeeper-3.3.6/bin/../conf/zoo.cfg
2017-10-10 14:00:59,148 - INFO  [main:[email protected]] - Defaulting to majority quorums
2017-10-10 14:00:59,149 - FATAL [main:[email protected]] - Invalid config, exiting abnormally
org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing /usr/java/zookeeper-3.3.6/bin/../conf/zoo.cfg
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:110)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:99)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:76)
Caused by: java.lang.IllegalArgumentException: /usr/java/zookeeper/data/myid file is missing
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:320)
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:106)
... 2 more
Invalid config, exiting abnormally

zookeeper启动错误2:修改/usr/java/zookeeper/daya/myid里面内容为1,注意集群时myid内容和zoo.cfg配置文件中server.id=host:port:port的id一致
[[email protected] bin]# more zookeeper.out 
2017-10-10 14:17:59,146 - INFO  [main:[email protected]] - Reading configuration from: /usr/java/zookeeper-3.3.6/bin/../conf/zoo.cfg
2017-10-10 14:17:59,150 - INFO  [main:[email protected]] - Defaulting to majority quorums
2017-10-10 14:17:59,151 - FATAL [main:[email protected]] - Invalid config, exiting abnormally
org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing /usr/java/zookeeper-3.3.6/bin/../conf/zoo.cfg
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:110)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:99)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:76)
Caused by: java.lang.IllegalArgumentException: serverid null is not a number
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:333)
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:106)
... 2 more
Invalid config, exiting abnormally

zookeeper启动错误3:集群中的每台机器都需要感知整个集群是由哪几台机器组成的,在配置文件中,可以按照这样的格式,每行写一个机器配置:server.id=host:port:port. 关于这个id,我们称之为Server ID,
标识host机器在集群中的机器序号,在每个ZK机器上,我们需要在数据目录(数据目录就是dataDir参数指定的那个目录)下创建一个myid文件,myid中就是这个Server ID数字。
2017-10-10 22:30:29,410 - WARN  [Thread-34:[email protected]] - Send worker leaving thread
2017-10-10 22:30:56,106 - WARN  [Thread-37:[email protected]] - Connection broken for id 1, my id = 1, error = java.io.IOException: Channel eof
2017-10-10 22:30:56,107 - WARN  [Thread-37:[email protected]] - Interrupting SendWorker
2017-10-10 22:30:56,108 - WARN  [Thread-36:[email protected]] - Interrupted while waiting for message on queue
java.lang.InterruptedException
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:1961)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2038)
at java.util.concurrent.ArrayBlockingQueue.poll(ArrayBlockingQueue.java:347)
at org.apache.zookeeper.server.quorum.QuorumCnxManager$SendWorker.run(QuorumCnxManager.java:622)