歡迎您光臨本站 註冊首頁

通過QDisk增強Red Hat Cluster Suite的仲裁機制(Quorum)--轉載

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

通過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

[火星人 ] 通過QDisk增強Red Hat Cluster Suite的仲裁機制(Quorum)--轉載已經有1543次圍觀

http://coctec.com/docs/service/show-post-5486.html