使用Zookeeper实现选举

概述分布式的集群很容易有“选举”的需求,所谓的选举可以先简单的理解为选出集群多个节点的“老大”(leader)例子1 —— 主从节点选举举个不是很恰当的例子(mysql不是使用zk来做选举的),我们使用mysql时候,为了做到高可用,可能会同时布两个mysql,一主多备。这个时候,如果master节点挂了,多个slave节点哪一个会被选为主节点?这里就涉及到“选举”,从多个slav...
摘要由CSDN通过智能技术生成

概述

分布式的集群很容易有“选举”的需求,所谓的选举可以先简单的理解为选出集群多个节点的“老大”(leader)

例子1 —— 主从节点选举

举个不是很恰当的例子(mysql不是使用zk来做选举的),我们使用mysql时候,为了做到高可用,可能会同时布两个mysql,一主多备。这个时候,如果master节点挂了,多个slave节点哪一个会被选为主节点?这里就涉及到“选举”,从多个slave节点里选出一个新的master。

例子2 —— 定时任务

又比如,我们经常有定时任务的需求,为了保证高可用。可能跑定时任务的服务会部署多台。

假设有这样一个任务,它会扫表A,然后将这个表A的数据插入到另一个表B里。当只有一台机器跑这个任务,没有问题。但是如果同一时刻,有多台机器在跑,数据就会重复插入到表B里。

所以理想的情况可能是,同一时刻只有一台机器在跑定时任务。当这台机器挂掉了,立刻在其他机器里面选举出一台机器跑定时任务。

使用zookeeper来做集群的选举

总的来说,选举这种需求还是不少的。zookeeper是一个成熟的分布式协调服务,通过使用zookeeper我们可以较为方便的实现集群的选举。

leader选举 —— 非公平模式

Zookeeper节点类型

要想了解如何使用zookeeper实现选举,首先需要了解zookeeper节点的类型

当我们创建zookeeper节点时候,可以填一个CreateMode参数,通过这个参数可以指定创建的节点的类型。

1)PERSISTENT 该值会永久存在,哪怕创建该节点的机器挂了,节点数据依然会存在。注意,如果有两台机器创建了重复的key,比如/data,第二次创建会失败。
2)PERSISTENT_SEQUENTIAL 比如我们创建一个/test节点,zk会在后面加一串数字比如 /test/test0000000001。如果重复创建,会创建一个/test/test0000000002节点(一直往后加1,可以多次创建)
3)EPHEMERAL 临时节点,当创建该节点的机器失连了,创建的这个节点会被删除
4)EPHEMERAL_SEQUENTIAL 和 PERSISTENT_SEQUENTIAL差不多的,只是节点是临时的。

使用zookeeper实现非公平模式选举

了解了zookeeper节点的类型,我们就可以通过zk来实现选举。

什么是非公平模式选举

所谓的非公平模式的选举是相对的,假设有10台机器进行选举,最后会选到哪一个机器,是完全随机的(看谁抢的快)。比如选到了A机器。某一时刻,A机器挂掉了,这时候会再次进行选举,这一次的选举依然是随机的。与某个节点是不是先来的,是不是等了很久无关。这种选举算法,就是非公平的算法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值