通過QDisk增強Red Hat Cluster Suite的仲裁機制(Quorum)--轉載
最近在安裝配置虛擬機,看到redhat中文官網上的一篇文章寫的挺好,和大家分享一下,也幫住同行們減少網上搜索的時間。原文請參考:http://www.redhatmagazine.com/2007/12/19/enhancing-cluster-quorum-with-qdiskQDisk支持少數量集群環境,Red Hat Enterprise Linux 4.4 以上及5.0以上才支持QDisk。
問題提出:多個節點失敗使整個集群不正常假設你配置好你的WEB服務環境,Red HatClustering能夠通過多台機器提供可擴展的性能以及一個節點失敗,集群會自動切換服務到另一節點。但有時候事情並不是想像的那樣,甚至更壞。比如,一個四節點的集群環境,一旦兩個節點故障,整個集群就會掛起,停止服務。這並不是我們希望的情況。
本文就是解釋如何使用QDisk工具來發揮共享存儲優勢,達到你的應用運行連續性要求。
什麼是Quorum, quorate, QDisk?
集群(clustering)是一個「聚集」問題,它基於成員能力,它還具有民主特徵並通過投票來決定下一步的行為。例如重啟一台掛起的機器等。對於一個完全的民主的環境,超過半數的選票是必須的。所以Quorum就是集群存在的最少個數。這樣對於一個3節點的集群, 最少需要2個節點激活才有效。一個6節點集群最少需要4個節點激活, 以此類推,公式一般就是集群至少有(n/2+1)個節點數就會建立Quorate狀態,也就存在Quorum(仲裁),集群才能工作。 http://www.redhat-club.com/product/images/p10_1.gif RedHat Cluster Suite 在Enterprise Linux2.1使用共享磁碟分區來協調集群狀態,IP網路作為備份。在Enterprise Linux3切換IP網路作為主要協調集群狀態而共享磁碟分區作為備份。在Enterprise Linux 4和5,Cluster Suite結合了GFS(全局文件系統)使用IP網路作為協調機制,不再需要Quorum分區。這樣集群也可以在沒有SAN共享盤陣下運行,再加上基於IP網路的仲裁具有更好的更擴展性,尤其在大規模集群節點環境中(大於16個節點)但是當集群節點沒有那麼多的時候,比如9個節點的集群,雖說失去足夠多的節點來破壞Quorum的機會很少,但是只要4個以上的節點失敗,整個集的Quorum就沒有了,集群也就不能正常工作。但對於3-4個節點的案例,只要2台機器故障,整個集群就會有問題,這種案例又很多。當然你可以通過增加冗餘的機器來增加Quorum計數,但這樣太不現 實,尤其是如果你本身就配置了SAN存儲情況下。所以一種替代的方法,我們可通過已有的SAN共享存儲的一 小塊分區來支持Quorum。
Quorum Disk (QDisk) (仲裁機制)
為了解決小規模集群存在的Quorum問題,Red Hat Cluster Suite參照 RHEL3下面的cluster的Quorum機制,引入了Qdisk,但和RHEL 3 下面工作原理有些不同,下面圖示它的工作原理。 http://www.redhat-club.com/product/images/p10_2.gif QDisk使用一個小於10MB的共享磁碟分區,Qdiskd進程運行在集群的所有節點上,定期評估自身的健康情況,然後把它的狀態信息放入到指定的共享磁碟分區。每qdiskd接著查看其他節點的狀態,並傳遞信息給其他節點QDisk分區。在正常情況下,集群的Quorum就是每個節點計數再加上QDisk分區的計數和。如上面例子,總共quorum計數是7,每個節點計數為1,QDisk為3。這樣,在一個節點A上,QDisk經過幾次償試都不能訪問它的共享磁碟分區,那麼運行在另一節點B上的qdiskd進程會請求節點A被隔離,這樣會重啟節點A並重新加入集群中。
Heuristics(試探)選項來增加可靠性
作為一個選項,一個或更多的試探方法可以增加到qdisk的配置中,試探就是測試能否訪問qdisk分區,一個典型的測試方法包括能夠訪問到路由/網關。如果試探失敗,QDisk默認會重啟節點使其進入正常工作狀態。minimum_score指出試探成功計數。
在集群資料庫(如Oracle RAC)中使用DLM 和QDisk
我們進一步來學習如何設置QDisk,分散式鎖管理(DLM)已經被認證支持OracleRAC10gR2,通過DLM消除了額外鎖管理器的需求,減少成本投入。QDisk確保任一節點失敗RAC仍然可以持續運行。使用DLM替換GULM操作非常簡單(可以參考Oracle Real Application Clusters GFS:Oracle RAC GFS )。
現在,參照上面的圖示我們建一個四節點的集群,這意味著總共quorum為7,每個節點為1,quorum分區為3。該分區必須為裸設備分區(raw devices),不會被clvm所管理。
初始化QDisk
設置一個Quorum磁碟分區也非常簡單,首先,建立一個共享的quorum分區,第二,設置集群配置。本例使用11MB分區/dev/sdi1,可以通過cat /proc/partitions 或用parted查看。建議10MB的分區。
# cat /proc/partitions
major minor #blocks name
8 0 71687325 sda
8 1 104391 sda1
8 2 71577607 sda2
: :
8 128 55587840 sdi
8 129 11248 sdi1
8 130 55576576 sdi2
8 144 53483520 sdj
8 145 53483504 sdj1
# parted /dev/sdi
GNU Parted 1.8.1
Using /dev/sdi
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: EQLOGIC 100E-00 (scsi)
Disk /dev/sdi: 56.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 16.4kB 11.5MB 11.5MB primary
2 11.5MB 56.9GB 56.9GB primary
接下來mkqdisk命令可以用可準備quorum分區,它將會初始化16個區-集群允許QDisk使用的最大尺寸。簡單的指定設備及唯一卷標名就可以了。卷標會被cluster.conf使用。運行的結果可以通過"mkqdisk -L"來查看。
# mkqdisk -c /dev/sdi1 -l rac_qdisk
mkqdisk v0.5.1
Writing new quorum disk label 'rac_qdisk' to /dev/sdi1.
WARNING: About to destroy all data on /dev/sdi1; proceed ? y
Initializing status block for node 1...
Initializing status block for node 2...
: : :
Initializing status block for node 16...
# mkqdisk -L
mkqdisk v0.5.1
/dev/sdi1:
Magic: eb7a62c2
Label: rac_qdisk
Created: Thu Dec 6 14:40:07 2007
Host: et-virt08.lab.boston.redhat.com
集群配置
你可以通過Conga來配置QDisk的使用。 http://www.redhat-club.com/product/images/p10_3.gif quorum分區指定投票數為3,該值是一個少於集群節點數的值。這意味著只需一個節點加上quorum分區就捅有quorum,集群就會正常工作。另外卷標要輸入,不是設備名,設備名有可能會在重啟后發生變化,但卷標方式不會發生改變。做為例子,沒有加入「試探」 選項。其預設值為1。注意,QDisk每3秒執行一次評估,TKO值為23,代表允許23次失敗共計69秒。這意味著如果一個節點不能連接到qdisk區,它會被標為失敗的quorum磁碟,會被集群隔離。這樣會留出足夠的時間允許RAC在一個節點失敗後作出反應,本例RAC超時設為60秒。
RAC使用「自隔離」, Red Hat Cluster隨後再隔離並重啟失敗的節點。 http://www.redhat-club.com/product/images/p10_4.gif 同樣地,cman下的deadnode_timeout設為135秒,1.5倍於qdisk的超時時間,135秒后,cman將發出fence(隔離)指令並重啟故障節點。對於非RAC的情況,其值一般不用修改。你可以直接在/etc/cluster/cluster.conf配置文件中修改。通過ccs_tool更新所有節點。
如果要縮短其時間,其他參數也會縮短。
另外要注意的是expected_nodes="7",這包括qdisk分區的3在內。
<?xml version="1.0"?>
<cluster alias="Oracle-RAC1" config_version="35" name="Oracle-RAC1">
<quorumd interval="3" tko="23" label="rac_qdisk" votes="3"/>
<cman deadnode_timeout="135" expected_nodes="7"/>
<clusternodes>
<clusternode name="et-virt08.lab.boston.redhat.com" nodeid="1" votes="1">
<multicast addr="225.0.0.12" interface="eth1"/>
<fence>
<method name="1">
<device name="wti_fence" port="12"/>
</method>
</fence>
</clusternode>
</clusternodes>
<fencedevices>
<fencedevice agent="fence_wti" ipaddr="192.168.77.128" name="wti_fence" passwd="password"/>
</fencedevices>
<rm log_facility="local4" log_level="6"/>
<fence_daemon clean_start="0" post_fail_delay="0" post_join_delay="3"/>
</cluster>
編輯、修改cluster.conf文件
# cp cluster.conf cluster.conf.new
# vi cluster.conf.new
# ccs_tool update cluster.conf.new
兩個節點集群情況 http://www.redhat-club.com/product/images/p10_5.gif 兩個節點的集群也是常見的,但是quorum在這裡做為一個特例,因為(n/2+1),當兩個節點時,其值為2,如果按常規就無法正常工作。所以一般情況,集群中一個節點失敗,另一個節點就會接管。但是,有一種臨界情況,如果兩節點間網路出現故障,兩節點會互相
認為對方失敗,這種情況就是通常所說的「裂腦」,每個節點都會去fence另一節點,這樣會形成兩節點不斷互相重啟現象。通過Qdisk就可以避免這種情況的發生。「試探」選項可以用來評估網路連接是否正常。典型的配置就是ping一個路由或網關。如下例: http://www.redhat-club.com/product/images/p10_6.gif 注意:如果不帶QDisk的兩節點cluster,在cluster.conf中需要two_node="1"和expected_votes="1"。
<cman expected_votes="1" two_node="1"/>
帶QDisk, expected_count應該為「3」,two_node 為「0」(或者去掉two_node欄位)
<cman expected_votes="3" />
結束語
集群是一種高可用性、可擴展性技術,Qdisk提供了一種在小規模集群下更有效的保護集群完整性的方法。
[ 本帖最後由 wind1211 於 2008-8-4 14:41 編輯 ]
《解決方案》
GOOD好文!對Qdisk的原理和作用,我認為解釋得比較清楚了。
《解決方案》
看到了你的 FENCE 設備,真的有這個設備嗎?? 我設定時候由於沒有 FENCE,導致 CMAN 老起不來或者關不掉,
你的 <device name="wti_fence" port="12"/>
</method>
</fence>
什麼東西啊??
《解決方案》
fence_wti is an I/O Fencing agent which can be used with the WTI Network Power Switch (NPS). It logs into an NPS via telnet and boots a specified plug. Lengthy telnet connections to the NPS should be avoided while a GFS cluster is running because the connection will block any necessary fencing actions.
fence_wti accepts options on the command line as well as from stdin. fenced sends the options through stdin when it execs the agent. fence_wti can be run by itself with command line options which is useful for testing.
在這上面可以看到詳細信息:
http://linux.die.net/man/8/fence_wti
我用的fence設備是 hp的ilo,如果沒有fence 也是可以配置雙機,但不能算一個完整的雙機,你的cman起不來,可能是你的cluster.conf和/etc/hosts沒有配置好,在沒有你的日誌及cluster.conf 我只是做的猜測
《解決方案》
好貼,收藏先。。。。
《解決方案》
太棒了,樓主真是牛人!
《解決方案》
RHCS怎麼配置基於network的tiebreaker,不用QDisk?
《解決方案》
不錯,很清楚。:lol:
《解決方案》
很好的文章,支持LZ一把。
《解決方案》
主,在嗎?
有空幫我看看這個問題,看看是不是就是所謂的「腦裂」,因為我的只是簡單的雙機熱備,並不是rac,所以不是很肯定,煩請你幫忙看看。謝謝
這個問題困擾了我很久!
http://linux.chinaunix.net/bbs/thread-1169191-1-1.html