ZooKeeper仲裁机制
概述
zk服务器运行模式分成两种:
- 独立模式
- 仲裁模式
如果是用独立模式(standalone),则zk的状态是无法进行复制的,这才生产环境中,会造成一定的风险,事实上,我们确实有这种情况存在,这源于初期架构的思考和公司经济的问题。而在仲裁(quorun)模式下,则是我们当前流行的分布式集群,我们称之为集合。是用仲裁,不仅可以进行状态的复制,也可以同时服务于客户端的请求。
仲裁
采用仲裁方式的复制集群中,由于具备高可用的镜像复写功能,如果客户端需要等待每个服务器完成数据的螺钉后在继续,则延时的问题会变得比较突出,要知道,延时,在大流量的访问中,是不可接收的,但不代表能消灭延时。
此时,在ZK的设计思路中,为了规避这个问题,则衍生除了法定人数的思想,即我们只需要保证我们的集群中,由若干算法模式下实现的人数能完成对应的信息落地之后,则认为客户端可以继续下一波的操作,而不是等到所有集群完全落实才继续下去。例如,我们由5个zk服务器,而法定人数为3人,则我们只需要确保其中的3台服务器保存了对应的数据,客户端就可以继续,而其他两个服务器在正常的中状态下,最终也是能获取到数据,并保存下来
这就是为什么我们要求zk的部署,起码是奇数台的其中一个原因。
<
请注意,假设我们由f个服务器,则允许其崩溃的数据必须小于服务器数量的一半,即5台,只能允许2台崩溃。