创建可容错系统最简单的方法是创建一些多余的组件。换句话说就是,某个组件被移除的情况下,系统还能持续正常运行。这会极大地系统的复杂性。备份数据库需要多个服务器来维护和管理,而不仅仅是一台服务器。而且,复制组是由多个服务器共同组成的,就会面临一些经典的分布式系统问题,例如网络分区和脑裂场景。
因此,最高级的挑战是融合数据库逻辑和多个服务器维护的数据备份的一致性和简单性的逻辑。换句话说就是,让多个服务器都认同系统状态、每台服务器上的数据以及系统经历的每个修改。这也可以概括成,让每台服务器在每个数据库状态上达到一致,以至于在所有服务器上的操作都可以看成是对一个数据库的操作,或者这些服务器将会达到最终一致状态。这意味着这些服务器的运行就像一个分布式状态机。
MGR在服务器之间保证了分布式状态机备份的强协调性。复制组内服务器之间将会自动协调。复制组可以是自动选主的单主模式,任一时刻仅有一台服务器可接受update操作。此外,对于更高级的用户来说,复制组也可以部署为多主模式,复制组内所有的服务器可以接受update操作,即使这些操作不是同步提交的。这种部署模式的代价是,应用运行将受到限制。
MySQL中有一个内置的组成员服务,用来维护任意时刻复制组的一致性和可用性的视图。复制组中所有服务器都可以离开或加入复制组,加入或离开时,视图也会相应更新。有时候,服务器可能因异常而脱离复制组,这种情况下,失败检测机制会检测到这些异常,并通知复制组对视图进行更新。以上动作都是自动化的。
对于一个将要提交的事务,如果复制组中大部分服务器对于该食物在全局事务序列中所在的位置持同意意见,则可以提交。决定提交或取消一个事务是由单个服务器独立完成的,但所有服务器需要做相同的决定。如果有网络分区,将会导致复制组成员无法达成一致,那么系统将不会处理此事务,除非这个问题被解决。因此也有一个内置的、自动化的脑裂保护机制。
所有这些都由Group Communication System(GCS)协议提供,包括失败检测机制、复制组成员服务、安全和完整的顺序消息传递。所有这些特性是创建一个系统、保持复制组间备份数据一致性的保证。每一项技术的核心都依赖于Paxos算法的实现。他就像是复制组交流引擎。