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 多少個現成認證 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
現在把服務停掉後,發現資源已經到節點二上去了