zookeeper选主和同步机制
来源:互联网 发布:如何在一个数据区间 编辑:程序博客网 时间:2024/06/13 18:40
在上篇博文《zookeeper轻松入门》中,已经详细介绍了zookeeper的架构和数据交互的过程。我们已经知道zookeeper的更新操作具有强一致性,而这一过程正是通过leader广播实现的。本篇博文就在此基础上详细介绍一下zookeeper的选举机制的同步机制。
zab协议
Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。
选主和同步的联系
当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后,恢复模式就结束了。
因此,选主得到的leader保证了同步状态的进行,状态同步又保证了leader和Server具有相同的系统状态,当leader失去主权后可以在其他follower中选主新的leader。
为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch(年号)用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch(时期、。纪元),标识当前属于那个leader的统治时期。低32位用于递增计数。
每个Server在工作过程中有三种状态:
•LOOKING:当前Server不知道leader是谁,正在搜寻
•LEADING:当前Server即为选举出来的leader
•FOLLOWING:leader已经选举出来,当前Server与之同步
异常问题的处理
1). 选举过程中,新的Server加入
当一个Server启动时它都会发起一次选举,此时由选举线程发起相关流程,那么每个Server都会获得当前zxid最大的那个server,如果本次最大的Server没有获得n/2+1 个票数,那么下一次投票时,他将向zxid最大的Server投票,重复以上流程,最后一定能选举出一个Leader。
2). 选举过程中,Server退出
只要保证n/2+1个Server存活zk service仍可以正确工作,如果少于n/2+1个Server 存活就没办法选出Leader。
3). 选举过程中或选举完成后,Leader死亡
当选举出Leader以后,其他server已经处于FLLOWING 状态,本次选主过程正常进行。当选主完成后,所有的Fllower都会向Leader发送Ping消息,如果无法ping通,就改变自己的状为(FLLOWING ==> LOOKING),发起新的一轮选举。
4). 双主问题
Leader的选举是保证只产生一个公认的Leader的,而且Follower重新选举与旧Leader恢复并退出基本上是同时发生的,当Follower无法ping通Leader时就认为Leader已经出问题开始重新选举,Leader收到Follower的ping没有达到半数以上则要退出Leader重新选举。
- zookeeper选主和同步机制
- mysql、zookeeper、redis和elasticsearch主从同步机制
- mysql、zookeeper、redis和elasticsearch主从同步机制
- Zookeeper选主流程和同步流程
- Zookeeper的API调用的同步和异步机制以及watcher机制总结
- Zookeeper,etcd,consul内部机制和分布式锁和选主实现的比较
- zookeeper leader和learner的数据同步
- zookeeper 同步
- 线程同步和异步区别 同步机制
- 同步和异步消息机制
- 同步和异步消息机制
- Android 同步和消息机制
- Zookeeper实现分布式锁和选主
- 自己动手实现zookeeper的FastLeaderELection选举算法和心跳同步
- Memcache分组和同步机制的实现
- Memcache分组和同步机制的实现
- linux 多线程和同步机制的使用
- ThreadLocal和线程同步机制的比较
- CCF推荐国际刊物会议列表2015
- spring_boot 发布成war包 ,部署到外部的tomcat
- laravel编辑内容提交入库时传到update()方法
- UILabel分类扩展属性字符串的使用
- iOS5,iOS6,iOS7中UITabBarController,UINavigationController等界面中的旋转问题总结
- zookeeper选主和同步机制
- MySQL高可用之:MySQL-MMM
- 使用Socket处理跨进程的实时聊天
- 短信群发
- 【Struts2】:基于OGNL的类型转换
- 编程的智慧
- 和matlab一样的轻量级
- iOS 指纹验证
- collegeshare--api