集群管理器¶
从本质上讲,集群是一个分布式有限状态机,能够协调跨一组机器的相互关联服务的启动和恢复。
即使是能够在一台或多台机器上幸存故障的分布式或复制应用程序,也可以从集群管理器中受益,因为集群管理器具有以下功能
了解堆栈中的其他应用程序
虽然像 systemd 这样的 SYS-V init 替代品可以提供复杂服务堆栈的确定性恢复,但恢复仅限于一台机器,并且缺乏对其他机器上发生情况的了解。这种上下文对于确定本地故障与完全站点故障后的干净启动和恢复之间的区别至关重要。
了解其他机器上的实例
像 RabbitMQ 和 Galera 这样的服务具有复杂的启动序列,需要跨集群中的所有机器进行协调,并且通常需要序列化启动操作。尤其是在站点范围内的故障或关机之后,您必须首先确定最后一次处于活动状态的机器。
共享的实现和 法定人数 的计算
系统中的所有成员共享相同的对等体视图以及他们是否处于多数派非常重要。未能这样做会导致内部 分裂脑 状态,即系统不同部分朝不同的和不兼容的方向拉动。
通过 fencing(无响应的进程并不意味着它没有执行任何操作)实现数据完整性
单个应用程序没有足够的上下文来区分机器故障和机器上应用程序故障。通常的做法是假定机器已死并继续工作,但这是非常危险的。一个流氓进程或机器仍然可能响应请求并普遍造成破坏。更安全的方法是利用远程可访问的电源开关和/或网络交换机和 SAN 控制器来 fencing(隔离)机器,然后再继续。
自动恢复失败的实例
虽然应用程序可以在多个实例发生故障后仍然运行,但它可能没有足够的容量来服务所需的请求量。集群可以自动恢复失败的实例,以防止额外的负载引起的故障。