MySQL组复制提供分布式状态机复制,服务器之间有很强的协调性。组可以在具有自动主选举的单主模式下运行,其中一次只有一个服务器接受更新。或者,可以在多主模式下部署组,其中所有服务器都可以接受更新。有一个内置的组成员服务,可以在任何给定的时间点保持组视图的一致性和对所有服务器的可用性。服务器可以离开或加入组,视图也会相应地更新。
组复制是一种可用于实现容错系统的技术。复制组是一组服务器,每个服务器都有自己的数据的完整副本(无共享复制模式),并通过消息传递相互交互。通信层提供了一组保证,如原子消息和总顺序消息传递。
组复制保证数据库服务持续可用。但是,如果某个组成员不可用,连接到该组成员的客户机必须使用连接器、负载平衡器、路由器或某种形式的中间件重定向或故障转移到组中的另一个服务器。组复制没有完成此操作的内置方法。
复制组由多个服务器组成,组中的每个服务器可以在任何时候独立地执行事务。但是,所有读写事务只有在得到组的批准后才提交。换句话说,对于任何读写事务,组需要决定是否提交,因此提交操作不是原始服务器的单方面决定。只读事务不需要组内协调,可以立即提交。
对于要提交的事务,组中的大多数成员必须就给定事务在全局事务序列中的顺序达成一致。决定提交或中止事务是由每个服务器单独完成的,但所有服务器都做出相同的决定。如果存在网络分区,导致成员无法达成一致意见的分裂,则在此问题解决之前,系统不会继续运行。因此,也有一种内置的、自动的裂脑保护机制。
所有这些都由提供的组通信系统 (GCS) 协议提供支持。它们提供故障检测机制、组成员服务以及安全且完全有序的消息传递。所有这些属性都是创建系统的关键,该系统可确保数据在服务器组中一致地复制。这项技术的核心在于 Paxos 算法的实现。它充当组通信引擎。
MySQL组复制协议: