Zookeeper 官网地址:https://zookeeper.apache.org/
1 手动安装
先解压zookeeper-3.4.12.tar.gz,然后:
$ cd zookeeper-3.4.12
$ mkdir data
使用命令 vi conf/zoo.cfg 和所有以下参数设置为起点,打开名为 conf/zoo.cfg 的配置文件。
———————————-
tickTime=2000
dataDir=/home/admin/dev/zookeeper/zookeeper-3.4.12/data
clientPort=2181
initLimit=5
syncLimit=2
———————————-
一旦成功保存配置文件,再次返回终端。你现在可以启动zookeeper服务器。
# 开启zookeeper服务(默认使用 conf/zoo.cfg 配置) ./bin/zkServer.sh start # 关闭zookeeper服务 ./bin/zkServer.sh stop # 客户端连到zookeeper服务 ./bin/zkCli.sh
2 ZooKeeper集合中的节点 建议使用奇数,且最少3个
让我们分析在ZooKeeper集合中拥有不同数量的节点的效果。
如果我们有单个节点,则当该节点故障时,ZooKeeper集合将故障。它有助于“单点故障”,不建议在生产环境中使用。
如果我们有两个节点而一个节点故障,我们没有占多数,因为两个中的一个不是多数。
如果我们有三个节点而一个节点故障,那么我们有大多数,因此,这是最低要求。ZooKeeper集合在实际生产环境中必须至少有三个节点。
如果我们有四个节点而两个节点故障,它将再次故障。类似于有三个节点,额外节点不用于任何目的,因此,最好添加奇数的节点,例如3,5,7。
3 写入较昂贵
我们知道写入过程比ZooKeeper集合中的读取过程要贵,因为所有节点都需要在数据库中写入相同的数据。因此,对于平衡的环境拥有较少数量(例如3,5,7)的节点比拥有大量的节点要好。
4 选举leader节点
让我们分析如何在ZooKeeper集合中选举leader节点。考虑一个集群中有N个节点。leader选举的过程如下:
(1)所有节点创建具有相同路径 /app/leader_election/guid_ 的顺序、临时节点。
(2)ZooKeeper集合将附加10位序列号到路径,创建的znode将是 /app/leader_election/guid_0000000001,/app/leader_election/guid_0000000002等。
(3)对于给定的实例,在znode中创建最小数字的节点成为leader,而所有其他节点是follower。
(4)每个follower节点监视下一个具有最小数字的znode。例如,创建znode/app/leader_election/guid_0000000008的节点将监视znode/app/leader_election/guid_0000000007,创建znode/app/leader_election/guid_0000000007的节点将监视znode/app/leader_election/guid_0000000006。
(5)如果leader关闭,则其相应的znode/app/leader_electionN会被删除。
(6)下一个在线follower节点将通过监视器获得关于leader移除的通知。
(7)下一个在线follower节点将检查是否存在其他具有最小数字的znode。如果没有,那么它将承担leader的角色。否则,它找到的创建具有最小数字的znode的节点将作为leader。
(8)类似地,所有其他follower节点选举创建具有最小数字的znode的节点作为leader。