Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Communication Stack for Connection Security Management

20.6.1 连接安全性管理:通信栈

MySQL 8.4 Group Replication 可以通过以下方法来保护组间通信连接:

  • 使用自己的安全协议实现,包括 TLS/SSL 和入站 Group Communication System(GCS)连接的白名单。

  • 使用 MySQL Server 自己的连接安全性取代 Group Replication 的实现。使用 MySQL 协议意味着可以使用标准用户身份验证方法来授予(或撤销)对组的访问权限,而不是白名单,并且服务器协议的最新功能总是可用的。

选择由设置系统变量group_replication_communication_stackXCOM以使用 Group Replication 自己的实现(这是默认选择),或到MYSQL以使用 MySQL Server 连接安全性。

以下是 replication 组要使用 MySQL 通信栈所需的额外配置。特别重要的是,在从使用 XCom 通信栈切换到 MySQL 通信栈时,确保这些要求都被满足。

Group Replication 对 MySQL 通信栈的要求

  • 每个组成员的网络地址,配置由group_ replication_local_address系统变量指定,必须设置为MySQL Server监听的IP地址和端口之一,正如bind_address系统变量对服务器指定的那样。每个成员的IP地址和端口组合必须在组中唯一。建议将group_ replication_group_seeds系统变量对每个组成员配置,以包含所有组成员的本地地址。

  • MySQL 通信栈支持网络命名空间,而XCom 通信栈不支持。如果使用网络命名空间与组复制本地地址(group_ replication_local_address),这些必须对每个组成员使用CHANGE REPLICATION SOURCE TO语句配置。同时,对于每个组成员,report_host服务器系统变量必须设置为报告命名空间。所有组成员都必须使用相同的命名空间,以避免分布式恢复期间可能出现的地址解析问题。

  • 必须将group_replication_ssl_mode系统变量设置为群组通信所需的设置。这個系统变量控制是否启用或禁用TLS/SSL对群组通信。当使用MySQL通信栈时,TLS/SSL配置将来自Group Replication的分布式恢复设置。该设置应在所有群组成员上相同,以避免潜在冲突。

  • 服务器系统变量require_secure_transport的值应该在所有群组成员上相同,以避免潜在冲突。如果group_replication_ssl_mode设置为REQUIREDVERIFY_CAVERIFY_IDENTITY,请使用require_secure_transport=ON。如果group_replication_ssl_mode设置为DISABLED,请使用require_secure_transport=OFF

  • 如果为群组通信启用TLS/SSL,Group Replication的分布式恢复安全设置必须配置或验证。如果这些设置已经存在,可以忽略本节内容。MySQL 通信栈使用这些设置不仅用于成员之间的分布式恢复连接,还用于一般群组通信中的TLS/SSL配置。group_ replication_recovery_use_ssl和其他group_ replication_recovery_*系统变量在第20.6.3.2节,“Secure Socket Layer (SSL) Connections for Distributed Recovery”中有详细解释。

  • Group Replication allowlist在使用MySQL 通信栈时不被使用,因此group_ replication_ip_allowlist系统变量将被忽略,不需要设置。

  • Group Replication用于分布式恢复的replication用户账户,使用CHANGE REPLICATION SOURCE TO语句配置,将在MySQL 通信栈中用于Group Replication连接的身份验证。这账户,在所有群组成员上相同,必须具有以下权限:

    • GROUP_REPLICATION_STREAM. 该权限是用户账户需要的,以便使用 MySQL 通信栈来建立 Group Replication 连接。

    • CONNECTION_ADMIN. 该权限是必要的,以免在某个服务器被置于离线模式时,Group Replication 连接被终止。如果没有这权限,MySQL 通信栈将在其中一个服务器被置于离线模式时将其从组中驱逐。

    此外,还需要所有复制用户账户都具有的权限REPLICATION SLAVEBACKUP_ADMIN(见第20.2.1.3节,“分布式恢复用户凭证”)。在添加新权限时,请确保在每个组成员上设置SET SQL_LOG_BIN=0,然后执行GRANT语句,并在完成后设置SET SQL_LOG_BIN=1,以免本地事务干扰 Group Replication 重启。

group_replication_communication_stack 是一个群组级别的配置设置,所有群组成员都必须具有相同的值。然而,这不是 Group Replication 自己检查群组级别配置设置的方式。拥有不同值的成员无法与其他成员通信,因为通信协议不兼容,因此无法交换其配置设置信息。

这意味着,即使在 Group Replication 运行时可以更改该系统变量的值,并且在重新启动群组成员后生效,但是成员仍然不能重新加入群组,直到所有成员都更改了该值。你必须停止 Group Replication 在所有成员上,然后在所有成员上更改该系统变量的值,最后才能重新启动群组。由于所有成员都已停止,因此需要对群组进行完整的重启(由具有group_replication_bootstrap_group=ON的服务器执行的引导)以使更改生效。你可以在成员停止时对其他必需设置进行更改。

要将运行中的群组从 XCom 通信栈迁移到 MySQL 通信栈,或者从 MySQL 通信栈迁移到 XCom 通信栈,请按照以下步骤更改group_replication_communication_stack 和其他必需设置的值:

  1. 在每个组成员上,使用STOP GROUP_REPLICATION语句停止群组复制。最后停止主成员,以避免触发新的主选举并等待其完成。

  2. 在每个组成员上,设置系统变量group_replication_communication_stack为新的通信栈,例如MYSQLXCOM。您可以通过编辑MySQL Server配置文件(通常名为my.cnf在Linux和Unix系统上,或者my.ini在Windows系统上),或使用SET语句来实现。例如:

    SET PERSIST group_replication_communication_stack="MYSQL";
  3. 如果您正在从XCom通信栈(默认)迁移到MySQL通信栈,在每个组成员上,配置或重新配置所需的系统变量,以适应上述列表中的设置。例如,group_replication_local_address系统变量必须设置为MySQL Server正在监听的IP地址和端口之一。另外,还需要使用CHANGE REPLICATION SOURCE TO语句配置网络命名空间。

  4. 如果您正在从XCom通信栈(默认)迁移到MySQL通信栈,每个组成员上都需要执行GRANT语句,以授予复制用户账户GROUP_REPLICATION_STREAMCONNECTION_ADMIN权限。您需要将组成员从Group Replication停止时应用的只读状态中取出。此外,请在执行GRANT语句前,设置每个组成员上的SQL_LOG_BIN为0,然后在执行GRANT语句后,设置为1,以避免本地事务干扰Group Replication重启。例如:

    SET GLOBAL SUPER_READ_ONLY=OFF;
    SET SQL_LOG_BIN=0; 
    GRANT GROUP_REPLICATION_STREAM ON *.* TO rpl_user@'%';
    GRANT CONNECTION_ADMIN ON *.* TO rpl_user@'%';
    SET SQL_LOG_BIN=1;
  5. 如果您正在从MySQL通信栈迁移到XCom通信栈,每个组成员上都需要重新配置系统变量,以适应XCom通信栈的设置。第20.9节,“Group Replication Variables”列出了XCom通信栈的系统变量及其默认值和要求。

    Note
  6. 要重新启动组,请按照第20.5.2节,“重启组”中的过程进行,该节解释了如何安全地在事务已经执行和证实的情况下引导组。由具有group_replication_bootstrap_group=ON的服务器进行引导是必要的,因为所有成员都需要关闭。

  7. 现在,每个成员使用新的通信栈连接到其他成员。任何具有group_replication_communication_stack设置为之前的通信栈(或在XCom的情况下默认)的服务器现在不能加入组。需要注意的是,因为Group Replication无法看到加入尝试,它不会检查并 reject加入成员,并返回错误消息,而是当之前的通信栈放弃尝试联系新的通信栈时,加入尝试失败地 silence。