corosync+openais+pacemaker構建高可用性集羣

HA 四個層次:

1.message layer   / infrastructure

心跳

2.ccm 控制檯

3.resources  allocated  資源分配

4.resources agent  資源代理

第一層 message layer 主要可以由heartbest  keepalived  corosync/openais 來實現

第三層: 由pacemaker crm 來提供資源分配

案例:

實現兩個節點的高可用性羣集,用corosync/openais 來實現。

Node1 ip地址:192.168.1.15

Node2 ip地址:192.168.1.20

Vip :192.168.1.100

步驟:

1.在做該案例之前,首先確保自己的yum倉庫是否完整,由於在這個案例中牽扯到羣集,所以要安裝cluster倉庫。

各項都要確保時鐘同步: hwclock  -s

[root@node1 ~]# hwclock -s

2.無障礙密碼通訊方式:

[root@node1 ~]# ssh-keygen -t rsa

wps_clip_image-11904

[root@node1 ~]# ssh-copy-id  -i  .ssh/id_rsa.pub  root@node2  //將node1的鑰匙傳給node2

wps_clip_image-30941

比如我們將node1中的/etc/hosts文件 拷貝到 node2中的/etc下:

[root@node1 ~]# scp  /etc/hosts  node2:/etc

wps_clip_image-22605

查看node2中的hosts文件內容:

[root@node2 ~]# vim /etc/hosts

wps_clip_image-25816

這樣就實現了兩節點之間無障礙密碼傳送文件和執行一些指令。

3.安裝corosync軟件包:

wps_clip_image-19286

紅色的都是要安裝的。

 

[root@node1 ~]# yum  localinstall  *.rpm  --nogpgcheck   //將本地紅色軟件包全部安裝

4.首先來設置node1這個節點:

安裝完成後切換到corosync目錄下

[root@node1 ~]# cd /etc/corosync/    會看到corosync的樣本文件

wps_clip_image-3442

[root@node1 corosync]# cp corosync.conf.example corosync.conf    //將樣本文件變成正式配置文件

[root@node1 corosync]# vim corosync.conf       //編譯該文件

wps_clip_image-22664

wps_clip_image-11381

需要額外補充一點東西,在下面空白行加入以下內容:

wps_clip_image-5333

[root@node1 corosync]# mkdir /var/log/cluster       //創建該目錄

在另外的一個節點上,也就是node2上創建日誌目錄

[root@node1 corosync]# ssh  node2  'mkdir /var/log/cluster'

爲了便其他主機加入該集羣,需要認證,生成一個authkey

[root@node1 corosync]# corosync-keygen

wps_clip_image-25644

將上圖中的文件連同權限一起遠程拷貝到node2中:

[root@node1 corosync]# scp -p authkey corosync.conf node2:/etc/corosync/

[root@node1 corosync]# service corosync start       //在node1上啓動corosync服務

[root@node1 corosync]# ssh node2 '/etc/init.d/corosync start'

Starting Corosync Cluster Engine (corosync): [  OK  ]            //在node1上啓動node2的該服務

下面來驗證corosync引擎是否正常啓動了:

[root@node1 corosync]# grep -i  -e "corosync cluster engine" -e "configuration file" /var/log/messages

wps_clip_image-32242

查看初始化成員節點通知是否發出:

[root@node1 corosync]#  grep -i totem /var/log/messages

wps_clip_image-30123

檢查過程中是否有錯誤產生:

[root@node1 corosync]# grep -i error:  /var/log/messages  |grep -v unpack_resources

(爲了檢查stonith的錯誤,因爲我們在這裏沒有安裝stonith,所以得將stonith去掉,不去掉的話會報錯)

檢查pacemaker時候已經啓動了:

[root@node1 corosync]# grep -i pcmk_startup /var/log/messages

wps_clip_image-27152

在節點2上同樣做以上相同的驗證.

5.在node1節點上查看集羣的成員狀態:

[root@node1 corosync]# crm status

wps_clip_image-14883

下面來提供高可用服務:

在corosync中,定義服務可以用兩種接口

(1)圖形接口  (使用hb——gui)

(2)crm  (pacemaker 提供,是一個shell)

查看配置信息:

wps_clip_image-16978

如何驗證該文件的語法錯誤:

[root@node1 corosync]# crm_verify -L

wps_clip_image-32763

上述出錯時由於stonith,因爲我們沒有stonith,在高可用的環境裏面,會禁止使用任何支援,所以我們得禁用掉stonith。

[root@node1 corosync]# crm                    //進入crm界面

crm(live)# configure                           //進入配置模式

crm(live)configure# property stonith-enabled=false  //禁用stonith

crm(live)configure# commit                    //提交上述修改內容

wps_clip_image-17940

6.下面來定義資源:

集羣的資源類型有4種

primitive   本地主資源 (只能運行在一個節點上)

group     把多個資源軌道一個組裏面,便於管理

clone      需要在多個節點上同時啓用的  (如ocfs2  ,stonith ,沒有主次之分)

master     有主次之分,如drbd

我們來提供三種資源: ip地址  httpd服務  共享存儲

[root@node1 corosync]# crm

crm(live)# configure

crm(live)configure# ra

crm(live)configure ra# classes

heartbeat

lsb

ocf / heartbeat pacemaker

Stonith                                    1//查看資源代理

crm(live)configure ra# list heartbeat             //列出heartbeat這個資源代理所管轄的資源

wps_clip_image-12674

配置ip地址資源:

crm(live)configure# primitive  webip ocf:heartbeat:IPaddr  params ip=192.168.1.100  

wps_clip_image-17721

wps_clip_image-6784

wps_clip_image-29211

在這裏看看你兩個節點的虛擬機上是否安裝httpd,沒安裝的話分別安裝。

下面分別在每個節點上設置一個簡單的web網頁:

[root@node1 corosync]# echo "hello" >/var/www/html/index.html

[root@node2 corosync]# echo "hahaaha" >/var/www/html/index.html

接下來定義web服務資源:

crm(live)configure# primitive webserver lsb:httpd

wps_clip_image-2792

查看狀態:

wps_clip_image-12247

大家仔細看上圖,就會發現存在一個問題:就是ip地址資源在node1上啓動,但是web服務卻是在node2上啓動的,這樣一來兩個資源分別在兩個節點上,這樣顯然是不行的。出現這樣的原因就是在高可用羣集中資源比較多,這樣是爲了將資源平衡到每一個節點上。

看下圖來證實這樣的問題:

wps_clip_image-18551

wps_clip_image-10242

爲了解決這樣的問題,就用到了我們上面所說的羣集資源類型中group的概念:

定義組:

crm(live)configure# group  web  webip  webserver

wps_clip_image-3598

再次查看羣集狀態:

wps_clip_image-2834

此時我們就可以來訪問192.168.1.100來查看結果:

wps_clip_image-3838

能夠成功訪問。

如果此時我們把node1節點停掉,那麼各種資源應該流轉到node2上。注意我們在停掉node1節點時,停用corosync服務,不要停用httpd服務。

[root@node1 corosync]# service corosync stop

Signaling Corosync Cluster Engine (corosync) to terminate: [  OK  ]

Waiting for corosync services to unload:.........          [  OK  ]

[root@node1 corosync]# crm status

Connection to cluster failed: connection failed

然後我們在節點node2上查看信息狀態:

wps_clip_image-14589

可以看到node1已經offline,但是node2仍然沒有運行,原因是沒有票數了(without quorum)

所以我們關閉quorum:

關閉 quorum

可選的參數有如下:ignore (忽略)

                  freeze (凍結,表示已經啓用的資源繼續實用,沒有啓用的資源不能

                                啓用))

                  stop(默認)

                  suicide  (所有的資源殺掉)

那我們將節點node1的corosync服務啓動起來, 改變quorum。

[root@node1 corosync]# crm

crm(live)# configure

crm(live)configure# property no-quorum-policy=ignore

wps_clip_image-26025

接下來我們停用node1的corosync,查看node2的狀態:

[root@node1 corosync]# service corosync stop

wps_clip_image-15322

可見資源已經流轉到node2節點上,現在登錄http://192.168.1.100上查看網頁狀態:

wps_clip_image-20508

變成了node2節點上web頁面的內容。

如果此時將node1節點上的corosync服務開啓,此時資源不會自動流轉到node1上,還是在node2上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章