Mysql

MariaDB Galera-Cluster只有一個活動節點時如何防止連接?

  • October 31, 2021

我在 3 節點 Galera 集群上的 galera.cnf 文件中使用“rsync”作為 wsrep_sst_method。如果是這樣,則係統在至少有 2 個活動節點時服務。因此,當任何兩個節點都消失時,活動節點沒有服務。這已經足夠好了,但是當我升級系統並分配 wsre_sst_method = mariabackup 時,如果有任何活動節點,它就會提供服務。因此,當兩個節點中的任何一個節點消失時,都不會阻止最後一個活動節點的工作。當只有一個活動節點時,我不希望系統工作。我希望系統在不更改 wsrep_sst_method 的情況下像升級之前一樣工作。

所以問題很簡單。當只有一個活動節點時,如何防止系統服務?

只需檢查名為“ wsrep_cluster_size ”的狀態變數,只要集群中有主組件(您也可以檢查“ wsrep_cluster_status ”),所有其他關閉節點將在它們處於活動狀態時趕上。

如果wsrep_cluster_size達到特定值,您可以使用 cron 作業在間隔時間內檢查。如果發生這種情況,您也可以停止您的應用程序。

更改 wsrep_sst_method 不會改變這種行為——這完全取決於剩餘節點是否認為它是主分區。分區是可以相互通信的集群成員的段。

集群知道它目前應該有多少成員,以及是否有任何成員離開或加入,它會更新其內部成員映射。一個集群既可以被認為是主集群的成員,也可以被認為是非主集群的成員,這由該分區的所有成員之間的仲裁投票決定。

本文件 ( https://galeracluster.com/2015/08/the-primary-component-in-galera-cluster/ ) 正確解釋了它,但簡短的版本是,如果一個節點是最大集群的一部分,當一個發生分裂時,該集群將被視為主集群,而較小的集群將是非主集群。

如果一個節點認為它是非主集群的一部分,它將停止接受對非系統數據的讀取或寫入以避免腦裂問題。

另見:https ://severalnines.com/database-blog/galera-cluster-recovery-101-deep-dive-network-partitioning

引用自:https://dba.stackexchange.com/questions/301046