Keepalived vIP 作為 Galera wsrep_cluster_address
我有一個 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 個節點,但它也應該可以工作。