MySQL Shell 8.4  /  ...  /  配置实例的自动重新加入

7.5.5 配置实例的自动重新加入

运行 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