corosync+openais+pacemakter 實現高可用集羣

Corosync+openais+pacemakter實現高可用性集羣

Corosync簡介:

 Coreosync在傳遞信息的時候可以通過一個簡單的配置文件來定義信息傳遞的方式和協議等。它是一個新興的軟件,2008年推出,但其實它並不是一個真正意義上的新軟件,在2002年的時候有一個項目Openais  , 它由於過大,分裂爲兩個子項目,其中可以實現HA心跳信息傳輸的功能就是Corosync ,它的代碼60%左右來源於Openais. Corosync可以提供一個完整的HA功能,但是要實現更多,更復雜的功能,那就需要使用Openais了。Corosync是未來的發展方向。在以後的新項目裏,一般採用Corosync,而hb_gui可以提供很好的HA管理功能,可以實現圖形化的管理。另外相關的圖形化有RHCS的套件luci+ricci.

操作步驟:

1.基本的配置(兩個節點上都要做的)。

[root@localhost ~]# vim /etc/sysconfig/network(改主機名)

[root@localhost ~]# hostname hua1.a.com

[root@localhost ~]# vim /etc/hosts(改hosts文件

 192.168.1.100    hua1.a.com     hua1

 192.168.1.200  hua2.a.com    hua2

[root@localhost ~]# scp /etc/hosts hua1:/etc/

2.實現ssh的無密鑰傳輸(兩個節點上都要做)

[root@localhost ~]# ssh-keygen -t rsa (生成密鑰)

[root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub hua1 (把密鑰傳輸到另一個節點上)

3.安裝需要的軟件

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

heartbeat-libs-3.0.3-2.3.el5.i386.rpm

ldirectord-1.0.1-1.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.0.11-1.2.el5.i386.rpm

pacemaker-libs-1.0.11-1.2.el5.i386.rpm

perl-TimeDate-1.16-5.el5.noarch.rpm

resource-agents-1.0.4-1.1.el5.i386.rpm

先編輯yum端,cluster名和server不能用

[root@localhost ~]# yum localinstall *.rpm --nogpgcheck (安裝所有以.rpm結尾的軟件包)

4.兩個節點要同步時鐘

[root@localhost ~]# hwclock -s (兩個節點都要做的)

[root@localhost ~]# date

2012年 12月 31日 星期一 21:11:23 CST

[root@localhost ~]# ssh hua2 "date" (查看另一端的時間)

2012年 12月 31日 星期一 21:11:29 CST

5.安裝後主要的配置

[root@localhost ~]# cd /etc/corosync/ (主要的配置文件目錄)

[root@localhost corosync]# ls

amf.conf.example  corosync.conf.example  service.d  uidgid.d

[root@localhost corosync]# cp corosync.conf.example corosync.conf (把案例文件拷貝成主的配置文件)

[root@localhost corosync]# vim corosync.conf (編輯主的配置文件)

下面是一些配置的介紹

(圖騰的意思  ,多個節點傳遞心跳時的相關協議的信息)

totem {

        version: 2  版本號

        secauth: off  是否代開安全認證

        threads: 0   多少個現成認證  無限制

        interface {

                ringnumber: 0   

                bindnetaddr: 192 168.1.1  通過哪個網絡地址進行通訊,可以給個主機地址(給成192.168.2.0

                mcastaddr: 226.94.1.1

                mcastport: 5405

        }   

}

logging {

        fileline: off 

        to_stderr: no  是否發送標準出錯

        to_logfile: yes  日誌

        to_syslog: yes   系統日誌  (建議關掉一個),會降低性能

        logfile: /var/log/cluster/corosync.log  (手動創建目錄)

        debug: off  排除時可以起來

        timestamp: on 日誌中是否記錄時間

      一下是openais的東西,可以不用代開

        logger_subsys {

                subsys: AMF 

                debug: off 

        }   

}

amf {

        mode: disabled

}

補充一些東西,前面只是底層的東西,因爲要用pacemaker

添加如下的東西

service {

        ver: 0

        name: pacemaker

}

雖然用不到openais ,但是會用到一些子選項

aisexec {

        user: root

        group: root

}

6.[root@hua2 corosync]# mkdir /var/log/cluster (對方創建這個目錄)

兩邊都要創建這個沒有的日誌目錄

7.爲了便面其他主機加入該集羣,需要認證

[root@hua1 corosync]# corosync-keygen (產生認證的文件)

Corosync Cluster Engine Authentication key generator.

Gathering 1024 bits for key from /dev/random.

Press keys on your keyboard to generate entropy.

Writing corosync key to /etc/corosync/authkey.

8.把所有的配置拷貝到另一個節點

[root@hua1 corosync]# scp ./authkey corosync.conf hua2:/etc/corosync/

9.配置已經完成,現在需要把服務給啓動了,可以再節點一上啓動

[root@hua1 corosync]# service corosync start

[root@hua1 corosync]# ssh hua2 "service corosync start"

10.驗證corosync引擎是否正常啓動了

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

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

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

檢查過程中是否有錯誤產生  (便面stonith的錯誤

[root@hua1 corosync]# grep -i error:  /var/log/messages

[root@hua1 corosync]# grep -i error:  /var/log/messages  |grep -v unpack_resources (過濾)

檢查pacemaker時候已經啓動了

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

另一端也一樣

11.任何一個節點上  查看集羣的成員狀態

[root@hua1 corosync]# crm status

12.插入介紹:提供高可用服務

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

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

2.crm  pacemaker 提供,是一個shell

[root@hua1 corosync]# crm configure show  (查看cib信息庫的狀態)

node hua1.a.com

node hua2.a.com

property $id="cib-bootstrap-options" \

dc-version="1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f" \

cluster-infrastructure="openais" \

expected-quorum-votes="2"

[root@hua1 corosync]# crm configure show xml (以xml的格式查看)

[root@hua1 corosync]# crm_verify -L (查看錯誤)

 可以看到有stonith錯誤,在高可用的環境裏面,會禁止實用任何資源

 可以禁用stonith 

[root@hua1 corosync]# crm

crm(live)# configure 

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

crm(live)configure#  property

usage: property [$id=<set_id>] <option>=<value>

crm(live)configure# help property 

crm(live)configure# commit  (提交生效)

 13.再次進行檢查

[root@hua1 corosync]# crm_verify -L

沒有錯誤了

系統上有專門的stonith命令

stonith   -L   顯示stonith所指示的類型

crm可以使用交互式模式  

可以執行help

保存在cib裏面,以xml的格式

14.集羣的資源類型有4

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

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

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

master    有主次之分,如drbd

 15.配置一個資源,可以在configuration 下面進行配置

 先資源名字

 primitive webIP (資源名)ocf:heartbeat(代理):IPaddr  params ip=192.168.1.150(資源參數)

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

crm(live)configure# commit 

crm(live)configure# exit

bye

查看

crm(live)configure# show

16.安裝http服務

[root@localhost Server]# yum install httpd-2.2.3-22.el5.i386.rpm

[root@localhost Server]# service httpd status (要讓http是停止狀態,因爲要受到控制)

httpd 已停

[root@localhost Server]# echo "hua1.com" >/var/www/html/index.html (輸入網頁點東西用於測試)

[root@localhost Server]# echo "hua2.com" >/var/www/html/index.html

17查看狀態,發現有了一個資源,並且已經運行在hua1.a.com

[root@localhost Server]# ifconfig  (查看地址發現虛擬地址已經有了)

查看http的服務資源

[root@localhost Server]# crm ra list lsb

支持httpd腳本資源

查看httpd的參數

crm(live)ra# meta lsb:httpd  

 18.定義httpd的資源

crm(live)configure# primitive webserver lsb:httpd

crm(live)configure# show

crm(live)configure# commit

19.查看現在http運行的狀態

[root@localhost Server]# service httpd status

發現httpd已經啓動了,但是在node2節點上

(高級羣集服務資源越來越多,會分佈在不同的節點上,以儘量負載均衡)

 需要約束在同一個節點上,定義成一個組

 可以實用  crm(live)configure# help group  查看配置組的幫助

[root@hua2 ~]# ping hua1 (這條明命令是如果節點不在線時,可以ping一下就行了)

先在查看資源的狀態,發現ip是在hua1上,而server是在hua2上,這樣是不行的

20.定義組爲了解決資源不在一個節點上的錯誤

[root@hua1 ~]# crm

crm(live)# configure 

crm(live)configure# group web  webip  webserver

crm(live)configure# commit 

21.外面的http查看,但發現當節點一上的corosync服務停的時候,資源不能轉移到節點二上去,爲了解決這個問題,需要改變票數。

22.去改變票數的值

[root@hua1 ~]# crm

crm(live)# configure 

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

crm(live)configure# commit 

crm(live)configure# exit

現在把服務停掉後,發現資源已經到節點二上去了

 

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