实例重新加入集群
如果实例离开集群,例如因为失去连接,并且由于某种原因无法自动重新加入集群
如果实例具有super_read_only=ON,需要设置成super_read_only=OFF
如果实例尚未保留其配置,则重新启动后,实例不会自动重新加入集群。解决方案是发出cluster.rejoinInstance()以便将实例再次添加到集群中并确保更改得到持久化。
如果您要重新加入以某种方式发生更改的实例,那么您可能必须修改该实例才能使重新加入过程正常工作。例如server_uuid发生变化,尝试重新加入此类实例会失败,因为 InnoDB Cluster 实例由server_uuid变量标识。在这种情况下,必须从 InnoDB Cluster 元数据中删除有关实例的旧server_uuid的信息,然后必须执行Cluster.rescan()以使用新的server_uuid将实例添加到元数据中:
cluster.removeInstance("clusteradmin@IP:3306", {force: true})
cluster.rescan()
当仲裁失去作用时恢复集群
如果一个(或多个)实例发生故障,则集群可能会失去其法定人数,即在新主实例中投票的能力。当足够多的实例发生故障以致组成集群的大多数实例不再对组复制操作进行投票时,就会发生这种情况。当集群失去仲裁时,您无法再处理集群的写入事务,也无法更改集群的拓扑,例如通过添加、重新加入或删除实例。但是,如果您有一个包含 InnoDB 集群元数据的在线实例,则可以通过仲裁恢复集群。这假设您可以连接到包含 InnoDB 集群元数据的实例,并且该实例可以联系您要用于恢复集群的其他实例。
cluster.forceQuorumUsingPartitionOf("icadmin@ic-1:3306")
该操作根据实例上的元数据恢复集群,然后从给定实例定义的角度来看所有处于ONLINE的实例都将添加到恢复的集群中。
如果实例未自动添加到集群,例如其设置未保留,请使用Cluste .rejoinInstance()手动将实例添加回集群。
从严重中断中重新启动集群
完全中断意味着所有成员实例上的组复制已停止。
如果您的集群遇到完全中断,您可以使用以下命令重新配置它:
dba.rebootClusterFromCompleteOutage()
此操作使能够连接到集群的MySQL实例之一并使用其元数据来恢复集群。