zookeeper-运行期间的leader选举与observer

119 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

服务器运行时期的Leader选举

在zookeeper集群环境的运行期间,leader与非leader服务器节点都各自工作,当有非leader服务器节点宕机或有新节点加入,也不会影响到leader的运行,但是一旦leader服务器节点宕机了,整个集群就会暂时对外停止服务,这个期间会进入新一轮的leader选举,其过程和启动时期的Leader选举过程基本一致。

举个例子,假设正在运行的有server1、server2、server3三台zookeeper服务器节点,当前leader是server2节点,在某个时间server2节点挂了,此时便会开始新Leader的选举。选举过程如下:

  1. leader宕机后,其他服务器会将自己的服务器状态变更为looking,然后都开始进入leader选举的过程。
  2. 每个server发出一个投票。在运行期间,每个服务器上的zxid可能不同,此时假定 server1的zxid为122,server3的zxid为122,在第一轮投票中,server1和server3 都会投自己,产生投票(1, 122),(3, 122),然后各自将投票发送给集群中所有机器。
  3. 接收来自各个服务器的投票。与启动时过程相同
  4. 处理投票。与启动时过程相同,此时,server3将会成为leader。
  5. 统计投票。与启动时过程相同。
  6. 改变服务器的状态。与启动时过程相同。

observer角色及其配置

observer角色有几个特点如下:

  1. 不参与集群的leader选举,如此就算observer节点挂了,也不会影响到集群环境的运行
  2. 不参与集群中写数据时的ack反馈

observer角色主要是对leader和follower的工作进行观察监听,动态扩展了zookeeper集群,也不影响集群的性能。

zookeeperAPI连接集群

API连接参数如下: ZooKeeper(String connectionString, int sessionTimeout, Watcher watcher)

  1. connectionString : zooKeeper集合主机。
  2. sessionTimeout : 会话超时(以毫秒为单位)。
  3. watcher : 实现“监视器”界面的对象。ZooKeeper集合通过监视器对象返回连接状 态。