mysql 集群方案

MySQL 复制

复制意味着数据从主(主)MySQL 服务器复制到一个或多个辅助(从)MySQL 服务器,而不是仅存储在一台服务器中。可以使用辅助服务器进行读取或管理任务

主从复制

MySQL 服务器异步复制,一个主服务器和一个或多个辅助服务器。

收到事务,主

  • 执行事务
  • 把修改的数据写入binary log
  • 主服务器上进行提交之前,binary log发送到辅助服务器的relay logs
  • 提交
  • 响应clinet

  • 重新执行(基于语句的复制)或应用(基于行的复制)事务
  • 把修改的数据写入binary log
  • 提交

半同步复制

主会等待从节点的确认

在传统的异步复制模式中,主数据库将事务写入二进制日志后,就会立即返回给客户端,而不等待从数据库接收和确认复制。这种情况下,主数据库无法保证从数据库已经成功复制了所有的事务,可能会导致主从数据的不一致。

而半同步复制通过引入同步确认机制,确保主数据库在提交事务之前,至少有一个从数据库已经接收并确认了复制。具体的工作流程如下:

  1. 主数据库接收到一个事务并写入二进制日志。
  2. 主数据库将事务的二进制日志发送给至少一个从数据库。
  3. 至少一个从数据库接收到事务的二进制日志后,将确认信息发送给主数据库。
  4. 主数据库等待至少一个从数据库发送确认信息。
  5. 主数据库在收到至少一个从数据库的确认信息后,才将事务提交。

半同步复制相比于异步复制会增加一定的延迟,因为主数据库需要等待至少一个从数据库的确认。如果确认的从数据库出现故障或网络问题,主数据库会等待超时时间后将事务提交,以避免无限等待。因此,在配置半同步复制时,需要权衡可靠性和延迟的需求,并根据实际情况进行适当的配置。

组复制 Group Replication

https://dev.mysql.com/doc/refman/5.7/en/group-replication.html

在 Group Replication 中,服务器通过消息传递保持强协调,以构建容错系统。MySQL 5.7版本及以上引入的一种高可用性和数据一致性解决方案。它基于原生的MySQL主从复制技术,并结合了多主复制和半同步复制的概念

在一个组中,每个服务器都可以独立执行事务。

  • 任何读写 (RW) 事务只有在组成员批准时才会提交。
  • 只读 (RO) 事务没有限制,可以立即提交。
  • 服务器会执行事务,并将具有唯一标识符的行发送到其他服务器。
  • 所有服务器都接收到,就会应用这次修改

如果发生冲突(如果多个服务器上的并发事务更新同一行),认证过程会检测到它,并且该组遵循第一个提交获胜规则

MySQL 组复制协议

  1. 多主复制:组复制允许多个节点同时作为读取和写入的目标,实现多主复制的架构。这种架构提供了更好的读写负载均衡和高可用性。
  2. 数据一致性:组复制通过在组内节点之间共享一致性视图和事务提交顺序来保证数据的一致性。这意味着在任何时刻,组内的节点都具有相同的数据状态。
  3. 自动失效检测和故障转移:组复制能够自动检测节点的失效,并在节点失效时进行故障转移,将写入流量切换到其他可用节点上。这可以确保系统的高可用性和故障恢复能力。
  4. 自动成员管理:当节点加入或离开复制组时,组复制会自动进行数据同步和重新分配,以保持组内节点的一致性。新节点可以通过复制组的成员管理机制进行加入,并接收数据复制。
  5. 基于Paxos协议:组复制的内部实现基于Paxos协议,用于共识算法和数据一致性的维护。Paxos协议确保了在节点故障和网络分区的情况下,组内节点仍然能够达成一致的共识。