前言
如果看此文章请先看
https://mp.csdn.net/mdeditor/82751052#
Zk集群
在最开始的文章说过什么是集群?集群是为了提高高可用,也就是在一台机器宕机之后我们的另一台机器可以及时的补救过来,一般都是客户端与zk服务端的集群进行通信,使用的他是tcp的长连接方式,我们通过心跳包检测可以检查出来改zk是否宕机。如果宕机则使用另一个zk
通过图可以看出中间的是leader,他们之间都是互相通信的,就是他们的之间的数据都是保持一致的,这就是zk的Zab协议zookeeper atomatomic Broadcast
Zk master
如果你了解过分布式肯定没有少听过什么是主节点和从节点把,最开始的时候我们xx为主
后来xx死了,zz变成主的了
在后来XX活了
上面的例子只是简单的介绍了一下zk有这种机制,不用我们担心某一台挂了之后他们的数据得不到统一就完蛋了,但是他们是如何选举谁为maste?
zk中3个重要的角色
偷偷告诉你,如果你发现他们是这种新式大部都是读与写进行分离的,redis就是这样的,并且数据还可以同步,在redis里面用到的哨兵的机制,在这里用到的是选举的机制,其实都是大同小异
leader负责写数据或者读数据而其follow和observer负责的读数据,所以可以说是读写分离了,但是follow和observer他们之间是有区别的。 follow可以参与选举,但是observer是不负责选举的
Zk的leader宕机会发生什么?
1采用ZAB协议进行从新的选举
2选举阶段(leader election):最开始每个节点都处于选举节点,只要有一个节点获得的票数超过多个数节点的票数,那么这个时候他就是当选的准节点
3发现阶段(Discovery):followers 跟准leader进行通信,同步followers最近接受到的事物提议
4同步节点(synchronizeation):获取2最新提议历史,同步集群中所有副本。同步完成之后准leader成为准leader
5广播阶段(Broadcast):等到广播阶段。zookeeper集群才可以正式的对外提供事物服务,然后leader进行广播,同时有的新的节点加入,则同步新的节点
举个大白话例子
土匪老大死了
1土匪家族有威望的开始竞争,票数超过一半则入选
2其他没有入选的土匪告诉准土匪老大最近这段时间发生了什么事情
3准土匪老大收集到信息之后,他把所有的信息都同步,正式成为准的土匪老大
4由于他成立土匪老大所以他昭告土匪界,我已经是老大了,都听我的,跟我的数据一致,有新的小土匪过来的时候记得来找我汇报!
zk集群特性
1宕机之后立刻有leader产生,而且各个节点之间还是同步的
2消息广播,有新的节点加入可以同步