持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情
服务器运行时期的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集合通过监视器对象返回连接状 态。