corosync+openais+pacemaker實作高可用性群集
實驗拓撲
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcucDOzgjMyIzNx8CXxEzMxAjMvwFduVWboNWY0RXYvwVbvNmLvR3YxUjL3M3Lc9CX6MHc0RHaiojIsJye.png)
Corosync簡介:
Coreosync在傳遞資訊的時候可以通過一個簡單的配置檔案來定義資訊傳遞的方式和協定等。它是一個新興的軟體,2008年推出,但其實它并不是一個真正意義上的新軟體,在2002年的時候有一個項目Openais , 它由于過大,分裂為兩個子項目,其中可以實作HA心跳資訊傳輸的功能就是Corosync ,它的代碼60%左右來源于Openais. Corosync可以提供一個完整的HA功能,但是要實作更多,更複雜的功能,那就需要使用Openais了。Corosync是未來的發展方向。在以後的新項目裡,一般采用Corosync,而hb_gui可以提供很好的HA管理功能,可以實作圖形化的管理。另外相關的圖形化有RHCS的套件luci+ricci.
Openais:就是corostnc的前身。
Pacemaker是一個群集管理器。它利用首選群集基礎設施提供的消息和成員能力,由輔助節點和系統進行故障檢測和回收,實作性群集服務(亦稱資源)的高可用性。
它可以做幾乎任何規模的群集,并帶有一個強大的依賴模式,讓管理者能夠準确地表達的群集資源之間的關系(包括順序和位置)。
首先準備好環境,配置好兩台主機的ip位址
Vip:192.168.2.100
Node1
Eth0:192.168.2.10
Node2
Eth0:182.168.2.20
實作無障礙通訊
配置好yum
拷貝所需軟體包
cluster-glue-1.0.6-1.6.el5.i386.rpm
cluster-glue-libs-1.0.6-1.6.el5.i386.rpm
corosync-1.2.7-1.1.el5.i386.rpm 主程式
corosynclib-1.2.7-1.1.el5.i386.rpm
heartbeat-3.0.3-2.3.el5.i386.rpm 安裝pacemaker依賴的
heartbeat-libs-3.0.3-2.3.el5.i386.rpm
libesmtp-1.0.4-5.el5.i386.rpm
openais-1.1.3-1.6.el5.i386.rpm
openaislib-1.1.3-1.6.el5.i386.rpm
pacemaker-1.1.5-1.1.el5.i386.rpm 資料總管
pacemaker-cts-1.1.5-1.1.el5.i386.rpm
pacemaker-libs-1.1.5-1.1.el5.i386.rpm
perl-TimeDate-1.16-5.el5.noarch.rpm
resource-agents-1.0.4-1.1.el5.i386.rpm
安裝這些軟體包
[root@node1 ~]# yum localinstall *.rpm --nogpgcheck
建立目錄 mkdir /var/log/cluster
為了便面其他主機加入該叢集,需要認證,生成一個authkey
[root@node1 corosync]# corosync-keygen
排錯
11.驗證corosync引擎是否正常啟動了
[root@node1 corosync]# grep -i -e "corosync cluster engine" -e "configuration file" /var/log/messages
ct 18 23:24:02 node1 smartd[2832]: Opened configuration file /etc/smartd.conf
Oct 18 23:24:02 node1 smartd[2832]: Configuration file /etc/smartd.conf was parsed, found DEVICESCAN, scanning devices
May 7 14:00:29 node1 smartd[2787]: Opened configuration file /etc/smartd.conf
May 7 14:00:29 node1 smartd[2787]: Configuration file /etc/smartd.conf was parsed, found DEVICESCAN, scanning devices
May 7 16:24:36 node1 corosync[686]: [MAIN ] Corosync Cluster Engine ('1.2.7'): started and ready to provide service.
May 7 16:24:36 node1 corosync[686]: [MAIN ] Successfully read main configuration file '/etc/corosync/corosync.conf'.
12。檢視初始化成員節點通知是否發出
[root@node1 corosync]# grep -i totem /var/log/messages
May 7 16:24:36 node1 corosync[686]: [TOTEM ] Initializing transport (UDP/IP).
May 7 16:24:36 node1 corosync[686]: [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).
May 7 16:24:36 node1 corosync[686]: [TOTEM ] The network interface is down.
May 7 16:24:37 node1 corosync[686]: [TOTEM ] A processor joined or left the membership and a new membership was formed.
May 7 16:38:30 node1 corosync[754]: [TOTEM ] Initializing transport (UDP/IP).
May 7 16:38:30 node1 corosync[754]: [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).
May 7 16:38:30 node1 corosync[754]: [TOTEM ] The network interface [192.168.2.10] is now up.
May 7 16:38:31 node1 corosync[754]: [TOTEM ] Process pause detected for 603 ms, flushing membership messages.
May 7 16:38:31 node1 corosync[754]: [TOTEM ] A processor joined or left the membership and a new membership was formed.
13.檢查過程中是否有錯誤産生
grep -i error: /var/log/messages |grep -v unpack_resources (便面stonith的錯誤)
14.檢查pacemaker時候已經啟動了
[root@node1 corosync]# grep -i pcmk_startup /var/log/messages
May 7 16:24:36 node1 corosync[686]: [pcmk ] info: pcmk_startup: CRM: Initialized
May 7 16:24:36 node1 corosync[686]: [pcmk ] Logging: Initialized pcmk_startup
May 7 16:24:36 node1 corosync[686]: [pcmk ] info: pcmk_startup: Maximum core file size is: 4294967295
May 7 16:24:36 node1 corosync[686]: [pcmk ] info: pcmk_startup: Service: 9
May 7 16:24:36 node1 corosync[686]: [pcmk ] info: pcmk_startup: Local hostname: node1.a.com
May 7 16:38:31 node1 corosync[754]: [pcmk ] info: pcmk_startup: CRM: Initialized
May 7 16:38:31 node1 corosync[754]: [pcmk ] Logging: Initialized pcmk_startup
May 7 16:38:31 node1 corosync[754]: [pcmk ] info: pcmk_startup: Maximum core file size is: 4294967295
May 7 16:38:31 node1 corosync[754]: [pcmk ] info: pcmk_startup: Service: 9
May 7 16:38:31 node1 corosync[754]: [pcmk ] info: pcmk_startup: Local hostname: node1.a.com
15 前叢集的節點上啟動另外一個節點
[root@node1 corosync]# ssh node2 '/etc/init.d/corosync start'
Starting Corosync Cluster Engine (corosync): [ OK ]
16,将前面的驗證步驟在另外一個節點上再次驗證一次
17.在任何一個節點上 檢視叢集的成員狀态
可以看到有stonith錯誤,在高可用的環境裡面,會禁止實用任何支援
可以禁用stonith ,不禁用就送出不上去
定義資源
送出上去
crm(live)configure# commit
檢視一下我們的ip
定義我們服務的資源
先安裝web伺服器
[root@node2 ~]# yum install httpd
[root@node2 ~]# chkconfig httpd off
[root@node2 ~]# echo "node1" >/var/www/html/index.html
crm(live)configure# primitive webserver lsb:httpd
[root@node2 ~]# echo "node2" >/var/www/html/index.html
停掉我們的票數,不然在節點一是小的時候,節點二不會變成主節點
4.關數閉 quorum
可選的參數有如下 ignore (忽略)
freeze (當機,表示已經啟用的資源繼續實用,沒有啟用的資源不能
啟用)
stop(預設)
suicide (所有的資源殺掉)
将節點1 的corosync 服務啟動起來
改變quorum
crm(live)configure# property no-quorum-policy=ignore
cimmit
crm(live)# show (在次檢視quorum 的屬性)
ERROR: syntax: show
crm(live)# configure
crm(live)configure# show
node node1.a.com
node node2.a.com
primitive webIP ocf:heartbeat:IPaddr \
params ip="192.168.2.100"
primitive webserver lsb:httpd
group web webIP webserver
property $id="cib-bootstrap-options" \
dc-version="1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f" \
cluster-infrastructure="openais" \
expected-quorum-votes="2" \
stonith-enabled="false" \
no-quorum-policy="ignore" (已經關閉)
停掉節點一
檢視一下資源
通路以下我們的節點
再将我們的node1啟動起來
看一下資源到底會不會復原了。其實在這種高可用的群集上是不會復原的。依然在node2上。
我們把node2停下來。看能不能切換到node1上呢
切換過來了
也變成了node1了