2013-11-27 24 views
0

我想與Pacemaker/Corosync一起集羣2臺計算機。他們共享的唯一資源是ocf:心跳:IPaddr這是主要問題:節點認爲它在網絡電纜拔出時處於聯機狀態。起搏器/ Corosync

由於只有兩個節點故障轉移將只會發生,如果no-quorum-policy=ignore

當網絡電纜從節點A拉出時,節點A上的corosync綁定到127.0.0.1,起搏器認爲節點A仍然在線,節點B是離線的。

Pacemaker嘗試啓動節點A上的IPaddr,但由於沒有網絡連接而無法啓動。另一方面,節點B認識到節點B處於脫機狀態,並且如果IPaddr服務在節點A上啓動,則它將成功地在其自身(節點B)上啓動它。

但是,由於服務在節點A上啓動失敗,它將進入致命狀態,必須重新啓動以重新加入羣集。 (您可以改爲重新啓動一些所需的服務。)

1解決方法是設置start-failure-is-fatal="false",使節點A繼續嘗試啓動IPaddr服務,直到成功爲止。問題在於一旦成功,兩個節點之間就會發生IP衝突,直到它們重新集羣並且其中一個放棄了資源。

我正在玩弄有一個節點屬性的想法,該節點屬性鏡像cat /sys/class/net/eth0/carrier,當電纜連接時爲1,斷開連接時爲零,然後有一個位置規則說明「連接」==「零不」開始服務類的東西,但我們會看到。

任何想法或想法將不勝感激。

回答

1

在與freenote.net/#linux-cluster irc網絡上的Andrew Beekhof(作者Pacemaker)和Digimer交談之後,我瞭解到造成這個問題的實際原因是對羣集進行不正確的圍堵。

啓用隔離或啓用stonith對於擁有成功的高可用性羣集是絕對必要的。下面的頁面是一個必須的主題閱讀:

Cluster Tutorial: Concept - Fencing

非常感謝Digimer提供這種寶貴的資源。關於聚類的部分回答了這個問題,但整篇文章是有益的。

基本上擊劍和S.T.O.N.I.T.H. (拍攝頭部中的其他節點)是羣集使用的機制,以確保向下節點實際上已經死亡。它需要這樣做以避免共享內存損壞,分裂大腦狀態(多個節點接管共享資源),並且大多數情況下確保您的集羣不會陷入恢復或崩潰。

如果您未在羣集環境中配置並啓用stonith/fencing,那麼您確實需要它。

其他需要注意的問題是Stonith Deathmatch和Fencing Loops。

總之,導致分裂大腦的網絡連接丟失問題可以通過創建我們自己的Stonith設備並在/usr/share/doc/cluster-glue/stonith/README.external教程之後編寫stonith代理來解決,並且然後編寫一個啓動腳本,檢查節點是否能夠支持加入羣集,然後啓動corosync或等待5分鐘並再次檢查。

0

根據您的配置,兩個節點之間的心跳將使用「127.0.0.1」,我認爲這是完全錯誤的。 通常,corosync需要綁定到專用IP,並且資源IPaddr服務應使用不同的ip,其中指定了流量IP。

例如:

節點A:192.168.1.00(對於心跳); 10.0.0.1(流量ip)

節點B:192.168.1.101(用於心跳線); 10.0.0.2(流量ip)

如果我的理解是正確的,ipaddr服務將啓動一個基於流量ip的虛擬ip,我們假設它是10.0.0.3。

+0

此問題的實際原因是不適當的擊劍。詳細信息如下。此外,即使您確實已將corosync配置爲正確連接到您連接的NIC的IP,如果nic上沒有活動連接,corosync也會綁定到本地主機IP地址。 – andrewmkeller

相關問題