创建集群时是否需要知道ipWhitelist中包含的所有主机?

Is it necessary to know all hosts contained in ipWhitelist on cluster creation?

我正在玩弄 MySQL 8.0.14 和 InnoDB 集群。 我目前坚持通过 mySQL shell.

创建组复制

因为我想使用 SSL,所以我需要在 dba.createCluster() 上设置 ipWhitelist,如下所示:

var cluster = dba.createCluster('testCluster4', {ipWhitelist:'somedns-1.tosqlnode'})

集群创建成功。现在我想添加另一个实例。

cluster.addInstance('ca@somedns-2.tosqlnode', {ipWhitelist:'somedns-1.tosqlnode,somedns-2.tosqlnode'})

这失败了,因为第一个实例显示了一个错误,指出一个未列入白名单的实例正在尝试连接。


所以再创建一个:

var cluster = dba.createCluster('testCluster5', {ipWhitelist:'somedns-1.tosqlnode,somedns-2.tosqlnode'})

集群创建成功。现在我想添加另一个实例。

cluster.addInstance('ca@somedns-2.tosqlnode', {ipWhitelist:'somedns-1.tosqlnode,somedns-2.tosqlnode'})

实例添加成功。


创建集群时真的需要知道所有实例地址吗?我无法通过 MySQL shell 找到更改初始 ipWhitelist 的方法。

是的,是的。并且请注意它需要是双向的(因为您在第二次尝试中正确设置)。此外,您可以使用 CIDR 表示法 select 您想要成为的特定子网 "whitelisted".

有关更多信息,请查看有关 ip-whitelist 的文档部分:https://dev.mysql.com/doc/refman/8.0/en/group-replication-ip-address-whitelisting.html

关于通过 Shell 更改 运行 集群的当前 ip 白名单的可能性,这是不可能的。您需要重新创建集群:

cluster.dissolve({force: true])
var cluster = dba.createCluster('myCluster', {ipWhitelist:'<myIpWhitelist'})

干杯,

米格尔

如果您希望能够动态添加节点,您需要将 group_replication_ip_whitelist 设置为 AUTOMATIC。这是在配置期间未从 Shell 指定任何 ipWhitelist 时完成的(默认)。如果没有,你必须按照 Miguel 上面写的去做。