1. 连接 ZK server
① 可以通过官方提供的 zkInspector 来连接。
② 可以通过官网下载的 zookeeper-xx.tar.gz 包中的 zkCli.cmd 来连接 (对界面没有要求的话,这种方式还是不错的)
zkCli.cmd -timeout 5000 -r -server xxip:2181
不加参数,默认连接的是 localhost:2181
2. 查看 zk Server 的状态信息(Master or Slave)
sh zkServer.sh status
3. 查看有 zk 服务器上有多少连接
netstat -ano|grep 2181
// 查看当前 server 有多少客户端连接
netstat -na | grep 2181 | wc -l
4. 创建临时顺序结点命令
查看所有命令:help
# 在 /tmp 节点下创建一个以 0 开头的临时顺序结点:/tmp/0000000000
>create -s -e /tmp/0
https://www.cnblogs.com/sherrykid/p/5813148.html
5. 使用 zk 做选举
两种选举方案对比:
采用临时节点:
/selection/leader
优点:逻辑简单,谁能创建 /selection/leader 节点,谁就是 leader
缺点:1. 当 /leader 节点被删除后,有可能通知消息丢失
如果是 leader 没有收到消息,其他节点有收到,则集群中会产生两个 leader
2. 当非 leader 节点与 zk 的连接断开后,集群中的其他节点是无感知的
采用临时顺序节点:
/selection/0000000001
优点:1. 集群中的每个实例都会拿到一个选举号,不管哪个实例连接断开,其他节点都可感知
2. 如果 leader 的选举节点被删除后的消息丢失,我们可以使用定时检测选举节点是否在存在的方式(比如:1 min 检测一下 /selection/000000000x)是否存在,如果不存在,说明有消息丢失,则重新进行选举,从而及时修正集群中的 Leader 状态
有待阅读 Curator 框架里面本身实现选举 API,看有什么值得借鉴的地方
https://blog.csdn.net/luckykapok918/article/details/71633818
zookeeper原生API注册Watcher需要反复注册,即Watcher触发之后就需要重新进行注册。另外,客户端断开之后重新连接到服务器也是需要一段时间。这就导致了zookeeper客户端不能够接收全部的 zookeeper 事件。zookeeper保证的是数据的最终一致性。因此,对于此问题需要特别注意,不要对zookeeper事件进行强依赖。