高可用集群--Corosync/Openais 的配置
下面以一實例來說明基於Corosync/Openais的高可用集群服務的配置.環境2台伺服器提供LNMP服務,1台NFS伺服器為mysql資料庫提供共享存儲.集群節點:1、主機名:aydon1,IP:172.16.13.1,;2、主機名:aydon2,IP:172.16.13.8.NFS 伺服器:IP,172.16.13.6.提供web服務的地址:172.16.13.2提供mysql服務的地址:172.16.13.3以上伺服器的操作系統均為RHEL5.4 .一、配置NFS伺服器
這裡將/mydata作為mysql數據的存放目錄,因此創建目錄/mydata.#mkdir /mydata添加用戶和組Mysql服務是以mysql 用戶的身份運行的,所以/mydata目錄的屬主、屬主應該為mysql,#groupadd -r -g 110 mysql#useradd -r -u 110 -g mysql mysql#chown mysql.mysql /mydata(註:NFS是以用戶id來識別用戶的,所以得保證三台伺服器上的mysql用戶的uid是相同的)#vim /etc/exports 添加如下內容:/mydata 172.16.13.1(rw,no_root_squash) 172.16.13.6(rw,no_root_squash)#service nfs start --開啟NFS服務NFS服務配置完成,可以掛載進行測試.二、
配置HA節點1) 在/etc/hosts文件中添加如下內容172.16.13.1 aydon1172.16.13.6 aydon2(註:
保證所有節點的主機名稱和對應的IP地址解析服務可以正常工作,且每個節點的主機名稱需要跟"uname -n「命令的結果保持一致)2) 設定兩個節點可以基於密鑰進行ssh通信Node1:# ssh-keygen -t rsa# ssh-copy-id -i ~/.ssh/id_rsa.pub root@aydon2Node2:# ssh-keygen -t rsa # ssh-copy-id -i ~/.ssh/id_rsa.pub root@aydon13) 安裝Corosync及相關軟體包需要下載如下軟體包cluster-glue、cluster-glue-libs、heartbeat、openaislib、resource-agents、corosync、heartbeat-libs、pacemaker、corosynclib、libesmtp、pacemaker-libs.下載地址:http://clusterlabs.org/rpm/.這裡將所需的軟體包都下載至/root/rpm目錄中.使用如下命令安裝: #cd /root/rpm#yum -y --nogpgcheck localinstall *.rpm4) 在aydon1上配置corosync(以下配置均在aydon1上進行)#cd /etc/corosync#cp corosync.conf.example corosync.conf編輯corosync.conf ,修改為如下內容:compatibility: whitetank
totem {
version: 2
secauth: off --開啟或關閉安全認證
threads: 0
interface {
ringnumber: 0
bindnetaddr: 172.16.0.0 --網卡所在網路的網路地址
mcastaddr: 229.88.1.8 --指定多播地址
mcastport: 5405
}
}
logging {
fileline: off
to_stderr: no --是否向屏幕上輸出錯誤信息
to_logfile: yes --是否將日誌保存在文件中
to_syslog: no --是否將日誌信息記錄到系統日誌中
logfile: /var/log/cluster/corosync.log --保存日誌的文件
debug: off
timestamp: off
logger_subsys {
subsys: AMF
debug: off
}
}
amf {
mode: disabled
}
service {
ver: 0
name: pacemaker
use_mgmtd: yes
}
aisexec {
user: root
group: root
}
5) 生成節點間通信時用到的認證密鑰文件#corosync-keygen將corosync.conf和authkey複製至aydon2#scp -p corosync.conf authkey aydon2:/etc/corosync6) 在兩節點上創建corosync日誌所在目錄#mkdir /var/log/cluster#ssh aydon2 'mkdir /var/log/cluster' 7) 啟動corosync#service corosync start8) 查看corosync引擎是否正常啟動:# grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.logJun 14 19:02:08 node1 corosync[5103]: [MAIN ] Corosync Cluster Engine ('1.2.7'): started and ready to provide service.Jun 14 19:02:08 node1 corosync[5103]: [MAIN ] Successfully read main configuration file '/etc/corosync/corosync.conf'.Jun 14 19:02:08 node1 corosync[5103]: [MAIN ] Corosync Cluster Engine exiting with status 8 at main.c:1397.Jun 14 19:03:49 node1 corosync[5120]: [MAIN ] Corosync Cluster Engine ('1.2.7'): started and ready to provide service.Jun 14 19:03:49 node1 corosync[5120]: [MAIN ] Successfully read main configuration file '/etc/corosync/corosync.conf'. 9) 查看初始化成員節點通知是否正常發出:# grep TOTEM /var/log/cluster/corosync.logJun 14 19:03:49 node1 corosync[5120]: [TOTEM ] Initializing transport (UDP/IP).Jun 14 19:03:49 node1 corosync[5120]: [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).Jun 14 19:03:50 node1 corosync[5120]: [TOTEM ] The network interface [192.168.0.5] is now up.Jun 14 19:03:50 node1 corosync[5120]: [TOTEM ] A processor joined or left the membership and a new membership was formed.10) 檢查啟動過程中是否有錯誤產生:# grep ERROR: /var/log/cluster/corosync.log | grep -v unpack_resources11) 查看pacemaker 是否正常啟動:# grep pcmk_startup /var/log/cluster/corosync.logJun 14 19:03:50 node1 corosync[5120]: [pcmk ] info: pcmk_startup: CRM: InitializedJun 14 19:03:50 node1 corosync[5120]: [pcmk ] Logging: Initialized pcmk_startupJun 14 19:03:50 node1 corosync[5120]: [pcmk ] info: pcmk_startup: Maximum core file size is: 4294967295Jun 14 19:03:50 node1 corosync[5120]: [pcmk ] info: pcmk_startup: Service: 9Jun 14 19:03:50 node1 corosync[5120]: [pcmk ] info: pcmk_startup: Local hostname: node1.a.org如果上面命令執行均沒有問題,接著可以執行如下命令啟動node2上的corosync# ssh node2 -- /etc/init.d/corosync start注意:啟動node2需要在node1上使用如上命令進行,不要在node2節點上直接啟動. #crm status --查看集群節點的啟動狀態.12) 配置集群工作屬性① 禁用stonith設備corosync默認啟用了stonith,而當前集群並沒有stonith設備,所以禁用stonith設備.#crm configure property stonith-enabled=false ② 定義默認資源粘性
每一次資源的流動都可能造成服務在短時間內不可用,所以應避免資源的流動.#crm configure rsc_defaults resource-stickiness=100③ 定義no-quorum-policy策略對於兩節點的集群,當有一台服務下線時,剩餘的quorum是絕對不可能多餘quorum總數的1/2的,而no-quorum-policy默認是stop-停止集群服務,這樣一來兩節點的高可用集群是沒有意義的,因此將設定no-quorum-policy=ignore#crm configure property no-quorum-policy=ignore④ 定義資源對於當前集群服務來講,資源有:提供web服務的ip,nginx服務,提供mysql服務的ip,mysql服務,共享存儲/mydata. #crm configure primitive webip ocf:heartbeat:IPaddr ip=172.16.13.2 nic=eth0 cidr_netmask=16#crm configure primitive nginx lsb:nginx#crm configure primitive myip ocf:heartbeat:IPaddr ip=172.16.13.3 nic=eth0 cidr_natmask=16#crm configure primitive mysqld lsb:mysqld#crm configure primitive mynfs ocf:heartbeat:Filesystem params device="172.16.13.6:/mydata" directory="/mydata" fstype="nfs" op start timeout=60 op stop timeout=60 ⑤ 定義colocation約束資源的排列約束:web服務:webip一定得和nginx存在於同一伺服器上;mysql服務:myip,mysqld,mynfs一定得存在於同一台伺服器上.因此做如下定義:#crm configure colocation inf: web webip nginx #crm configure colocation mysql inf: myip mysqld mynfs⑥ 定義order約束資源的應用次序:對於web服務,應該webip先生效,然後是nginx;對於mysql服務,mynfs先應用,其次是myip,
是mysqld,因此做以下定義:#crm configure order nginx-after-webip mandatory: webip nginx#crm configure order mysqd-after-mynfs mandatory: mynfs myip mysqld到此,集群服務配置完畢.接下來可以使用如下命令來查看各節點的工作狀態:#crm status註:將某項服務定義為集群服務,那麼該服務就不應該開機啟動. 本文出自 「Linux」 博客,請務必保留此出處http://wld6linux.blog.51cto.com/4356376/837708