### 18.6.1 连接安全管理方法

从 MySQL 8.,0.27 开始，Group Replication 可以通过以下方法之一保护成员之间的组通信连接：

-   使用其自己的安全协议实现，包括 TLS/SSL 和对传入组通信系统 (GCS) 连接使用允许列表。这是 MySQL 8.0.26 及更早版本的唯一选项。

-   使用 MySQL 服务器自己的连接安全代替 Group Replication 的实现。使用 MySQL 协议意味着可以使用标准的用户身份验证方法来授予（或撤销）对组的访问权限，而不是允许列表，并且服务器协议的最新功能在发布时始终可用。此选项自 MySQL 8.0.27 起可用。

    通过设置系统变量进行选择[`group_replication_communication_stack`](group-replication-options.html#sysvar_group_replication_communication_stack)到`XCOM`使用 Group Replication 自己的实现（这是默认选择），或者`MYSQL`使用 MySQL 服务器的连接安全性。如果您选择后者，请注意下面解释的额外要求。

#### 配置组以使用 MySQL 通信堆栈

组需要以下附加配置才能使用 MySQL 的通信堆栈。当您从使用 XCom 通信堆栈切换到您的组的 MySQL 通信堆栈时，确保满足所有这些要求尤其重要。

-   配置的网络地址[`group_replication_local_address`](group-replication-options.html#sysvar_group_replication_local_address)每个组成员的系统变量必须设置为 MySQL 服务器正在侦听的 IP 地址和端口之一，由[`绑定地址`](server-system-variables.html#sysvar_bind_address)服务器的系统变量。每个成员的 IP 地址和端口的组合在组中必须是唯一的。

-   如果在组复制本地地址中使用网络名称空间，则必须使用[`将复制源更改为`](change-replication-source-to.html)陈述。这[`报告主机`](replication-options-replica.html#sysvar_report_host)每个组成员的服务器系统变量必须设置为报告命名空间。所有组成员必须使用相同的命名空间以避免在分布式恢复期间可能出现的地址解析问题。

-   组复制用于分布式恢复的复制用户帐户，如使用[`将复制源更改为`](change-replication-source-to.html)声明，必须给出新的[`GROUP_REPLICATION_STREAM`](privileges-provided.html#priv_group-replication-stream)特权。此用户帐户在所有组成员上必须相同。MySQL 通信堆栈在设置连接时使用它进行身份验证。

-   这[`group_replication_ssl_mode`](group-replication-options.html#sysvar_group_replication_ssl_mode)系统变量必须设置为组通信所需的设置。此系统变量控制是否为组通信启用或禁用 TLS/SSL。对于 MySQL 8.0.26 及更早版本，TLS/SSL 配置始终取自服务器的 SSL 设置；对于 MySQL 8.0.27 及更高版本，当使用 MySQL 通信堆栈时，TLS/SSL 配置取自 Group Replication 的分布式恢复设置。所有组成员的此设置应相同，以避免潜在的冲突。

-   如果为组通信启用了 TLS/SSL，则必须配置组复制的用于保护分布式恢复的设置（如果尚未配置）或验证（如果已配置）。MySQL 通信堆栈不仅将这些设置用于成员到成员的分布式恢复连接，还用于一般组通信中的 TLS/SSL 配置。

-   的设置[`--ssl`](server-options.html#option_mysqld_ssl)要么[`--skip-ssl`](server-options.html#option_mysqld_ssl)服务器选项和[`require_secure_transport`](server-system-variables.html#sysvar_require_secure_transport)服务器系统变量在所有组成员上应该相同，以避免潜在的冲突。如果[`group_replication_ssl_mode`](group-replication-options.html#sysvar_group_replication_ssl_mode)被设定为`必需的`,`验证_CA`， 要么`VERIFY_IDENTITY`， 采用[`--ssl`](server-options.html#option_mysqld_ssl)和[`require_secure_transport=开启`](server-system-variables.html#sysvar_require_secure_transport).如果[`group_replication_ssl_mode`](group-replication-options.html#sysvar_group_replication_ssl_mode)被设定为`已禁用`， 采用[`require_secure_transport=OFF`](server-system-variables.html#sysvar_require_secure_transport).

笔记

-   在运行时更改上述系统变量不会影响已建立的连接或传入的连接。要更改为 MySQL 连接协议，需要在重新配置后重新启动 Group Replication。

-   当组使用 MySQL 通信堆栈时，不使用组复制允许列表，因此[`group_replication_ip_allowlist`](group-replication-options.html#sysvar_group_replication_ip_allowlist)和[`group_replication_ip_whitelist`](group-replication-options.html#sysvar_group_replication_ip_whitelist)系统变量被忽略，无需配置。

-   建议将[`group_replication_group_seeds`](group-replication-options.html#sysvar_group_replication_group_seeds)每个组成员的系统变量被配置为包含所有组成员的所有本地地址。

#### 将一个组从使用 XCom 通信堆栈迁移到 MySQL

通讯栈

以下是要遵循的步骤：

1.  停止所有成员中的组复制

2.  更改值[`group_replication_communication_stack`](group-replication-options.html#sysvar_group_replication_communication_stack)到`MYSQL`，并重新配置系统变量，如[`group_replication_local_address`](group-replication-options.html#sysvar_group_replication_local_address),[`group_replication_group_seeds`](group-replication-options.html#sysvar_group_replication_group_seeds)，依此类推，适用于所有组成员，如中所述[配置组以使用 MySQL 通信堆栈](group-replication-connection-security.html#group-replication-configure-mysql-stack).

3.  在所有成员中启动组复制

4.  成员现在使用 MySQL 通信堆栈相互连接。任何具有[`group_replication_communication_stack=XCOM`](group-replication-options.html#sysvar_group_replication_communication_stack)将无法再加入群组

#### 将一个组从使用 MySQL 通信堆栈迁移到 XCom

通讯栈

以下是要遵循的步骤：

1.  停止所有成员中的组复制

2.  更改值[`group_replication_communication_stack`](group-replication-options.html#sysvar_group_replication_communication_stack)到`XCOM`, 并调整[`group_replication_local_address`](group-replication-options.html#sysvar_group_replication_local_address),[`group_replication_group_seeds`](group-replication-options.html#sysvar_group_replication_group_seeds), 以及根据需要为所有成员进行其他网络配置，因为分布式恢复的设置将不再用于普通组通信

3.  删除任何组成员本地地址中的命名空间引用，因为 XCom 通信堆栈不支持使用命名空间。相应地调整服务器地址

4.  在所有成员中启动组复制

5.  成员现在连接到 XCom 通信堆栈。任何具有[`group_replication_communication_stack=MYSQL`](group-replication-options.html#sysvar_group_replication_communication_stack)将无法再加入群组
