如何在降級模式下執行 CentOS (Red Hat) 集群?
我在 CentOS 6.5 上安裝了 Red Hat 的集群軟體,並使用它來提供從一個網路到另一個網路的冗餘路由。這很好用,我有一對提供服務的盒子,所以如果一個失敗(例如,如果我通過刪除它的網路連接進行測試),另一個會接管路由。
但是,如果我必須對剩餘的盒子做任何事情,由於 rgmanager 的問題,我無法重新啟動它:
service rgmanager stop
掛起,並且停止該過程的唯一方法就是
kill -9
它。這顯然也會影響任何試圖停止服務的操作,例如 areboot
或poweroff
.當我設法自行啟動伺服器時,雖然集群啟動了,但 rgmanager 沒有顯示為正在執行,
clustat
甚至沒有任何冗餘路由服務可見,更不用說啟動了。例如,如果這些盒子被部署到遠端位置,並且需要在我們有機會更換故障盒子之前關閉電源,這可能會導致問題。
這是我的 cluster.conf:
<?xml version="1.0"?> <cluster config_version="2" name="router-ha"> <fence_daemon/> <clusternodes> <clusternode name="router-01" nodeid="1"/> <clusternode name="router-02" nodeid="2"/> </clusternodes> <cman expected_votes="1" two_node="1"/> <fencedevices/> <rm> <failoverdomains/> <resources> <ip address="10.0.0.1" monitor_link="1" sleeptime="0"/> <ip address="10.0.0.2" monitor_link="1" sleeptime="0"/> <ip address="10.2.0.1" monitor_link="1" sleeptime="0"/> <ip address="10.4.0.1" monitor_link="1" sleeptime="0"/> </resources> <service autostart="1" name="routing-a" recovery="restart"> <ip ref="10.0.0.1"/> <ip ref="10.2.0.1"/> </service> <service autostart="1" name="routing-b" recovery="restart"> <ip ref="10.0.0.2"/> <ip ref="10.4.0.1"/> </service> </rm> </cluster>
如果看不到另一個,為什麼我不能在一個盒子上啟動服務?當然,作為冗餘對的必要部分,您不依賴另一台機器來啟動集群服務?
要執行集群服務,需要一個仲裁。通常在一個三節點集群中,每個成員每個都有一票:如果你拔掉一個插頭,它就會知道它是不合格的,因為它只有不到一半的可用投票(該值實際上是可配置的)。沒有仲裁的集群不適合在其上執行集群服務。
這個原則不僅適用於 Red Hat 集群,而且是一個通用原則。但是,解決方案和實現可能會有所不同。還有雙節點集群的實現,因為如果你給兩個節點各投一票,通常不會有一個節點是quorate的。
當然,作為冗餘對的必要部分,您不依賴另一台機器來啟動集群服務?
對於 Red Hat,在一個雙節點集群中,有一個特殊條件適用:
<cman expected_votes="1" two_node="1"/>
當你拔掉插頭時會發生什麼,兩個節點將失去彼此的聯繫。
為了確定其中哪一個具有法定人數,他們都將嘗試互相STONITH 。
STONITH 是 Shoot-The-Other-Node-In-The-Head 的首字母縮寫詞,它可以保護您的數據不被惡意節點或併發訪問破壞。僅僅因為一個節點沒有響應,這並不意味著它沒有訪問您的數據。100% 確保您的數據安全的唯一方法是使用 STONITH 隔離節點,以便我們可以確定該節點確實處於離線狀態,然後才允許從另一個節點訪問數據。
因此,您所做的假設是正確的,您的集群配置錯誤並且需要隔離代理才能執行,因為通過拔掉插頭,您不僅會使您的服務不可用,這通常會導致
rgmanager
故障轉移到其他節點(或如何無論您是否已將其配置為執行此操作),您還可以刪除集群節點之間的心跳連結。儘管rgmanager
可能會嘗試執行您配置的操作,cman
但仍然無法確定這些節點中的哪一個具有仲裁。相反,它會始終嘗試隔離另一個節點,但是由於您沒有配置隔離代理,它將無限期地卡住。所以這裡有兩個很好的建議給你:
- 通過在隔離的網路上向集群節點添加額外的介面,將集群流量與網路流量分開,這樣當您在面向應用程序的介面上拔下插頭時,集群將執行乾淨的故障轉移
- 配置圍欄。