Zookeeper 实现 master 选举

使用场景

        有一个向外提供的服务,服务必须7*24小时提供服务,不能有单点故障。所以采用集群的方式,采用master、slave的结构。一台主机多台备机。主机向外提供服务,备机负责监听主机的状态,一旦主机宕机,备机要迅速接代主机继续向外提供服务。 从备机选择一台作为主机,就是master选举。

原理解析

          右边三台主机会尝试创建master节点,谁创建成功了,就是master,向外提供。其他两台就是slave。

        所有slave必须关注master的删除事件(临时节点,如果服务器宕机了,Zookeeper会自动把master节点删除)。如果master宕机了,会进行新一轮的master选举。 本次我们主要关注master选举,服务注册、发现先不讨论。
        

程序流程
 
       Worker Server在启动的时候如下流程
        

        类图
        
        Worker Server 主工作类
        RuningData 描述Worker Server的基本信息
        LeaderSelectorZkClient 调度器, 用来启动和停止Worker Server

        运行LeaderSelectorZkClient.mian()方法可以查看到效果

对应网络抖动的方法

由于网络抖动,可能误删了master节点导致重新选举,如果master还未宕机,而被其他节点抢到了,会造成可能有写数据重新生成等资源的浪费。我们这里,增加一个判断,如果上次自己不是master就等待5s在开始争抢master,这样就能保障没有宕机的master能再次选中为master。
代码如下
1
2
3
4
5
6
7
8
9
10
if  (masterData !=  null  && masterData.getName().equals(serverData.getName())) {
     takeMaster();
else  {
     // 延迟5s再争抢
     delayExector.schedule( new  Runnable() {
         public  void  run() {
             takeMaster();
         }
     }, delayTime, TimeUnit.SECONDS);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值