朝花夕拾16章MySQL Shell 8.9.1 InnoDB ClusterSet 中的 Fencing 集群

发生 紧急故障转移后,ClusterSet 各部分之间的事务集存在不同的风险,您必须隔离集群以防止写入流量或所有流量。

如果发生网络分区,则可能会出现脑裂情况,即实例失去同步并且无法正确通信以定义同步状态。脑裂可能发生在以下情况:DBA 决定强制选举一个副本集群作为主集群,创建多个主集群,从而导致脑裂情况。

在这种情况下,DBA 可以选择隔离原始主集群:

  • 写道。
  • 所有流量。

可以使用三种围栏操作:

  • .fenceWrites():停止向 ClusterSet 的主集群写入流量。副本集群不接受写入,因此此操作对它们没有影响。

    从 8.0.31 开始,可以在无效的副本集群上使用。此外,如果在禁用的副本集群上运行 super_read_only,它将启用它。

  • .unfenceWrites():恢复写入流量。此操作可以在之前使用该操作隔离写入流量的集群上运行 .fenceWrites()

    无法 *cluster*.unfenceWrites() 在副本集群上使用。

  • .fenceAllTraffic():隔离集群,使其免受所有流量的影响。如果您使用 隔离了集群的所有流量 .fenceAllTraffic(),则必须使用 dba.rebootClusterFromCompleteOutage() MySQL Shell 命令重新启动集群。

    有关 的更多信息 dba.rebootClusterFromCompleteOutage(),请参阅第 7.8.3 节 “从严重中断中重新启动集群”。

栅栏写入()

在副本集群上发出.fenceWrites()会返回错误:

解释ERROR: Unable to fence Cluster from write traffic: operation not permitted on REPLICA Clusters Cluster.fenceWrites: The Cluster '' is a REPLICA Cluster of the ClusterSet '' (MYSQLSH 51616)