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