一,zookeeper简介
zookeeper主要为分布式程序提供协调服务的,解决一致性等问题。如分布式中的高可用中的主节点的选择,CS架构中,有多台服务器,客户端对服务器的选择等应用场景。
zookeeper的主要角色是leader和follower,一个时间,只有一个leader,其余节点是follower,leader靠Paxos算法投票得出。
zookeeper主要使用的算法是Paxos算法,也是zookeeper的核心。可以自行了解。主要的角色提议者和接受者,每个节点都是公平的,都可以有这两个角色。下面是Paxos的主要的阶段:
接受者实际上只需要回复它接受过的proposal_id最大的提案即可,因为其它提案根本不可能会被选值策略选中。因此最终的协议如下,它就是Paxos:
阶段一 预提案阶段:
提议者Proposer:
向接受者Acceptor广播预提案,附带接下来提案Proposal的proposal_id
接受者Acceptor:
收到预提案后更新a_proposal_id = max(proposal_id,a_proposal_id),如果预提案的proposal_id>a_proposal_id,Acceptor回复记录的接受过的proposal_id最大的提案。
阶段二 提案阶段:
提议者Proposer:
等待直到收到大多数接受者对预提案的回复,从所有回复的提案组成的法定数目的提案集合K中挑选proposal_id最大的提案,以该提案的值作为本次提案的值。
如果K是空集,那么可以给提案任意赋值。然后把该提案广播给接受者们,提案