MySQL数据库集群方案汇总 - 图2

异步复制

MySQL数据库集群方案汇总 - 图3

Semi-Synchronous Replication(半同步复制)
MySQL数据库集群方案汇总 - 图4

  1. ![](https://cdn.nlark.com/yuque/0/2019/png/342742/1573610931091-48a51ccf-f101-4437-82fc-614e7c53e2e2.png)


Multi-threaded Slave(并行复制)


相关资料

MySQL Group Replication(MGR)

组复制是一种可用于实现容错系统的技术。 复制组是一个通过消息传递相互交互的 server 集群。通信层提供了原子消息(atomic message)和完全有序信息交互等保障机制实现了基于复制协议的多主更新 复制组由多个 server成员构成,并且组中的每个 server 成员可以独立地执行事务。但所有读写(RW)事务只有在冲突检测成功后才会提交。只读(RO)事务不需要在冲突检测,可以立即提交。句话说,对于任何 RW 事务,提交操作并不是由始发 server 单向决定的,而是由组来决定是否提交。准确地说,在始发 server 上,当事务准备好提交时,该 server 会广播写入值(已改变的行)和对应的写入集(已更新的行的唯一标识符)。然后会为该事务建立一个全局的顺序。最终,这意味着所有 server 成员以相同的顺序接收同一组事务。因此,所有 server 成员以相同的顺序应用相同的更改,以确保组内一致。


MySQL数据库集群方案汇总 - 图5

特点

  • 高一致性:基于分布式paxos协议实现组复制,保证数据一致性;
  • 高容错性:自动检测机制,只要不是大多数节点都宕机就可以继续工作,内置防脑裂保护机制;
  • 高扩展性:节点的增加与移除会自动更新组成员信息,新节点加入后,自动从其他节点同步增量数据,直到与其他节点数据一致;
  • 高灵活性:提供单主模式和多主模式,单主模式在主库宕机后能够自动选主,所有写入都在主节点进行,多主模式支持多节点写入。

    单主模式

组复制具有自动选主功能,每次只有一个 server成员接受更新。单写模式group内只有一台节点可写可读,其他节点只可以读。对于group的部署,需要先跑起primary节点(即那个可写可读的节点,read_only = 0)然后再跑起其他的节点,并把这些节点一一加进group。其他的节点就会自动同步primary节点上面的变化,然后将自己设置为只读模式(read_only = 1)。当primary节点意外宕机或者下线,在满足大多数节点存活的情况下,group内部发起选举,选出下一个可用的读节点,提升为primary节点。primary选举根据group内剩下存活节点的UUID按字典序升序来选择,即剩余存活的节点按UUID字典序排列,然后选择排在最前的节点作为新的primary节点。MySQL数据库集群方案汇总 - 图6

多主模式

所有的 server 成员都可以同时接受更新。group内的所有机器都是primary节点,同时可以进行读写操作,并且数据是最终一致的。

限制

  1. 必须使用innodb引擎,冲突时要回滚,使用其他引擎可能会数据不一致。
  2. 每个表都要求显示定义主键,用于冲突检测识别。
  3. 开启GTID,通过GTID来追踪各事务在各机器上的情况 。
  4. binlog使用row模式,确保各机器数据的一致性。
  5. 使用READ COMMITTED的隔离级别来规避Gap Locks
  6. 多主模式不支持在不同节点上对同一个数据库对象并发执行DDL(在不同节点上对同一行并发进行RW事务,后发起的事务会失败);

MMM架构

MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个slave的read负载均衡。

MySQL数据库集群方案汇总 - 图7
MySQL数据库集群方案汇总 - 图8

优点

高可用性,扩展性好,出现故障自动切换,对于主主同步,在同一时间只提供一台数据库写操作,保证的数据的一致性。

缺点

Monitor节点是单点,可以结合Keepalived实现高可用。

MHA架构

MHA,全称为MasterHigh Availability Manager and Toolsfor MySQL,是日本的一位MySQL专家采用Perl语言编写的一个脚本管理工具,该工具仅适用于MySQL Replication 环境,目的在于维持Master主库的高可用性。
MHA是基于标准的MySQL复制(异步/半同步)。
MHA是由管理节点(MHA Manager)和数据节点(MHA Node)两部分组成。
MHA Manager可以单独部署在一台独立机器,也可以部署在一台slave上。

MySQL数据库集群方案汇总 - 图9

MySQL Cluster

MySQL数据库集群方案汇总 - 图10

Percona XtraDB Cluster(PXC)

事务型应用下的通用的多主同步复制插件,主要用于解决强一致性问题,使得各个节点之间的数据保持实时同步以及实现多节点同时读写。
MySQL数据库集群方案汇总 - 图11

限制

1、存储引擎:
  基于PXC的复制仅适用于InnoDB存储引擎。
  对其他存储引擎的表,包括mysql.表之类的系统表,任何写入都不会被复制。
  那问题来了,如此这般创建用户那岂不是无法同步了?关于这个问题。对于基于DDL方式的语句还是被支持的。
  DDL语句使用基于语句级别的方式来实现(即不使用row模式)。
  对mysql.
表的所有已DDL方式的更改都将以语句级别式进行复制。
  如:CREATE USER… DDL被复制(语句级)
    INSERT INTO mysql.user… myisam存储引擎,不会被复制,因为非DDL语句
    当然也可以配置wsrep_replicate_myisam参数实现(不建议使用)
2、不支持的查询:
  LOCK TABLES在多主模式中不支持UNLOCK TABLES以及LOCK TABLES
  锁定功能,如GET_LOCK(),RELEASE_LOCK()等也不被支持
3、查询日志不能定向到表:
  如果启用查询日志记录,则必须将日志转发到文件
  使用general_log和general_log_file选择查询日志记录和日志文件名称
  log_output = file # Author : Leshami # Blog : https://blog.csdn.net/leshami
4、最大事务大小:
  允许的最大事务大小由wsrep_max_ws_rows和wsrep_max_ws_size变量定义
  LOAD DATA INFILE方式处理每10000行提交一次。对于大的事务将被分解众多小型事务
5、集群乐观并发控制:
  PXC集群使用乐观并发控制,事务发出COMMIT可能仍会在该阶段中止
  可以有两个事务写入相同的行并在单独的Percona XtraDB集群节点中提交,并且只有其中一个可以成功提交。
  失败的将被中止。对于集群级中止,Percona XtraDB集群返回死锁错误代码:
    (Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).
6、由于可能的提交回滚,XA事务不受支持:
7、硬件配置短板限制:
  整个群集的写吞吐量受最弱节点的限制。如果一个节点变慢,整个集群变慢。
  如果您对稳定的高性能有要求,那么它应该由相应的硬件支持。
8、建议的最小群集大小是3个节点。第三个节点可以是仲裁者。
9、InnoDB虚假更改功能不受支持。
10、enforce_storage_engine=InnoDB与wsrep_replicate_myisam=OFF(默认)不兼容 。
11、binlog_rows_query_log_events变量不受支持。
12、高负载时避免ALTER TABLE … IMPORT / EXPORT
  在集群模式下运行Percona XtraDB集群时,请避免ALTER TABLE … IMPORT / EXPORT工作负载。
  如果未在所有节点上同步执行,则可能导致节点不一致。
参考链接:https://www.percona.com/doc/percona-xtradb-cluster/LATEST/limitation.html