属于集群的实例使用不同的端口进行不同类型的通信。如果您使用 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
所定义。