haproxy+pacemaker+corosync實現高可用
pacemaker+corosync
Pacemaker是一個叢集資源管理器。它利用叢集基礎構件(OpenAIS 、heartbeat或corosync)提供的訊息和成員管理能力來探測並從節點或資源級別的故障中恢復,以實現群集服務(亦稱資源)的最大可用性。
Corosync是叢集管理套件的一部分,通常會與其他資源管理器一起組合使用它在傳遞資訊的時候可以通過一個簡單的配置檔案來定義資訊傳遞的方式和協議等。它是一個新興的軟體,2008年推出,但其實它並不是一個真正意義上的新軟體,在2002年的時候有一個專案Openais , 它由於過大,分裂為兩個子專案,其中可以實現HA心跳資訊傳輸的功能就是Corosync ,它的程式碼60%左右來源於Openais. Corosync可以提供一個完整的HA功能,但是要實現更多,更復雜的功能,那就需要使用Openais了。Corosync是未來的發展方向。在以後的新專案裡,一般採用Corosync,而hb_gui可以提供很好的HA管理功能,可以實現圖形化的管理。
簡而言之:
一個用於心跳檢測,一個用於資源轉移。兩個結合起來使用,可以實現對高可用架構的自動管理。
心跳檢測是用來檢測伺服器是否還在提供服務,只要出現異常不能提供服務了,就認為它掛掉了。
當檢測出伺服器掛掉之後,就要對服務資源進行轉移。
CoroSync是運行於心跳測試的開源軟體。PaceMaker是運行於資源轉移層的開源軟體。
pacemaker+corosync+haproxy實現高可用
圖解:
pacemake+corosync配置
給兩個節點(server1與server4)安裝haproxy,pacemaker,corosync,crmsh,pssh(安裝包自行下載)
安裝完成後,進行 corosync 的配置:
yum install -y pacemaker corosync
rpm -ivh pssh-2.3.1-2.1.x86_64.rpm
yum install crmsh-1.2.6-0.rc2.2.1.x86_64.rpm -y
cd /etc/corosync/
cp corosync.conf.example corosync.conf
vim /etc/corosync/corosync.conf compatibility: whitetank #是否相容0.8以前的版本 totem { version: 2 #通訊協議 secauth: off #安全認證功能 off別人知道多波地址 就可以加入 最好開啟 threads: 0 #0表示預設 認證時候並行執行緒 interface { ringnumber: 0 #定義環號,防止心跳資訊迴圈傳送 就有一塊網絡卡就用0 bindnetaddr: 172.25.254.0 #繫結網路地址 mcastaddr: 226.94.1.1 mcastport: 5405 #多波埠 ttl:1 #只發一次 避免環路 } } logging { fileline: off to_stderr: no #標準錯誤輸出 to_logfile: yes to_syslog: yes logfile: /var/log/cluster/corosync.log debug: off timestamp: no #是否記錄時間戳 logger_subsys { subsys: AMF debug: off } } amf { mode:disabled #程式設計相關 } service { ver: 0 name: pacemaker } scp corosync.conf server4:/etc/corosync/ /etc/init.d/corosync start #server4也開啟服務 crm_verify -LV #檢查語法錯誤,第一次檢查會報錯,需要修改配置 ,預設開啟fence而我們沒有新增fence
crm configure show #顯示叢集配置
crm #進入crm管理叢集
crm(live)# configure
crm(live)configure# show
node server1
node server4
property $id="cib-bootstrap-options" \
dc-version="1.1.10-14.el6-368c726" \
cluster-infrastructure="classic openais (with plugin)" \
expected-quorum-votes="2"
crm(live)configure# property stonith-enabled=false #禁掉fence
crm(live)configure# commit #每次新增都需要提交
crm(live)configure# bye
crm_verify -LV #沒有報錯
primitive vip ocf:heartbeat:IPaddr2 params ip=172.25.254.100 cidr_netmask=24 op monitor interval=1min #新增vip
crm_mon #監控叢集資訊
property no-quorum-policy=ignore #關閉叢集對節點數量的檢查
如果節點server1故障,節點server4收不到心跳請求,直接接管服務,保證正常執行,不至於一個節點崩掉而使整個叢集崩掉
實現haproxy服務高可用
Server4安裝haproxy
yum install -y haproxy-1.4.24-1.x86_64.rpm
scp /etc/haproxy/haproxy.conf server4:/etc/haproxy/
在crm叢集中新增haproxy服務
primitive haproxy lsb:haproxy op monitor interval=1min
group hagroup vip haproxy #避免資源飄移,將他們繫結在一個組
crm_mon #監控得
測試:
停掉server4,server1接管服務,當server4開啟時,服務不回切
httpd仍然訪問輪詢
新增fence
確保物理機fence_virtd服務開啟,並且fence配置正確,檢視/etc/fence_virt.conf
確保兩個節點有fence_xvm,/etc/cluster/fence_xvm.key
Server1
primitive vmfence stonith:fence_xvm params pcmk_host_map="server1:vm1;server4:vm4" op monitor interval=1min # 新增fence,server1:vm1(虛擬機器主機名:虛擬機器名)
property stonith-enabled=true #開啟fence
commit
show
[[email protected] ~]# crm configure show
node server1 \
attributes standby="off"
node server4
primitive haproxy lsb:haproxy \
op monitor interval="1min"
primitive vip ocf:heartbeat:IPaddr2 \
params ip="172.25.24.100" cidr_netmask="32" \
op monitor interval="1min"
primitive vmfence stonith:fence_xvm \
params pcmk_host_map="server1:vm1;server4:vm4" \
op monitor interval="1min"
group hagroup vip haproxy
property $id="cib-bootstrap-options" \
dc-version="1.1.10-14.el6-368c726" \
cluster-infrastructure="classic openais (with plugin)" \
expected-quorum-votes="2" \
stonith-enabled="true" \
no-quorum-policy="ignore"
開啟監控檢視:
若想刪除資源配置
先進入resoure關閉,然後進入configure刪除。具體操作如下圖