Zookeeper 集群安装

在生产环境中, zookeeper 通常都是以集群存在的, 而且通常是一台物理机上一个zookeeper. zookeeper 集群没必要有太多的机器, 通常3,5,7,9,11 台就足够了, 最常用的应该也就是3,5 台zookeeper搭建的集群了.所谓ZK 集群就是由多个ZK 单实例节点组成的一组有主从节点之分的集合.因此, 搭建集群时, 先把各个服务器上的单实例zookeeper搭建起来, 然后配置串联即可.

1. 集群环境

服务器ip 占用端口 ZK 家目录 ZK 数据目录 数据操作日志目录 ZK 日志目录
192.168.145.100 2181, 2888, 3888 /opt/app/zookeeper/zookeeper-3.4.10 /var/data/zookeeper /var/data/zookeeper/datalogs /var/logs/zookeeper/zklogs
192.168.145.101 2181, 2888, 3888 /opt/app/zookeeper/zookeeper-3.4.10 /var/data/zookeeper /var/data/zookeeper/datalogs /var/logs/zookeeper/zklogs
192.168.145.102 2181, 2888, 3888 /opt/app/zookeeper/zookeeper-3.4.10 /var/data/zookeeper /var/data/zookeeper/datalogs /var/logs/zookeeper/zklogs

2. 集群环境搭建

  • zk 集群有自动选主机制, 只需要将单实例串联起来就行了
  • zk 集群扩展时,需要对每个zk 节点配置进行修改, 所以初期最好确定zk 集群节点数量

2.1 配置单实例zookeeper

  • zk 单实例安装比较简单, 具体请参考笔者的: Zookeeper 单实例安装

2.2 串联zookeeper 集群

  • zk 集群需要在每个节点配置文件zoo.cfg 中指定zk集群所有节点的地址, 因此在每台服务器节点的zoo.cfg 配置文件末尾追加:
#格式: server.序号=ip/主机名:同步数据通信端口号:选主通信端口号
server.1=192.168.145.100:2888:3888
server.2=192.168.145.101:2888:3888
server.3=192.168.145.102:2888:3888

2.3 配置myid 文件

  • zk 集群需要在配置的数据目录中创建myid 文件, 文件中写入本zk示例在集群中的序号
服务器 执行命令
192.168.145.100 echo 1 > /var/data/zookeeper/myid
192.168.145.101 echo 2 > /var/data/zookeeper/myid
192.168.145.102 echo 3 > /var/data/zookeeper/myid

3. 集群启动

  • 依次启动集群节点: ./bin/zkServer.sh start
  • 集群节点选主完全看时机, 不一定是哪个节点为leader. 节点半数启动成功之后, 集群才能启动成功
  • 集群创建成功的标志是为每个节点分配了角色: leader, follwer, observer

192.168.145.100: leader

[admin@localhost zookeeper-3.4.10]$ ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/admin/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: leader

192.168.145.101: follwer

[root@localhost zookeeper-3.4.10]# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/zongf/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower

192.168.145.102: follwer

[root@localhost zookeeper-3.4.10]# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/zongf/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower

附:

  • 集群半数节点启动成功后, 集群才能连接成功.否则只是节点启动成功, 并没有成功创建集群
  • 成功创建集群的标志是,为每个节点分配了角色: leader, follwer, observer
  • 注意释放各个节点的2181, 2888, 3888 端口, 保证节点之间能正常通信
[admin@localhost zookeeper-3.4.10]$ ./bin/zkServer.sh status              
ZooKeeper JMX enabled by default
Using config: /home/zongf/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
[admin@localhost zookeeper-3.4.10]$ jps -l | grep zookeeper               
11739 org.apache.zookeeper.server.quorum.QuorumPeerMain
[admin@localhost zookeeper-3.4.10]$ ps -ef | grep zookeeper | grep -v grep
zongf    11739     1  0 11:12 pts/3    00:00:00 /opt/app/jdk1.6.0_31/bin/java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /home/zongf/zookeeper/zookeeper-3.4.10/bin/../build/classes:/home/zongf/zookeeper/zookeeper-3.4.10/bin/../build/lib/*.jar:/home/zongf/zookeeper/zookeeper-3.4.10/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/zongf/zookeeper/zookeeper-3.4.10/bin/../lib/slf4j-api-1.6.1.jar:/home/zongf/zookeeper/zookeeper-3.4.10/bin/../lib/netty-3.10.5.Final.jar:/home/zongf/zookeeper/zookeeper-3.4.10/bin/../lib/log4j-1.2.16.jar:/home/zongf/zookeeper/zookeeper-3.4.10/bin/../lib/jline-0.9.94.jar:/home/zongf/zookeeper/zookeeper-3.4.10/bin/../zookeeper-3.4.10.jar:/home/zongf/zookeeper/zookeeper-3.4.10/bin/../src/java/lib/*.jar:/home/zongf/zookeeper/zookeeper-3.4.10/bin/../conf: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /home/zongf/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg

results matching ""

    No results matching ""