1. 程式人生 > >通過QDisk增強Red Hat Cluster Suite的仲裁機制(Quorum)

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

假設你配置好你的WEB服務環境,Red HatClustering能夠通過多臺機器提供可擴充套件的效能以及一個節點失敗,叢集會自動切換服務到另一節點。但有時候事情並不是想像的那樣,甚至更壞。比如,一個四節點的叢集環境,一旦兩個節點故障,整個叢集就會掛起,停止服務。這並不是我們希望的情況。
本文就是解釋如何使用QDisk工具來發揮共享儲存優勢,達到你的應用執行連續性要求。
                  
什麼是Quorum, quorate, QDisk?
  叢集(clustering)是一個“聚集”問題,它基於成員能力,它還具有民主特徵並通過投票來決定下一步的行為。例如重啟一臺掛起的機器等。對於一個完全的民主的環境,超過半數的選票是必須的。所以Quorum就是叢集存在的最少個數。這樣對於一個3節點的叢集, 最少需要2個節點啟用才有效。一個6節點叢集最少需要4個節點啟用, 以此類推,公式一般就是叢集至少有(n/2+1)個節點數就會建立Quorate狀態,也就存在Quorum(仲裁),叢集才能工作。                  

                                           

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 下面工作原理有些不同,下面圖示它的工作原理。
                  

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的分割槽。
[[email protected] ~]# 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
[[email protected] ~]# 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"來檢視。
   [[email protected] ~]# 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 [N/y] ? y
   Initializing status block for node 1...
   Initializing status block for node 2...
   : : :
   Initializing status block for node 16...
   [[email protected] ~]# 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的使用。

                  

quorum分割槽指定投票數為3,該值是一個少於叢集節點數的值。這意味著只需一個節點加上quorum分割槽就捅有quorum,叢集就會正常工作。另外卷標要輸入,不是裝置名,裝置名有可能會在重啟後發生變化,但卷標方式不會發生改變。做為例子,沒有加入“試探” 選項。其預設值為1。注意,QDisk每3秒執行一次評估,TKO值為23,代表允許23次失敗共計69秒。這意味著如果一個節點不能連線到qdisk區,它會被標為失敗的quorum磁碟,會被叢集隔離。這樣會留出足夠的時間允許RAC在一個節點失敗後作出反應,本例RAC超時設為60秒。
                     RAC使用“自隔離”, Red Hat Cluster隨後再隔離並重啟失敗的節點。

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檔案
   [[email protected] cluster]# cp cluster.conf cluster.conf.new
   [[email protected] cluster]# vi cluster.conf.new
   [[email protected] cluster]# ccs_tool update cluster.conf.new
                     
兩個節點叢集情況

p10_5.gif

兩個節點的叢集也是常見的,但是quorum在這裡做為一個特例,因為(n/2+1),當兩個節點時,其值為2,如果按常規就無法正常工作。所以一般情況,叢集中一個節點失敗,另一個節點就會接管。但是,有一種臨界情況,如果兩節點間網路出現故障,兩節點會互相
認為對方失敗,這種情況就是通常所說的“裂腦”,每個節點都會去fence另一節點,這樣會形成兩節點不斷互相重啟現象。通過Qdisk就可以避免這種情況的發生。“試探”選項可以用來評估網路連線是否正常。典型的配置就是ping一個路由或閘道器。如下例:

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提供了一種在小規模叢集下更有效的保護叢集完整性的方法。


閱讀(86) | 評論(0) | 轉發(0) | 給主人留下些什麼吧!~~ 評論熱議

相關推薦

通過QDisk增強Red Hat Cluster Suite仲裁機制Quorum

假設你配置好你的WEB服務環境,Red HatClustering能夠通過多臺機器提供可擴充套件的效能以及一個節點失敗,叢集會自動切換服務到另一節點。但有時候事情並不是想像的那樣,甚至更壞。比如,一個四節點的叢集環境,一旦兩個節點故障,整個叢集就會掛起,停止服務。這並不

red hat 6&red hat 7 Apache網站搭建虛擬主機

red hat 6&red 虛擬Web 主機指的是在同一臺服務器中運行多個Web 站點,其中的每一個站點實際上並不獨立占用整個服務器,因此被稱為‘虛擬”Web 主機。通過虛擬Web 主機服務可以充分利用服務器的硬件資源,從而大大降低網站構建及運行成本。使用httpd 可以非常方便地構建虛擬主機服務

centos7搭建ELK Cluster日誌分析平臺

場景 git centos7 beat images 下載地址 install posit src 應用場景:ELK實際上是三個工具的集合,ElasticSearch + Logstash + Kibana,這三個工具組合形成了一套實用、易用的監控架構,      很多公司

【MySQL】通過Binary Log簡單實現數據回滾

pre mage 用途 top IT cal 時間 excel var 一、前言 對,沒錯,我又水了好一陣子,深刻反思寄幾。前段時間,工作項目上出於對excel等批量操作可能出現誤操作的問題,要求提供一個能夠根據操作批次進行數據回滾的能力。在開發的過程中接觸到了MySQL的

redis cluster 集群暢談

比較 互連 下標 view bus 單機 strip 瓶頸 由於 redis單機在大數據量情況的會出現瓶頸問題,通過redis 主從架構和 哨兵集群結合可以實現99.99% 高可用 、水平擴容支持更高QPS的解決方案。 在大數據量面前,主從架構結合哨兵集群的解決方案在

redis cluster 集群暢談 之 水平擴容、slave自動化遷移

fig star init.d 物理 成功 其它 -i .html enabled    上一篇 http://www.cnblogs.com/qinyujie/p/9029522.html, 主要講解 實驗多master寫入、讀寫分離、實驗自動故障切換(高可用性

通過自定義指令在Angular2中使用Echarts 實用

原文出處:https://blog.csdn.net/idomyway/article/details/79658099 前言     echarts是第三方js庫,不是ts編寫,沒有型別定義,我們可以引入型別定義的庫@types,查詢是否有echarts,很高興其他人已

通過日期選擇器輸入時間並判斷年齡週歲

今天的我特別的高產,已經寫了三篇文章了,主要就是乘著空閒把最近遇到的問題都記錄下來 老規矩,先上圖 如果年齡小於0,則提示錯誤 xml檔案就不貼了,很簡單 實現這個功能主要用兩個方法,一個是寫一個計算週歲的方法,一開始把週歲想簡單了,居然直接減年份去了,太愚鈍了,,,

Redis Cluster介紹與搭建

原文地址:https:// https://blog.csdn.net/men_wen/article/details/72853078Redis Cluster 介紹與搭建1. Redis Cluster介紹Redis Cluster是Redis的分散式解決方案,在Redi

通過網路抓包學習物聯網流行協議MQTT

MQTT (Message Queue Telemetry Transport),翻譯成中文遙測傳輸協議,其主要提供訂閱/釋出模式,更為簡約、輕量,易於使用,針對受限環境(頻寬低、網路延遲高、網路通訊不穩定),屬於物聯網(Internet of Thing)的一個傳輸協議。設

[C#]增強響應性,用載入窗體Splash來載入主窗體

許多軟體在啟動的時候都會顯示一個載入視窗(Splash),譬如微軟的Visual Studio、Office以及Adobe的許多軟體。這些載入視窗很精美,但“漂亮”並不是它們的主要作用。 設想一下使用者雙擊了一個圖示,等了許久都沒有看到主窗體,就會感到迷惑:是不是剛才沒有點中?於是又雙擊了一次,這

spring mvc通過@ResponseBody返回時,ajax接收顯示問號

@requestMapping中新增 produces = "text/html;charset=UTF-8" @RequestMapping(value = "/queryDetail",produces = "text/html;charset=UTF-8") pu

Apache 伺服器執行一段時間後本地無法通過外網訪問的情況問題解決描述

轉自:http://www.52codes.net/article/338.html 最近從虛擬主機轉到了VPS之後自由了許多,但是也多了不少問題。在弄好了MySQL之後Apache又出了問題,具體表現是網站每過一定時間就無法開啟,靜態頁面也無法訪問。重啟Apache後

iOS UI——通過圖層layer設定 圖片的形變屬性transform

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { //通過uiview設定(2D效果) // self.iconView.transform=CGAffineTransform

通過選單控制元件開啟一個本地的圖片java

package product;import java.awt.BorderLayout;import java.awt.Image;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;

[kaggle系列 四] 通過mnist來研究神經網路的一些細節1

題目 前言 前面玩泰坦尼克號花費了一些時間,想要把分數刷的高一些,但是沒有成功,感覺再搞下去意義不大,畢竟只是拿來熟悉kaggle和一些機器學習演算法的,目的已經達到了,沒必要糾纏下去。所以就開新坑啦~ 其實我重點是想要搞神經網路深度學習的,mni

【Python】通過截圖匹配原圖中的位置opencv

安裝依賴 1)下載安裝opencv-2.4.9,並將cv2.pyd拷貝到python安裝目錄的site-package下 2)pip install numpy 3)pip install air

通過原始碼,手把手帶你學屬性動畫

主要內容:上篇側重介紹了ofFloat()方法,以及與動畫相關的方法、監聽,本節將繼續介紹剩下的 ofObject() 和 ofPropertyValuesHolder() 方法,以及相關的 TypeEvaluator 和 PropertyValue

ROS通過話題釋出訂閱Image型別的視訊幀python

前言:    前段時間,學習了YOLO在Python下的實現,而且經過在原始碼基礎上新增部分簡單函式,已經可以實現利用YOLO在Python下實現(1)檢測圖片中的物體,(2)檢測本地視訊,(3)呼叫攝像頭實時檢測。後來又需要利用Kinect實時檢測,所以要用的ROS進行各指

通過原始碼,手把手帶你學屬性動畫

在 Android 3.0(API level 11) 之後,Google 為 Android添加了屬性動畫(Property Animation),該動畫系統是一個強大的框架,允許開發者對幾乎任何物件進行動畫。 由此可知,屬性動畫致力於為開發者提供更