MySQL Shell 9.0  /  ...  /  配置组复制通信栈

7.5.9 配置组复制通信栈

InnoDB 集群和 ClusterSet 支持 MySQL 8.0.27 中引入的用于组复制的 MySQL 通信栈。

新选项 communicationStack: XCOM|MYSQL 设置组复制系统变量 group_replication_communication_stack 的值。

注意

communicationStack 选项不能与 adoptfromGR 一起使用。

通信栈类型

支持以下通信栈

  • MYSQL: (MySQL Server 8.0.27 或更高版本的默认值)

    • 通过使用 MySQL Server 的连接安全性代替组复制实现,简化了 InnoDB 集群的创建。

    • 无需为内部组复制通信使用额外的网络地址或端口。

    • 使用 MYSQL 协议意味着可以使用标准的用户身份验证方法来授予或撤销对组的访问权限,而不是使用允许列表。

    • 支持组复制的网络命名空间。

    Oracle 建议使用 MYSQL 通信栈而不是 XCOM

  • XCOM: (MySQL Server 8.0.26 或更早版本的默认值)。您可以在 MySQL 8.0.27 或更高版本中使用 XCOM 通信栈,但必须在创建或重启命令中明确定义它。

    XCOM 使用组复制实现的安全协议(包括 TLS/SSL 和对传入组通信系统 (GCS) 连接使用允许列表)来保护成员之间的组通信连接和分布式恢复连接。

选择通信栈

通信栈的选择由 dba.createCluster()<clusterSet>.createReplicaCluster() 命令中的 communicationStack 选项设置。

例如

js> dba.createCluster("testCluster", {communicationStack: "mysql"})

js> clusterset.createReplicaCluster("hostname:3306", "replica", {communicationStack: "mysql"})

每个命令都会检查 MySQL 服务器以确保它可以使用 MYSQL 协议。如果它不支持 MYSQL,则会显示错误并且命令失败。

addInstancerejoinInstancerescan 命令还会检查目标实例的通信栈支持,并相应地设置所需的配置选项。

  • ipAllowList.

    • XCOM: 默认情况下自动设置。

    • MYSQL: 未设置。 MYSQL 通信栈不允许使用 ipAllowList

  • localAddress

    • XCOM: (高级选项,不推荐)自动生成。需要额外的网络地址或端口。

    • MYSQL: 自动更新为使用 MySQL 服务器报告的值。

      可以手动定义 localAddress,但端口必须是 MySQL 正在侦听的端口之一,如 bind_address 中所定义。

  • 更新 SSL 设置。两种通信协议使用相同的 SSL 设置。

切换通信栈

可以在从完全中断操作重启期间切换通信栈。

例如

js> dba.rebootClusterFromCompleteOutage("testcluster", {switchCommunicationStack: "mysql"})

MYSQL 协议切换到 XCOM 需要为 localAddress 提供额外的网络地址,并且可能还需要 ipAllowList 值。

如果从 XCOM 切换到 MYSQL 栈,则会进行以下更改

  • 取消设置 ipAllowList

  • localAddress 更新为使用 MySQL 服务器报告的值。

  • 更新 SSL 设置。如果 memberSslMode 设置为 VERIFY_CA 或 VERIFY_IDENTITY,则从 MySQL 服务器复制设置。如果 memberSslMode 设置为 REQUIRED,则不会进行任何更改。

    注意

    如果 memberSslMode 设置为除 DISABLED 以外的任何值,则始终启用 group_replication_recovery_use_ssl