MySQL 8.0.16及之后的实例支持Group Replication自动重加入功能,您可以配置实例被驱逐后自动重加入集群。
有关背景信息,请参阅
对故障检测和网络分区的响应。AdminAPI 提供了
autoRejoinTries
配置实例在被驱逐后重新加入集群的尝试次数的选项。默认情况下,实例不会自动重新加入集群。您可以
autoRejoinTries
使用以下命令在集群级别或为单个实例配置该选项:
dba.createCluster()
Cluster.addInstance()
Cluster.setOption()
Cluster.setInstanceOption()
该autoRejoinTries
选项接受 0 到 2016 之间的正整数值,默认值为 3。使用自动重新加入功能时,您的集群对故障的容忍度更高,尤其是网络不可靠等临时故障。但是如果法定人数已经丢失,你不应该期望成员自动重新加入集群,因为重新加入实例需要多数。
运行 MySQL 版本 8.0.12 及更高版本的实例具有该
group_replication_exit_state_action
变量,您可以使用 AdminAPI
exitStateAction
选项对其进行配置。这控制了实例在意外离开集群时执行的操作。默认情况下,该exitStateAction
选项
READ_ONLY,
意味着离开集群的实例意外变为只读。如果
exitStateAction
设置为
OFFLINE_MODE
(从 MySQL 8.0.18 开始可用),离开集群的实例将意外变为只读并进入离线模式,在该模式下它们断开现有客户端并且不接受新连接(具有管理员权限的客户端除外)。如果
exitStateAction
设置为
ABORT_SERVER
然后在意外离开集群的情况下,实例关闭 MySQL,并且必须重新启动它才能重新加入集群。请注意,当您使用自动重新加入功能时,该exitStateAction
选项配置的操作仅在所有重新加入集群的尝试都失败的情况下才会发生。
您有可能连接到一个实例并尝试使用 AdminAPI 对其进行配置,但此时该实例可能正在重新加入集群。每当您使用以下任何操作时,都可能发生这种情况:
Cluster.status()
dba.getCluster()
Cluster.rejoinInstance()
Cluster.addInstance()
Cluster.removeInstance()
Cluster.rescan()
Cluster.checkInstanceState()
当实例自动重新加入集群时,这些操作可能会提供额外信息。此外,当您使用 时
,如果目标实例自动重新加入集群,除非您传入 ,否则操作将中止
Cluster
.removeInstance()force:true
。