标签:serve proc 变化 str 适合 链接 网络连接 排序 监听事件
zk集群的选举机制:半数机制:zk集群中的有半数以上的节点存活,zk就能正常运行,所以zk集群节点最好是奇数个。Zk集群中只有一个leader,其他都是follower
选举机制:会经过投票,票数大于半数以上的第一台服务器,当选leader
Server1 server2 server3 server4 server5
(id大的不给id小的投票,id小的会给id大的投票,server1-5,id依次增大)
5台机器:server1开始投票,server1投自己,因为server1 id最小,所以server1只有一票
Server2:server2会投自己,server1也会投server2一票,server2 两票
Server3:server3会投自己,server1和server2各自投server3一票,那么server3就三票,三票在半数以上(一共五台机器),所以就选server3当leader,
后边的server4(4票)和server5(5票)虽然来都比server3票数多,但是server3是第一个票数大于半数以上的,所以就选择server3当leader
1)首先要有一个main()线程
2)在main()线程中创建zookeeper的客户端,这时就会创建两个线程,一个负责网络连接通信(connect),一个负责监听(listen)
3)通过客户端创建的connect线程将注册的监听事件发送给zookeeper
4)在zookeeper server端的注册监听器列表中将注册的监听事件添加到列表中
5)Zookeeper监听到数据或路径发生变化,就会将这个消息发送给listen线程
6)Listen线程调用内部的process()方法,就是发生了数据变化之后怎么办,这是程序员自己开发的。
如图:
我们client想server发送写请求的时候,是如何进行写操作的,各个server的数据时如何保持一致的
理解: 是client给server发送写请求的时候,会把这个请求转发给leader,(写请求follower做不了主,但是读请求可以做主),leader会把这个写请求发送给各个server并进行写数据的操作,当各个server数据写完之后,会依次告知leader,当leader收到半数以上的server是写成功的话,leader就会认为这个写操作成功了,然后leader 在告知各个server,这条写操作成功了,然后就在将成功的消息发送给客户端,进行显示,这样就会保持每个server都有副本,数据从而达到一致
持久型(Persistent):客户端和服务器断开连接后,创建的链接不删除
短暂型(Epheneral):客户端个服务器断开理解后,创建的节点自己删除
持久节点包括:
(1)持久化目录节点:客户端不zk断开链接后,节点依旧存在
(2)持久化顺序编号目录节点:客户端与zk断开链接后,节点依旧存在 只是zk给该节点名称进行顺序编号。
序列号的作用:在分布式系统中,序列号可以被用于为所有的事件进行全局排序,这样客户端可以通过序列号判断事件的顺序
短暂型节点:
(1)临时目录节点:客户端与zk断开链接后,删除节点,最适合用于动态节点上下线
(2)临时顺序编号目录节点:客户端与zk断开链接后会删除该节点,只是命名的时候会添加顺序编号
五、zookeeper集群的选举机制,监听原理,写数据流程 和 节点类型,
标签:serve proc 变化 str 适合 链接 网络连接 排序 监听事件
原文地址:https://blog.51cto.com/13930997/2454384