zookeeper选举如何实现的?

2020-04-27 15:14:14 java常见问答 3428

大家是否知道zookeeper的选举吗?听到这个词是不是有点陌生呢?今天跟着小编的步伐一起来学习什么是zookeeper选举,接下来让我们一起来了解下吧。

就以主从节点选举为列来进行讲解选举的含义如下:

当我们使用mysql时候,为了做到高可用,我们会同时发布两个mysql,一主多备。这个时候,假如master节点挂了,多个slave节点哪一个会被选为主节点?然而这里就会涉及到“选举”,从多个slave节点里选出一个新的master。

用zookeeper来做集群的选举

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

leader选举 —— 非公平模式

Zookeeper节点类型

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

public String create(final String path, byte data[], List < ACL > acl, CreateMode createMode)

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

1)PERSISTENT 该值会永久存在,哪怕创立该节点的机器挂了,节点数据仍然会存在。注意,假如有两台机器创立了重复的key,比方/data,第二次创立会失败。

2)PERSISTENT_SEQUENTIAL 比方我们创立一个/test节点,zk会在后面加一串数字比方 /test/test0000000001。假如重复创立,会创立一个/test/test0000000002节点(一直往后加1,能屡次创立)

3)EPHEMERAL 临时节点,当创立该节点的机器失连了,创立的这个节点会被删除

4)EPHEMERAL_SEQUENTIAL 和 PERSISTENT_SEQUENTIAL差不多的,只是节点是临时的。

2)什么是非公平模式选举?

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

非公平选举算法

1)首先通过zookeeper来创建 /server 的PERSISTENT的节点

2)多台机器同时创立 /server/leader EPHEMERAL子节点

3)子节点只可以创立一个,后创立的会失败。创立成功的节点被选为leader节点

4)所有机器监听 /server/leader 的变化,一旦节点被删除,就重新进行选举,抢占式地创立 /server/leader节点,谁创立成功谁就是leader

以上就是今天所讲的zookeeper选举的相关知识内容,如果想要了解更多java一些知识问答,那么就请继续关注本网站吧。