zookeeper- 运行期间的 leader 选举与 observer
服务器运行时期的 Leader 选举
在 zookeeper 集群环境的运行期间,leader 与非 leader 服务器节点都各自工作,当有非 leader 服务器节点宕机或有新节点加入,也不会影响到 leader 的运行,但是一旦 leader 服务器节点宕机了,整个集群就会暂时对外停止服务,这个期间会进入新一轮的 leader 选举,其过程和启动时期的 Leader 选举过程基本一致。
举个例子,假设正在运行的有 server1、server2、server3 三台 zookeeper 服务器节点,当前 leader 是 server2 节点,在某个时间 server2 节点挂了,此时便会开始新 Leader 的选举。选举过程如下:
leader 宕机后,其他服务器会将自己的服务器状态变更为 looking,然后都开始进入 leader 选举的过程。
每个 server 发出一个投票。在运行期间,每个服务器上的 zxid 可能不同,此时假定 server1 的 zxid 为 122,server3 的 zxid 为 122,在第一轮投票中,server1 和 server3 都会投自己,产生投票(1, 122),(3, 122),然后各自将投票发送给集群中所有机器。
接收来自各个服务器的投票。与启动时过程相同
处理投票。与启动时过程相同,此时,server3 将会成为 leader。
统计投票。与启动时过程相同。
改变服务器的状态。与启动时过程相同。
observer 角色及其配置
observer 角色有几个特点如下:
不参与集群的 leader 选举,如此就算 observer 节点挂了,也不会影响到集群环境的运行
不参与集群中写数据时的 ack 反馈
observer 角色主要是对 leader 和 follower 的工作进行观察监听,动态扩展了 zookeeper 集群,也不影响集群的性能。
zookeeperAPI 连接集群
API 连接参数如下:ZooKeeper(String connectionString, int sessionTimeout, Watcher watcher)
connectionString : zooKeeper 集合主机。
sessionTimeout : 会话超时(以毫秒为单位)。
watcher : 实现“监视器”界面的对象。ZooKeeper 集合通过监视器对象返回连接状态。
版权声明: 本文为 InfoQ 作者【zarmnosaj】的原创文章。
原文链接:【http://xie.infoq.cn/article/93054ac5ef80bc620c7bfbe00】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论