Mysql

Keepalived vIP 作為 Galera wsrep_cluster_address

  • August 22, 2020

我有一個 MariaDB Galera 集群。如果某些節點發生故障,我不能盲目地重新啟動它們,我必須先確定一個好的wsrep_cluster_address

如果我可以在其中一個健康節點上保留一個 keepalived 虛擬 IP,我可以像wsrep_cluster_address在其他節點上一樣使用這個 IP 嗎?所以在節點故障的情況下,加入節點總是有權利wsrep_cluster_address?或者有沒有其他解決方案可以自動重新加入?

我覺得只要至少有 1 個健康節點(或Primary Component?)啟動,就應該以某種方式保持集群啟動並自動重新加入節點。

(注意:我知道Galera 集群中的答案,而不必在 wsrep_cluster_address 上指定所有主機,但不幸的是,多播不是一個選項。)

您可以將多個地址放入wsrep_cluster_address,例如gcomm://10.1.1.1,10.1.1.2,10.1.1.3,Galera Cluster 會智能地檢測到它。

我已經使用 Percona XtraDB Cluster(它也基於 Galera Cluster)在生產環境中執行多個(> 10)集群:

  • 一台執行著 2 台 DB 伺服器和 1 台 garbd 伺服器,我們將所有三台伺服器都放入wsrep_cluster_address.
  • 另一個是 7 台數據庫伺服器,我們只是將前三台伺服器(位於不同機架中)放入wsrep_cluster_address.

這些集群在四年內出現了電源故障(所有三台伺服器)、硬體故障、軟體錯誤,並且執行良好。

我試過了,是的,它似乎有效。

測試設置:

3個節點。

每個節點的eth0.

這些節點的主機名是:、、、,mari0並且這些名稱是可解析的。(可能不需要,但是…)mari1``mari2

wsrep_cluster_address='gcomm://1.2.3.4'在所有 3 個節點上。(注意:第一個節點必須以 啟動wsrep_cluster_address='gcomm://',集群啟動後,wsrep_cluster_address 應該更改為 vIP。)

節點上的 keepalived vIP。

! Configuration File for keepalived
vrrp_script chk_mysqld {
   script "pidof mysqld"
   interval 2
}
vrrp_instance VI_1 {
   state [MASTER|BACKUP]
   interface eth0
   virtual_router_id 52
   priority [PRIO]
   advert_int 1
   authentication {
       auth_type AH
       auth_pass [password]
   }
   virtual_ipaddress {
       1.2.3.4
   }
   track_script {
       chk_mysqld
   }
}

(不是最好的,但有效)

第一個結果:

第一個節點啟動後,將vIP放在上面。之後我啟動了剩下的 2 個節點。

節點加入集群並keepalived進入BACKUP狀態。

service mysql stop從集群中刪除節點,service mysql start將節點添加到其中。

我還沒有測試過以這種方式向集群添加第 4 和第 5 個節點,但它也應該可以工作。

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