运行 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
,否则该操作将中止。