运行 MySQL 8.0.16 及更高版本的实例支持组复制自动重新加入功能,该功能使您能够配置实例以在被驱逐后自动重新加入集群。有关背景信息,请参见对故障检测和网络分区做出响应。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
,意外离开集群的实例将变为只读,并且还会进入脱机模式,在此模式下它们会断开现有客户端的连接,并且不接受新的连接(来自具有管理员权限的客户端除外)。如果exitStateAction
设置为ABORT_SERVER
,则在意外离开集群时,实例会关闭 MySQL,必须先启动它才能重新加入集群。请注意,当您使用自动重新加入功能时,由exitStateAction
选项配置的操作仅在所有重新加入集群的尝试都失败时才会发生。
您可能有机会连接到某个实例并尝试使用 AdminAPI 配置它,但此时该实例可能正在重新加入集群。无论何时使用以下任何操作,都可能发生这种情况:
Cluster.status()
dba.getCluster()
Cluster.rejoinInstance()
Cluster.addInstance()
Cluster.removeInstance()
Cluster.rescan()
这些操作在实例自动重新加入集群时可能会提供额外的信息。此外,当您使用
时,如果目标实例正在自动重新加入集群,则操作会中止,除非您传入Cluster
.removeInstance()force:true
。