21.6 NDB 群集复制

NDB Cluster 支持异步复制,通常更简单地称为“复制”。本节说明如何设置和 Management 配置,在该配置中,作为 NDB 群集运行的一组计算机将复制到另一台计算机或一组计算机。我们假定 Reader 对标准 MySQL 复制非常熟悉,如本手册中其他部分所述。 (请参见第 16 章,复制)。

Note

NDB 群集不支持使用 GTID 复制。 NDB存储引擎也不支持半同步复制和组复制。

正常(非集群)复制涉及一个源服务器(以前称为“主服务器”)和一个副本服务器(以前称为“从属服务器”),之所以这样命名,是因为源的操作和要复制的数据均源于此服务器,副本是这些的接收者。在 NDB 群集中,复制在概念上非常相似,但实际上可能更为复杂,因为它可能会扩展为涵盖许多不同的配置,包括在两个完整群集之间进行复制。尽管 NDB 群集本身依赖于NDB存储引擎来实现群集功能,但是不必使用NDB作为复制 table 的副本副本的存储引擎(请参见从 NDB 复制到其他存储引擎)。但是,为了获得最大的可用性,可以(最好)从一个 NDB 群集复制到另一个 NDB 群集,我们讨论的就是这种情况,如下图所示:

图 21.43 NDB 群集到群集的复制布局

许多内容在周围的文本中进行了描述。它可视化如何复制 MySQL 源。复制副本的不同之处在于,它显示了一个指向中继二进制日志的 I/O 线程,该二进制日志指向一个 SQL 线程。此外,虽然二进制日志指向源服务器上的 NDBCLUSTER 引擎或来自源服务器上的 NDBCLUSTER 引擎,但在副本服务器上二进制日志却直接指向 SQL 节点(MySQL 服务器)。

在这种情况下,复制过程是其中源群集的连续状态被记录并保存到副本群集的过程。该过程由称为 NDB 二进制日志注入器线程的特殊线程完成,该线程在每个 MySQL 服务器上运行并生成二进制日志(binlog)。该线程确保将群集中产生二进制日志的所有更改(而不仅仅是通过 MySQL Server 进行的更改)以正确的序列化 Sequences 插入二进制日志。我们将 MySQL 源服务器和副本服务器称为复制服务器或复制节点,并将它们之间的数据流或通讯线路称为复制通道。

有关使用 NDB 群集和 NDB 群集复制执行时间点恢复的信息,请参阅第 21.6.9.2 节“使用 NDB 群集复制进行时间点恢复”

NDB API 副本状态变量. NDB API 计数器可以在副本群集上提供增强的监视功能。这些计数器被实现为 NDB 统计信息_slave状态变量,如SHOW STATUS的输出所示,或者针对mysqlClient 端会话中与SESSION_STATUSGLOBAL_STATUStable 查询的结果,该会话连接到充当 NDB 群集中的副本的 MySQL Server 复制。通过比较执行影响复制的NDBtable 的语句之前和之后的这些状态变量的值,您可以观察副本在 NDB API 级别上采取的相应操作,这在监视或对 NDB 群集复制进行故障排除时很有用。 第 21.5.13 节“ NDB API 统计信息计数器和变量”,提供其他信息。

从 NDB 复制到非 NDBtable. 可以使用其他 MySQL 存储引擎(例如mysqld上的InnoDBMyISAM)将NDB个 table 从充当复制源的 NDB 群集复制到 table 中。这受许多条件的约束;有关更多信息,请参见从 NDB 复制到其他存储引擎从 NDB 复制到非事务存储引擎