为什么服务器数量必须是奇数?zookeeper工作原理再思考
在泰山服务器上测试zookeeper时,感慨万千。
一来感慨居然用上了国产的硬件体系,二来也是盼望什么时候有国人提出的类似Paxos这样基石性质的算法
一、zookeeper工作原理
ZooKeeper是一个典型的分布式数据一致性的解决方案。分布式应用可借助Zookeeper它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等服务管理功能。
顺序一致性
从同一个客户端发起的事务请求,最终将会严格按照其发起顺序被应用到ZooKeeper中。原子性
所有事务请求的结果在集群中所有机器上的应用情况是一致的,也就是说要么整个集群所有集群都成功应用了某一个事务,要么都没有应用,一定不会出现集群中部分机器应用了该事务,而另外一部分没有应用的情况。单一视图
无论客户端连接的是哪个ZooKeeper服务器,其看到的服务端数据模型都是一致的。可靠性
一旦服务端成功地应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务端状态变更将会被一直保留下来,除非有另一个事务又对其进行了变更。实时性
通常人们看到实时性的第一反应是,一旦一个事务被成功应用,那么客户端能够立即从服务端上读取到这个事务变更后的最新数据状态。这里需要注意的是,ZooKeeper仅仅保证在一定的时间段内,客户端最终一定能够从服务端上读取到最新的数据状态。
二、过半机制
zookeeper集群中所有的操作都必须遵从过半机制,即必须保证一半以上的Server同意这个proposal,这个提议才会成功。
zookeeper中的过半机制保证了zookeeper集群的数据一致性。
三、服务器为什么是奇数
leader选举算法采用了paxos协议
paxos核心思想:当多数server写成功,则任务数据写成功。
2N-1台服务器和2N台服务器的容灾能力是一样的。因此服务器数量一般为单数个。例如,如果有3个server,最多允许有一个server挂掉,如果有4个server,则同样最多允许一个server挂掉,
- 点赞
- 收藏
- 关注作者
评论(0)