CENTOS7 上支持的RHCS組件包主要有cman(心跳管理)、luci+ricci(配置工具)、rgmanager(資源管理),通過圖形化配置相當簡單,但是自CENTOS7開始,系統已經不再集成RHCS套件,并且在rpmfind上找不到支持centos7的RHCS組件包,在CENTOS7中默認采用corosync(心跳管理)、pacemaker(資源管理)、pcs(配置工具)同樣可以構建HA集群,配置方法較之前有很大區別,但是原理相似。
yum -y install corosync pacemaker *pcs* *fence* gfs2*
1.1、修改名稱
hostnamectl set-hostname node01
1.2兩臺機器修改關閉防火墻、SElinux、配置ip、修改HOSTS
禁止防火墻和selinux
# systemctl disable firewalld
# systemctl stop firewalld
修改/etc/sysconfig/selinux
確保SELINUX=disabled,然后執行setenforce 0 或者reboot服務器以生效
設置防火墻規則(如果關閉防火墻則不用配置)
# firewall-cmd --permanent--add-service=high-availability
# firewall-cmd--add-service=high-availability
配置IP地址及網關、DNS
vi /etc/sysconfig/network-scripts/ifcfg-eth0#編輯配置文件,添加修改以下內容
BOOTPROTO=static #啟用靜態IP地址
ONBOOT=yes #開啟自動啟用網絡連接
IPADDR=192.168.102.1 #設置IP地址
NETMASK=255.255.255.0 #設置子網掩碼
GATEWAY=192.168.102.250 #設置網關
DNS1=8.8.8.8 #設置主DNS
DNS2=8.8.4.4 #設置備DNS
IPV6INIT=no #禁止IPV6
配置HOSTS,兩邊一樣。
[root@node01 ~]# cat /etc/hosts
192.168.102.1 node01
192.168.102.2 node02
192.168.102.10 vip #集群IP
兩臺機器啟動PCSD
systemctl start pcsd.service
systemctl enable pcsd.service
兩臺機器passwd hacluster
輸入同一個密碼hacluster
配置節點之間的相互認證
pcs cluster auth node01 node02
[root@node01 ~]# pcscluster auth node01 node02
Username:hacluster
PassWord:
node01:Authorized
node02:Authorized
出現以下顯示表示認證成功。
[root@node02~]# pcs cluster auth node01 node02
node01:Already authorized
node02:Already authorized
各節點之間時間同步
在node1和node2分別進行時間同步,可以使用ntp實現。
[root@node1 ~]# ntpdate 172.16.0.1//172.16.0.1 為時間服務器(若無時間服務器手動調整時間也可以)
以nascluster為本集群的名稱。
[root@node01 ~]# pcs cluster setup --namenascluster node01 node02
Shutting down pacemaker/corosyncservices...
Redirecting to /bin/systemctl stop pacemaker.service
Redirecting to /bin/systemctl stop corosync.service
Killing any remaining services...
Removing all cluster configuration files...
node01: Succeeded
node02: Succeeded
pcs在執行以上命令時會生產corosync.conf及修改cib.xml文件,corosync.conf問corosync的配置文件,cib.xml為pacemaker的配置文件。這兩個配置文件是集群的核心配置,重裝系統時建議做好這兩個配置文件的備份。
開啟集群
pcs cluster start --all 開啟集群
pcs cluster enable --all 設置集群自動啟動
pcs cluster status 查看集群狀態
當有半數以上的節點在線時,這個集群就認為自己擁有法定人數了,是“合法”的,換而言之就是下面的公式: total_nodes < 2 * active_nodes,也就是說假設集群中有4個節點,但是活動節點有3個,4<2*3,即是合法的集群,如果活動節點有2個,4=2*2不能滿足total_nodes < 2 * active_nodes了,這個集群就非法了。
因此在雙節點的集群中只有當兩者都在線時才是合法的的這個規則會讓“雙節點集群”毫無意義,但是我們可以控制Pacemaker發現集群達不到法定人數時候的行為。簡單來說,我們告訴集群忽略它。
在兩個節點的情況下設置以下值
pcs property set no-quorum-policy=ignore
集群故障時候服務遷移
pcs resource defaults migration-threshold=1
查看集群狀態
[root@node01 ~]# pcs cluster status
Cluster Status:
Lastupdated: Tue Sep 16 06:35:31 2014
Lastchange: Tue Sep 16 06:35:24 2014 via crmd on node02
Stack: corosync
Current DC: node02 (2) - partition with quorum
Version: 1.1.10-29.el7-368c726
2Nodes configured
0Resources configured
PCSD Status:
node01: Online
node02: Online
查看集群成員
[root@node01 ~]# corosync-cmapctl |grepmembers
runtime.totem.pg.mrp.srp.members.1.config_version(u64) = 0
runtime.totem.pg.mrp.srp.members.1.ip (str)= r(0) ip(192.168.102.1)
runtime.totem.pg.mrp.srp.members.1.join_count(u32) = 1
runtime.totem.pg.mrp.srp.members.1.status(str) = joined
runtime.totem.pg.mrp.srp.members.2.config_version(u64) = 0
runtime.totem.pg.mrp.srp.members.2.ip (str)= r(0) ip(192.168.102.2)
runtime.totem.pg.mrp.srp.members.2.join_count(u32) = 1
runtime.totem.pg.mrp.srp.members.2.status(str) = joined
查看成員信息
[root@node01 ~]# pcs status corosync
Membership information
----------------------
Nodeid Votes Name
1 1 node01 (local)
2 1 node02
查看XML
[root@node01 ~]# pcs cluster cib
檢查配置文件,發現提示沒有STONITH設備。
[root@node01 ~]# crm_verify -L -V
error: unpack_resources: Resource start-up disabled since no STONITH resources have been defined
error: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option
error: unpack_resources: NOTE:Clusters with shared data need STONITH to ensure data integrity
Errors found during check: config not valid
暫時關閉stonish,后面再詳細講講stonish的配置。
pcs property set stonith-enabled=false
配置集群IP
pcs resource create vipocf:heartbeat:IPaddr2 ip=192.168.102.10 cidr_netmask=24 op monitor interval=30s
vip為自定義的一個集群IP的名稱,監控時間為30S。
測試浮動IP地址在集群中能否正常切換:
停node01的集群服務pcs cluster stop node01
在node02上查看狀態
[root@node02 ~]# pcs status
Cluster name: nascluster
Last updated: Tue Sep 16 07:28:33 2014
Last change: Tue Sep 16 07:26:41 2014 viacibadmin on node01
Stack: corosync
Current DC: node02 (2) - partition withquorum
Version: 1.1.10-29.el7-368c726
2 Nodes configured
1 Resources configured
Online: [ node02 ]
OFFLINE: [ node01 ]
Full list of resources:
vip (ocf::heartbeat:IPaddr2): Started node02 ##此條表示vip在node02上執行了
PCSD Status:
node01: Online
node02: Online
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/disabled
在node01恢復后,為防止node02資源遷回node01(遷來遷去對還是會對業務有一定影響)
pcs resource defaultsresource-stickiness=100
pcs resource defaults
mkfs.gfs2 -p lock_dlm -j 2 -tnascluster:nas /dev/my_vg/gfsdata
配置dlm鎖監控時間
pcs cluster cib dlm_cfg ##由于cib.xml非常重要,為避免出錯不建議直接修改,故生產一個dlm_cfg文件,將配置寫入dlm_cfg文件后,再將dlm_cfg寫入cib.xml中。
pcs -f dlm_cfg resource create dlmocf:pacemaker:controld op monitor interval=60s
pcs -f dlm_cfg resource clone dlmclone-max=2 clone-node-max=1
pcs -f dlm_cfg resource show
pcs cluster cib-push dlm_cfg
普及一下dlm鎖的知識:
DistributedLock Manager,簡稱DLM,是一個分布式鎖管理器,它是RHCS的一個底層基礎構件,同時也為集群提供了一個公用的鎖運行機制。DLM運行在每個節點上,GFS通過鎖管理器的機制來同步訪問文件系統的元數據。CLVM通過鎖管理器來同步更新數據到LVM卷和卷組。 DLM不需要設定鎖管理服務器,它采用對等的鎖管理方式,大大提高了處理性能。同時,DLM避免了單個節點失敗需要整體恢復的性能瓶頸。另外,DLM的請求是本地的,不需要網絡請求,因此請求會立即生效。最后,DLM通過分層機制,可以實現多個鎖空間的并行鎖模式。
查看狀態
[root@node01 nas]# pcs status
Cluster name: nascluster
Last updated: Tue Sep 16 07:48:09 2014
Last change: Tue Sep 16 07:44:08 2014 viacibadmin on node01
Stack: corosync
Current DC: node02 (2) - partition with quorum
Version: 1.1.10-29.el7-368c726
2 Nodes configured
3 Resources configured
Online: [ node01 node02 ]
Full list of resources:
vip (ocf::heartbeat:IPaddr2): Started node02
Clone Set: dlm-clone [dlm]
Started: [ node01 node02 ] ##DLM的狀態
PCSD Status:
node01: Online
node02: Online
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
查看本系統支持的fence設備
pcs stonith list
查看即將要使用的fence設備相關信息
pcs stonith describe fence_ilo4
由于服務器是HP DL380 GEN8的,支持ILO4,但是在實際配置中采用fence_ilo4卻發現怎么也不通,man fence_ilo4發現fence_ipmilan也可以配置ilo4的FENCE設備,但是必須要加lanplus="true"參數。
pcs cluster cib stonith_cfg ##生產初始配置文件stonith_cfg
pcs -f stonith_cfg stonith create ipmi-fence-node01fence_ipmilan parms lanplus="true" pcmk_host_list="node01" pcmk_host_check="static-list"action="reboot" ipaddr="192.168.103.1" login=USERIDpasswd=password op monitor interval=60s
pcs -f stonith_cfg stonith create ipmi-fence-node02fence_ipmilan parms lanplus="true" pcmk_host_list="node02" pcmk_host_check="static-list"action="reboot" ipaddr="192.168.103.2" login=USERIDpasswd=password op monitor interval=60s
解釋:創建一個名為ipmi-fence-node01的fence設備名稱用于建node01的fence,pcmk_host_check="static-list"的功能是將node01與192.168.103.1對應,后面login=USERIDpasswd=password op monitor interval=60s不再解釋。
pcs -f stonith_cfg stonith
檢查stonith_cfg中stonith配置信息
pcs -f stonith_cfg property setstonith-enabled=true 上文關閉了stonish,現在開啟stonish
pcs property set stonith-enabled=true
pcs -f stonith_cfg property
檢查stonith_cfg中stonith是否已經開啟
pcs cluster cib-push stonith_cfg 將stonith_cfg寫入cib.xml
node02上測試FENCE是否成功stonith_admin--reboot node01
node01上測試FENCE是否成功stonith_admin--reboot node02
pcs cluster standbynode01 將node01業務VIP遷移到node02上測試集群是否正常。(手動切換)
在集群所有節點重啟后發現gfs的文件系統無法自動掛載,定義了fstab也不行,經過分析發現系統開機時候執行了pcs cluster start,而且很快就返回啟動成功的結果,但是系統日志里面顯示仍然還啟動完成,考慮到系統進入系統之后集群有可能還沒啟動完成,所有自然無法掛載gfs的文件系統。
如果無法自動掛載,我自己編寫了一個循環掛載的腳本。供參考。
編輯腳本
mountnas.sh
#!/bin/bash
i=1
while(($i<50))
do
mount |grep nas
if [ $? = 1 ];then mount /dev/my_vg/gfsdata/nas
else exit
fi
sleep 3
done
chmod 777 /etc/rc.local centos7 還需要給rc.local加個權限,要不然開機不會執行rc.local
在/etc/rc.local
加入bash /mountnas.sh
在rhcs中,可以配置多路心跳,一路將fence作為心跳,一路將網絡作為心跳,在corosync pacemaker的集群中,找了國內外很多技術文章,均未做相關描述的。主要是因為corosync pacemaker的集群相對來說已經很可靠,在未配置多路心跳之前將業務網卡DOWN后,發現 node02的集群馬上失效,集群IP立即切換至node01上,未出現腦裂的情況。
作為自己研究,嘗試了再配置了一個心跳。
在/etc/corosync.conf中,畢竟corosync管理心跳,所以只有在它里面想辦法了,在centos7之前的corosync.conf配置中,會定義interface {}作為多個網絡,但是在centos7中經過PCS統一管理后,經過測試發現pacemaker只認nodelist{}作為網絡,難道這又是一個變動?
在totem {}
定義:
rrp_mode: passive #默認為none,修改為passive才可以支持兩個網段
nodelist {
node{
ring0_addr:node01
ring0_addr:test01 -test01為第二個心跳
}
node{
ring0_addr:node02
ring0_addr:test02 -test02為第二個心跳
}
}
記得修改host表。
重啟集群即可生效,目前node01,node02對應192.168.102.0網段,test01 test02對應192.168.103.0網段,同時可以在192.168.103.0網段上再新建一個業務IP,
在配置集群IP之前需要對test01 test02配置認證。
[root@node01 ~]# pcs cluster auth test01 test02
Username: hacluster
Password:
test01: Authorized
test02: Authorized
出現以下顯示表示認證成功。
[root@node02 ~]# pcs cluster auth test01 test02
test01: Already authorized
test02: Already authorized
配置集群IP
pcs resource create testipocf:heartbeat:IPaddr2 ip=192.168.103.10 cidr_netmask=24 op monitor interval=30s 注意testip與上文的vip已經名字不一樣,兩個集群IP的名字不能一致。
以apache為例:
apache安裝過程略。
pcs resource create webocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.confstatusurl="http://localhost/server-status" op monitor interval=1min
pcs status查看apache狀態,
pcs resource group add httpd(組名稱) vip web
pcs constraint colocation add Web vipINFINITY 將apache與vip綁定在同一個節點上。
pcs constraint order vip then Web,指定集群IP先啟動,然后再啟動apache
pcs constraint location Web prefers node01=200指定node01優先啟動apache
crm_simulate -sL 查看資源黏性值,集群業務優先在資源黏性值高的節點上運行。
Current cluster status:
Online: [ node01 node02]
vip (ocf:heartbeat:IPaddr2): Started node01
Web (ocf:heartbeat:apache): Started node01
Allocation scores:
native_color: vip allocation score on node01:200
native_color: vip allocation score on node02:50
native_color: Web allocation score on node01:200
native_color: Web allocation score on node02:50
Transition Summary:
手動切換集群資源
以上配置由集群自動分配資源到node01、node02上,有時候為了維護,必須手動遷移資源到指定節點上。
# pcs constraint location Web prefers node01=INFINITY
# pcs constraint --full 查看資源狀態
# pcs constraint remove location-Web-node01-INFINITY將控制權還給集群
新聞熱點
疑難解答