zookeeper集群模式安装&配置过程初探
本文内容介绍的是zookeeper 集群模式的部署过程,实际部署服务器只有一台,通过一台服务器不同端口部署多服务节点。
- 虚拟机外IP:10.211.55.4
- 节点1 端口:2181;目录 zoo1;myid:1
- 节点2 端口:2182;目录 zoo2;myid:2
- 节点3 端口:2183;目录 zoo3;myid:3
- 节点4 端口:2184;目录 zooI ;myid:4
1、下载tar包:
创建文件夹(目录可以根据自己情况规划)
mkdir /data/zookeeper/zoo1
下载安装包至此文件夹内:
cd mkdir /data/zookeeper/zoo1wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1-bin.tar.gz
注意:
使用安装包apache-zookeeper-3.6.1.tar.gz部署集群模式时会发生问题,目前笔者没找到解决方案。使用apache-zookeeper-3.6.1-bin.tar.gz即可。
2、解压安装:
在新建的 /data/zookeeper/zoo1 目录下解压tar包:
tar -zxvf apache-zookeeper-3.6.1-bin.tar.gz
如下图:
3、修改配置文件
①创建日志文件夹,准备好相关目录:
cd /data/zookeeper/zoo1/apache-zookeeper-3.6.1-binmkdir logs
②修改配置文件
进入配置文件的 conf 目录:
从zoo_sample.cfg复制出一个配置文件,名称为zoo.cnf:
修改zoo.cfg内容:
cp zoo_sample.cfg zoo.cfgvim zoo.cnf#主要是添加如下两行dataDir=/data/zookeeper/zooI/dataLogDir=/data/zookeeper/zooI/apache-zookeeper-3.6.1-bin/logs
笔者的最终完整配置如下:
# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial# synchronization phase can takeinitLimit=10# The number of ticks that can pass between# sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.# do not use /tmp for storage, /tmp here is just# example sakes.dataDir=/data/zookeeper/zoo1/dataLogDir=/data/zookeeper/zoo1/apache-zookeeper-3.6.1-bin/logs/# the port at which the clients will connectclientPort=2181# the maximum number of client connections.# increase this if you need to handle more clients#maxClientCnxns=60## Be sure to read the maintenance section of the# administrator guide before turning on autopurge.## http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance## The number of snapshots to retain in dataDir#autopurge.snapRetainCount=3# Purge task interval in hours# Set to "0" to disable auto purge feature#autopurge.purgeInterval=1# 这一段是部署集群模式才需要的配置内容server.1=10.211.55.4:2888:3888server.2=10.211.55.4:2889:3887server.3=10.211.55.4:2890:3886server.4=10.211.55.4:2891:3885## Metrics Providers## https://prometheus.io Metrics Exporter#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider#metricsProvider.httpPort=7000#metricsProvider.exportJvmInfo=true
4、启动节点:
进入bin目录启动节点
cd ../bin/sh zkServer.sh start
发生如下报错:
原因:
缺少myid文件。
解决办法:
进入节点目录,创建myid文件,编辑内容标识节点信息即可,内容为数值型,id范围1~255。
再次启动:
成功正常启动了。
5、连接验证
可以通过客户端连接诶命令验证
sh zkCli.sh -server 127.0.0.1:2181……WATCHER::WatchedEvent state:SyncConnected type:None path:null[zk: 127.0.0.1:2181(CONNECTED) 0][zk: 127.0.0.1:2181(CONNECTED) 0]
6、其他
以上为zookeeper集群中一个节点成功配置、启动的过程。
需要配置多个节点时,其他节点可以直接copy当前 /data/zookeeper/zooI 目录,如下:
通过复制 /data/zookeeper/zooI,生成zoo1、zoo2、zoo3,然后修改zoo.cfg配置文件的方式快速配置:
配置集群是,注意每个节点的 zoo.cfg文件中一定注意一下部分配置文件:
server.1=10.211.55.4:2888:3888server.2=10.211.55.4:2889:3887server.3=10.211.55.4:2890:3886server.4=10.211.55.4:2891:3885
server.A=B:C:D:其 中
- A 是一个数字,表示这个是第几号服务器;
- B 是这个服务器的 ip地址;
- C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;
- D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。
如果以上配置信息处理错误,则会报错如下:
2020-08-25 18:25:56,437 [myid:4] - ERROR [main:[email protected]] - Unexpected exception, exiting abnormallyjava.lang.RuntimeException: My id NNN not in the peer listat org.apache.zookeeper.server.quorum.QuorumPeer.start(QuorumPeer.java:1073)at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:227)at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:136)at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:90)2020-08-25 18:25:56,439 [myid:4] - INFO [main:[email protected]] - ZooKeeper audit is disabled.2020-08-25 18:25:56,440 [myid:4] - ERROR [main:[email protected]] - Exiting JVM with code 1
此NNN是各节点目录下myid中定义的值,表示第NNN太服务器节点不在通讯节点列表中。当然,此处配置内容编辑错误也会导致类似问题。