在大型分布式系统中,会存在多个特定功能的集群。最常见的就是协调者集群,如提供分布式锁,分布式事务的协调者集群。集群中的多个机器对外提供统一的状态、一致的数据,这就需要在集群中选择一个主节点(领导者),来管理集群中的其他节点(跟随者)。这个选择主节点的过程就叫做分布式选举。
成都创新互联公司10多年成都企业网站定制服务;为您提供网站建设,网站制作,网页设计及高端网站定制服务,成都企业网站定制及推广,对成都房屋鉴定等多个方面拥有丰富建站经验的网站建设公司。分布式选举的算法有Paxos算法、Raft算法、Bully算法等。
Paxos算法Paxos算法是Leslie Lamport在1990年提出的一种基于消息传递的一致性算法。基于Paxos协议的数据同步与传统主备方式大的区别在于:Paxos只需超过半数的副本在线且相互通信正常,就可以保证服务的持续可用,且数据不丢失。
Paxos将系统中的角色分为提议者 (Proposer),决策者 (Acceptor),和最终决策学习者 (Learner):
在多副本状态机中,每个副本同时具有Proposer、Acceptor、Learner三种角色。
Paxos算法通过一个决议分为两个阶段(Learn阶段之前决议已经形成):
Basic-Paxos解决的问题:在一个分布式系统中,如何就一个提案达成一致。
Mulit-PaxosMulit-Paxos解决的问题:在一个分布式系统中,如何就一批提案达成一致。
应用场景举例:Zookeeper(zookeeper选举机制)
Raft算法Raft算法是Paxos算法的一种简化实现。包括三种角色:leader,candidate和follower。
Etcd、Consul
Raft是基于对Multi-Paxos的两个限制形成的:
发送的请求的是连续的, 也就是说Raft的append 操作必须是连续的, 而Paxos可以并发 (这里并发只是append log的并发, 应用到状态机还是有序的)。
Raft选主有限制,必须包含最新、最全日志的节点才能被选为leader. 而Multi-Paxos没有这个限制,日志不完备的节点也能成为leader。
Raft可以看成是简化版的Multi-Paxos。
Multi-Paxos允许并发的写log,当leader节点故障后,剩余节点有可能都有日志空洞。所以选出新leader后, 需要将新leader里没有的log补全,在依次应用到状态机里。
Bully算法Garcia-Monila 在 1982 年的一篇论文中发明了所谓的霸道选举算法(Bully Algorithm)。其基本思想是:当一个进程P发现协调者不再响应请求时,就判定协调者出现故障,于是它就发起选举,选出新的协调者,即当前活动进程中进程号大者。
三种消息类型:
mongodb、elasticsearch(Master选举)
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧