zookeeper 集群的目的是为了保证系统的性能承载更多的客户端连接设专门提供的机制。通过集群可以实现以下功能:
半数以上运行机制说明: 集群至少需要三台服务器,并且强烈建议使用奇数个服务器。因为 zookeeper 通过判断大多数节点的存活来判断整个服务是否可用。比如3个节点,挂掉了2个表示整个集群挂掉,而用偶数4个,挂掉了2个也表示其并不是大部分存活,因此也会挂掉。

环境准备
mkdir /home/zookeeper/cluster
cd /home/zookeeper/cluster
mkdir 21811 21812 21813
# 各个目录下执行
mkdir data datalog conf logger zoolog
zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
maxClientCnxns=60
clientPort=21811
admin.serverPort=21911
dataDir=/home/zookeeper/cluster/21811/data
dataLogDir=/home/zookeeper/cluster/21811/datalog
zooLogDir=/home/zookeeper/cluster/21811/zoolog
server.1=127.0.0.1:27881:28881
server.2=127.0.0.1:27882:28882
server.3=127.0.0.1:27883:28883
log4j.properties
zookeeper.log.dir=/home/zookeeper/cluster/21811/logger
zookeeper.root.logger=INFO, ROLLINGFILE
log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender
zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
maxClientCnxns=60
clientPort=21812
admin.serverPort=21912
dataDir=/home/zookeeper/cluster/21812/data
dataLogDir=/home/zookeeper/cluster/21812/datalog
zooLogDir=/home/zookeeper/cluster/21812/zoolog
server.1=127.0.0.1:27881:28881
server.2=127.0.0.1:27882:28882
server.3=127.0.0.1:27883:28883
log4j.properties
zookeeper.log.dir=/home/zookeeper/cluster/21812/logger
zookeeper.root.logger=INFO, ROLLINGFILE
log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender
zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
maxClientCnxns=60
clientPort=21813
admin.serverPort=21913
dataDir=/home/zookeeper/cluster/21813/data
dataLogDir=/home/zookeeper/cluster/21813/datalog
zooLogDir=/home/zookeeper/cluster/21813/zoolog
server.1=127.0.0.1:27881:28881
server.2=127.0.0.1:27882:28882
server.3=127.0.0.1:27883:28883
log4j.properties
zookeeper.log.dir=/home/zookeeper/cluster/21813/logger
zookeeper.root.logger=INFO, ROLLINGFILE
log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender
在各个节点下的data下指定server的id
echo 1 > /home/zookeeper/cluster/21811/data/myid
echo 2 > /home/zookeeper/cluster/21812/data/myid
echo 3 > /home/zookeeper/cluster/21813/data/myid
server.<节点ID>=IP地址:<数据同步端口>:<选举端口>
zkServer.sh --config /home/zookeeper/cluster/21811/conf start
zkServer.sh --config /home/zookeeper/cluster/21812/conf start
zkServer.sh --config /home/zookeeper/cluster/21813/conf start
查看启动状态
zkServer.sh --config /home/zookeeper/cluster/21811/conf status
zkServer.sh --config /home/zookeeper/cluster/21812/conf status
zkServer.sh --config /home/zookeeper/cluster/21813/conf status
可以看出节点的leader,follower,observer角色信息
检查集群复制情况:
分别连接指定节点 zkCli.sh 后加参数-server 表示连接指定IP与端口。
zkCli.sh -server 127.0.0.1:21811
zkCli.sh -server 127.0.0.1:21812
zkCli.sh -server 127.0.0.1:21813
zkCli.sh -server 127.0.0.1:21811,127.0.0.1:21812,127.0.0.1:21813
任意节点中创建数据,查看其它节点已经同步成功。
zookeeper 集群中总共有三种角色,分别是
| 角色 | 描述 |
|---|---|
| leader | 主节点,又名领导者。用于写入数据,通过选举产生,如果宕机将会选举新的主节点。 |
| follower | 子节点,又名追随者。用于实现数据的读取。同时他也是主节点的备选节点,并用拥有投票权。 |
| observer | 次级子节点,又名观察者。用于读取数据,与follower区别在于没有投票权,不能选为主节点。并且在计算集群可用状态时不会将observer计算入内。 |
observer 配置:只要在集群配置中加上observer后缀即可,示例如下:
server.3=127.0.0.1:21813:28883:observer
