corosync+openais+pacemaker實現高可用性羣集
實驗拓撲
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服務器
Node1
[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
Node2
[root@node2 ~]# yum install httpd
[root@node2 ~]# chkconfig httpd off
[root@node2 ~]# echo "node2" >/var/www/html/index.html
crm(live)configure# primitive webserver lsb:httpd
停掉我們的票數,不然在節點一是小的時候,節點二不會變成主節點
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了