Corosync提供一種HA集羣的解決方案,它使用Pacemaker可擴展的高可用集羣資源管理器,配合heartbeat或OpenAIS監控節點之間健康狀態,通過服務資源的流轉,來保證集羣向外提供服務的高可用性。
DRBD是一種塊設備,可以被用於高可用(HA)之中,它類似於一個網絡RAID-1功能。將數據寫入本地文件系統時,數據還將會被髮送到網絡中另一臺主機上。以相同的形式記錄在一個文件系統中本地(主節點)與遠程主機(備節點)的數據可以保證實時同步,以提供數據的異地容災。在高可用(HA)中使用DRBD功能,以代替昂貴的共享存儲設備。
下面借用DRBD官網的一幅圖簡述其工作流程
本方案拓撲如下:
以下內容包括corosync、drbd的詳盡安裝及配置過程:
一、Corosync的安裝及配置
1.要保證兩臺節點服務器基於ssl加密且能無障礙的監聽heartbeat信號
- ssh-keygen -t rsa
- ssh-copy-id -i ~/.ssh/id_rsa.pub node2
- #node1節點上生成rsa密鑰對,並將公鑰複製到node2節點
- ssh-keygen -t rsa
- ssh-copy-id -i ~/.ssh/id_rsa.pub node1
- #node2節點上生成rsa密鑰對,並將公鑰複製到node1節點
2.安裝相關軟件包
- yum localinstall -y --nogpgcheck ./*
- #進入rpm目錄下,全部安裝
Ps:node2進行相同操作
3.配置corosync
- cd /etc/corosync
- cp corosync.conf.example corosync.conf
- #進入配置文件目錄,從配置文件藍本複製並修改內容
- vim corosync.conf
- bindnetaddr: 192.168.0.0
- #修改成集羣節點所在網段
- service {
- ver: 0
- name: pacemaker
- }
- aisexec {
- user: root
- group: root
- }
- #添加這些字段,保存退出
- corosync-keygen
- #使用軟件自帶腳本生成通信加密認證文件
- scp -p corosync.conf authkey node2:/etc/corosync/
- #將corosync和authkey複製至node2
- mkdir /var/log/cluster
- ssh node2 mkdir /var/log/cluster
- #分別爲兩個節點創建corosync生成的日誌所在的目錄
4.在node1節點嘗試啓動corosync服務,並分析日誌來獲知其啓動狀態
- service corosync start
- #啓動服務
- grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages
- #查看服務是否正常啓動
- grep TOTEM /var/log/messages
- #查看初始化成員節點通知是否正常發出
- grep pcmk_startup /var/log/messages
- #查看pacemaker是否正常啓動
node1正常啓動,啓動node2
- ssh node2 service corosync start
- #啓動node服務
- crm status
- #查看集羣節點啓動情況
5.配置集羣的工作屬性
- crm configure property stonith-enabled=false
- #關閉stonith設備檢測
- crm configure property no-quorum-policy=ignore
- #關閉法定投票人數策略
- crm configure rsc_defaults resource-stickiness=100
- #定義全局資源粘性值
對於上述配置的幾點說明:
1.由於沒有stonith設備,故關閉檢測;
2.由於是雙節點HA集羣,如果在啓動法定投票人策略quorum後,將導致其中一臺節點服務器宕機另一臺由於獲得不夠半數的法定人投票而導致整個集羣無法工作 ;
3.設置資源粘性值,目的在於防止定義的服務資源在兩臺性能相同的節點服務器上,因其中一臺服務器當機狀態恢復而回流,導致無謂的消耗集羣系統資源 。
- crm configure show
- #查看配置信息
6.添加服務資源
- crm configure primitive WebIP ocf:heartbeat:IPaddr params ip=192.168.0.73
- #添加VIP資源
- crm configure primitive WebServer lsb:httpd
- #添加web服務資源
- crm configure show
- #查看配置
- crm status
- #查看此時集羣狀態,資源已被均分在兩節點上
corosync的配置基本完成,下面是安裝、配置DRBD並將其定義爲corosync資源,實現高可用。
二、DRBD的安裝及配置
1.安裝相關軟件包
Ps:drbd共有兩部分組成:內核模塊和用戶空間的管理工具。其中drbd內核模塊代碼已經整合進Linux內核2.6.33以後的版本中,因此,如果您的內核版本高於此版本的話,你只需要安裝管理工具即可;否則,您需要同時安裝內核模塊和管理工具兩個軟件包,並且此兩者的版本號一定要保持對應。(由於作者的內核版本較低,這裏選用rpm包來安裝drbd模塊)
- yum localinstall -y --nogpgcheck drbd83-8.3.8-1.el5.centos.i386.rpm kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
- #系在這兩個rpm包,並安裝
2.DRBD的配置
注意:在修改配置文件之前先給drbd創建一個供其使用的磁盤設備,可以是磁盤分區raid或者邏輯卷(這裏作者就直接給其分配一塊磁盤分區:使用fdisk命令)
- cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc
- #複製藍本配置文件到指定目錄下
- /etc/drbd.d/global-common.conf
- global {
- usage-count no;
- #修改此項到no
- }
- handler {
- fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
- #由於沒有stonith設備需要開啓此項,使用drbd的fence腳本來防止腦裂
- }
- startup {
- wfc-timeout 120;
- degr-wfc-timeout 120;
- }
- disk {
- on-io-error detach;
- fencing resource-only;
- }
- net {
- cram-hmac-alg "sha1";
- shared-secret "mydrbdlab";
- }
- syncer {
- rate 100M;
- }
- }
- #在對應位置添加以上內容
- vim /etc/drbd.d/web.res
- #創建資源文件
- resource web {
- on node1.a.org {
- device /dev/drbd0;
- disk /dev/sda5;
- address 192.168.0.71:7789;
- meta-disk internal;
- }
- on node2.a.org {
- device /dev/drbd0;
- disk /dev/sda5;
- address 192.168.0.72:7789;
- meta-disk internal;
- }
- }
- #添加這些內容
- scp /etc/drbd.conf node2:/etc/
- scp /etc/drbd.d/* node2:/etc/drbd.d/
- #將修改好的配置文件同步到node2
3.啓動並測試DRBD
- drbdadm create-md web
- ssh node2 drbdadm create-md web
- #在兩節點上初始化資源
- service drbd start
- ssh node2 service drbd start
- #在兩節點上啓動資源
- drbd-overview
- #查看運行狀態狀態
- drbdadm -- --overwrite-data-of-peer primary web
- #設置主節點
- drbd-overview
- #觀察運行狀態
Ps:您可以使用:watch -n1 'drbd-overview'以每秒一次的刷新頻率動態觀察運行狀態
同步完成
4.創建文件系統,手動測試主從DRBD
- mke2fs -j -L DRBD /dev/drbd0
- mkdir /mnt/drbd
- mount /dev/drbd0 /mnt/drbd
- #node1掛載中出現lost+found目錄
- echo ’test drbd by peacmaker’ > /mnt/drbd/index.html
手動將node2設成master
- drbdadm secondary web
- #在node1上將node1設置成從
- ssh node2 drbdadm primary web
- #在node1上將node2設置成主
- ssh node2 mount /dev/drbd0 /mnt/drbd
- #在node2上掛載
- ssh node2 ll /mnt/drbd
- #查看出現lost+found以及index.html文件
三、將DRBD整合成corosync資源,接受集羣調度
先關閉兩節點drbd服務,將其定義集羣資源後由corosync控制其啓動
- chkconfig drbd off
- service drbd stop
- ssh node2 chkconfig drbd off
- ssh node2 service drbd stop
- #在兩節點上關閉服務
定義webdrbd資源
- crm configure primitive webdrbd ocf:linbit:drbd params drbd_resource=web op monitor role=Master interval=50s timeout=30s op monitor role=Slave interval=60s timeout=30s
- crm configure ms MS_Webdrbd webdrbd meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
查看狀態
定義磁盤共享資源,並設置資源約束,規定啓動順序
- crm configure primitive WebFS ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/var/www/html" fstype="ext3"
- #定義文件系統資源,掛載信息
- crm configure colocation webserver-ip-FS-MS INFINITY: WebServer WebIP WebFS MS_Webdrbd
- #定義資源約束,將所有資源捆綁在一起,使其只能處於一個節點上
- crm configure order ip-fs- mandatory: WebIP MS_Webdrbd WebFS WebServer
- #定義啓動順序:IP資源,DRBD提升爲主節點,掛載文件系統,web服務
查看資源狀態
添加資源約束後,所有約束都在一個節點上,此時從瀏覽器輸入地址
http://192.168.0.73出現drbd中index.html頁面內容
現模擬node2宕機,查看資源狀態
注意:由於drbd的crm-fence-peer.sh腳本存在,會自動在xml文件中生成如下語句,來保證一旦drbd的master宕機slaver不會頂上master,當master恢復之後出現腦裂或數據不同步等情況的發生。
所以在測試資源流轉之前需要刪除相關語句,從而實現通過corosync控制drbd資源的流轉。
- crm configure edit
- #刪除下圖中標記字段,以實現pacemaker對drbd進行出從切換
- ssh node2 crm node standby
- #在node1上讓node2處於standby待命狀態
- crm status
- #查看資源狀態
資源已經全部成功轉移到node1上!
刷新瀏覽器頁面,由於drbd主從受corosync控制發生切換,故web服務將正常訪問且是相同內容:
至此Corosync/Pacemaker+heartbeat+drbd高可用集羣具體實現流程已敘述完畢,以上內容在您實現過程中出現的任何問題,歡迎在此交流;並請各位高手前輩大神達人予以批評指正,謝謝!