属于集群的实例对不同类型的通信使用不同的端口。如果您使用的是 XCOM
通信栈,除了用于通过经典 MySQL 协议进行客户端连接的默认 port
(3306)和用于 X 协议客户端连接的 mysqlx_port
(默认为 33060)之外,还有一个用于集群中实例之间内部连接的端口,该端口不用于客户端连接。此端口由 localAddress
选项配置,该选项用于配置 group_replication_local_address
系统变量,并且此端口必须打开,以便集群中的实例可以相互通信。例如,如果您的防火墙阻止了此端口,则实例将无法相互通信,并且集群将无法正常工作。同样,如果您的实例使用的是 SELinux,则需要确保 InnoDB Cluster 使用的所有必需端口都已打开,以便实例可以相互通信。请参阅 为 MySQL 功能设置 TCP 端口上下文 和 MySQL Shell 端口。
默认情况下,当您创建集群或将实例添加到集群时,localAddress
端口是通过将目标实例的 port
值乘以 10 并将结果加 1 来计算的。例如,当目标实例的 port
为默认值 3306 时,计算出的 localAddress
端口为 33061。您应确保集群实例使用的端口号与 localAddress
的计算方式兼容。例如,如果用于创建集群的服务器实例的 port
号高于 6553,则 dba.createCluster()
操作将失败,因为计算出的 localAddress
端口号超过了最大有效端口 65535。为避免这种情况,请在用于 InnoDB Cluster 的实例上使用较低的 port
值,或手动分配 localAddress
值,例如
mysql-js> dba.createCluster('testCluster', {'localAddress':'icadmin@ic-1:33061'}
如果您使用的是 MYSQL
通信栈,则会使用与 MySQL 服务器相同的网络地址自动生成 localAddress 值。不需要额外的内部端口/地址。请参阅 第 7.5.9 节“配置组复制通信栈”。
可以手动定义 localAddress
,但使用的端口必须是 MySQL 正在侦听的端口,如 bind_address
中所定义。