如果有一個或多個執行個體失敗,則叢集可能會遺失其仲裁,也就是在新的主要節點中投票的能力。當發生足夠的執行個體失敗時,叢集中不再有多數執行個體可對群組複寫作業進行投票,就會發生這種情況。請參閱容錯能力。當叢集遺失仲裁時,您將無法再使用叢集處理寫入交易,或變更叢集的拓撲,例如新增、重新加入或移除執行個體。不過,如果您有一個包含 InnoDB 叢集元資料的線上執行個體,則可以還原具有仲裁的叢集。這假設您可以連線到包含 InnoDB 叢集元資料的執行個體,並且該執行個體可以連絡您要用來還原叢集的其他執行個體。
此作業具有潛在危險性,因為如果使用不當,可能會造成腦裂情況,應視為最後手段。請務必確認網路中沒有仍在運作,但您無法從所在位置存取此群組的任何分割區。
連線到包含叢集元資料的執行個體,然後使用
作業,它會根據 Cluster
.forceQuorumUsingPartitionOf(instance
)instance
上的元資料還原叢集,然後從給定執行個體定義的角度來看,所有 ONLINE
的執行個體都會新增至還原的叢集。
mysql-js> cluster.forceQuorumUsingPartitionOf("icadmin@ic-1:3306")
Restoring replicaset 'default' from loss of quorum, by using the partition composed of [icadmin@ic-1:3306]
Please provide the password for 'icadmin@ic-1:3306': ******
Restoring the InnoDB cluster ...
The InnoDB cluster was successfully restored using the partition from the instance 'icadmin@ic-1:3306'.
WARNING: To avoid a split-brain scenario, ensure that all other members of the replicaset
are removed or joined back to the group that was restored.
如果執行個體未自動新增至叢集 (例如,如果其設定未持續保存),請使用
手動將執行個體重新新增至叢集。Cluster
.rejoinInstance()
還原的叢集可能並非,而且不一定要由組成叢集的所有原始執行個體組成。例如,如果原始叢集由以下五個執行個體組成
ic-1
ic-2
ic-3
ic-4
ic-5
而叢集發生腦裂情況,ic-1
、ic-2
和 ic-3
形成一個分割區,而 ic-4
和 ic-5
形成另一個分割區。如果您連線到 ic-1
並發出
來還原叢集,則產生的叢集將由這三個執行個體組成Cluster
.forceQuorumUsingPartitionOf('icadmin@ic-1:3306')
ic-1
ic-2
ic-3
因為 ic-1
將 ic-2
和 ic-3
視為 ONLINE
,而看不到 ic-4
和 ic-5
。