MySQL Shell 8.4  /  ...  /  配置 InnoDB 集群端口

7.4.5 配置 InnoDB 集群端口

属于集群的实例使用不同的端口进行不同类型的通信。如果您使用 XCOM 通信栈,除了默认的 port(3306),该端口用于通过经典 MySQL 协议进行客户端连接,以及 mysqlx_port(默认为 33060)用于 X 协议客户端连接,还有一个用于集群中实例之间内部连接的端口,该端口不用于客户端连接。此端口由 localAddress 选项配置,该选项配置 group_replication_local_address 系统变量,并且此端口必须打开,以便集群中的实例可以相互通信。例如,如果您的防火墙阻止了此端口,那么实例就无法相互通信,并且集群无法正常工作。类似地,如果您的实例使用 SELinux,您需要确保 InnoDB 集群使用的所有必需端口都已打开,以便实例可以相互通信。请参阅 设置 MySQL 功能的 TCP 端口上下文MySQL Shell 端口

当您创建集群或将实例添加到集群时,默认情况下,localAddress 端口是通过将目标实例的 port 值乘以 10 然后将结果加 1 来计算的。例如,当目标实例的 port 为默认值 3306 时,计算出的 localAddress 端口为 33061。您应该确保集群实例使用的端口号与 localAddress 的计算方式兼容。例如,如果用于创建集群的服务器实例的 port 号大于 6553,则 dba.createCluster() 操作失败,因为计算出的 localAddress 端口号超过了最大有效端口 65535。为了避免这种情况,要么对用于 InnoDB 集群的实例使用更低的 port 值,要么手动分配 localAddress 值,例如

mysql-js> dba.createCluster('testCluster', {'localAddress':'icadmin@ic-1:33061'}

如果您使用 MYSQL 通信栈,则 localAddress 值将使用与 MySQL 服务器相同的网络地址自动生成。不需要额外的内部端口/地址。请参阅 第 7.5.9 节,“配置组复制通信栈”

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