知识卡片
主备选主机制的单点与多点Lease方案及其局限
内容
主备架构除了同步方式的取舍,还有一个绕不开的问题:谁来决定当前哪台是主机(选主)。最简单的实现是引入一个单点,定期轮询探测主机和各个备机的存活状态,据此判断该不该切换主备(书中提到MHA大致是这个原理)——这个方案的明显缺陷是选主的判断权集中在一个单点上,这个单点本身的可用性就成了整个系统的短板。改进方案是用类似ZooKeeper这样的多点协调服务替代单点:在每台数据库机器上部署一个Agent,与ZooKeeper保持Lease(租约)关系,一旦主机的Lease过期没有及时续约,就立即把这台机器置为只读——这种方式基本能保证不会同时出现两个主机(双主)的情况,因为Lease机制天然带有互斥性。但这个改进方案本身也不是没有代价:一是引入了ZooKeeper这样的额外组件,带来了ZooKeeper自身的可维护性问题;二是多级Lease(Agent到ZooKeeper、ZooKeeper到集群内其他角色)串联起来后,一旦发生故障,恢复所需要的时间会因为这些串联的Lease环节而被拉长。这个演进路径体现了分布式系统设计里一个反复出现的模式:从”单点判断”升级到”多点协调服务判断”能显著提升正确性(避免脑裂、双主),但引入协调服务本身又会带来新的运维负担和恢复时延问题——选主问题并没有被”一次性解决”,而是把复杂度从”避免双主”转移到了”如何管理好这套协调服务本身”,这也是后文要引入Paxos协议来更彻底地解决选主问题的动机所在。
参考来源
- 位置:《高可用架构(第1卷)》第2章《高可用架构原理与分布式实践》"2.10 架构师需要了解的Paxos原理、历程及实战"节,"2.10.1 数据库高可用性难题"(源文件:_epub-src/OEBPS/Text/Chapter2_10_2.xhtml)
- 结论依据:原文说明"最简单山寨的办法是搞一个单点,定时Select一下主机和各个备机……也可使用类似ZooKeeper的多点服务替代单点来改进……主机Lease过期后,立即置为只读……其缺点是ZooKeeper的可维护性问题,以及多级Lease的恢复时长问题",直接支撑本卡片结论。
- 原始内容:最简单山寨的办法是搞一个单点,定时Select一下主机和各个备机……也可使用类似ZooKeeper的多点服务替代单点来改进,在各个数据库机器上使用一个Agent与单点保持Lease……其缺点是ZooKeeper的可维护性问题,以及多级Lease的恢复时长问题。