1. 程式人生 > >CENTOS7構建HA叢集

CENTOS7構建HA叢集

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,兩邊一樣。

[[email protected]

~]# 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

Username:hacluster

Password:

node01:Authorized

node02:Authorized

出現以下顯示錶示認證成功。

[[email protected]~]# pcs cluster auth node01 node02

node01:Already authorized

node02:Already authorized

各節點之間時間同步

在node1和node2分別進行時間同步,可以使用ntp實現。

[[email protected] ~]# ntpdate 172.16.0.1//172.16.0.1 為時間伺服器(若無時間伺服器手動調整時間也可以)

三、叢集建立

以nascluster為本叢集的名稱。

[[email protected] ~]# 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.confcorosync的配置檔案,cib.xmlpacemaker的配置檔案。這兩個配置檔案是叢集的核心配置,重灌系統時建議做好這兩個配置檔案的備份

開啟叢集

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

檢視叢集狀態

[[email protected] ~]# 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

檢視叢集成員

[[email protected] ~]# 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

檢視成員資訊

[[email protected] ~]# pcs status corosync

Membership information

----------------------

   Nodeid      Votes Name

        1          1 node01 (local)

        2          1 node02

檢視XML

[[email protected] ~]# pcs cluster cib

檢查配置檔案,發現提示沒有STONITH裝置。

[[email protected] ~]# 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上檢視狀態

[[email protected] ~]# 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

四、建立GFS2檔案系統

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通過分層機制,可以實現多個鎖空間的並行鎖模式。

檢視狀態

[[email protected] 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

五、stonith配置

檢視本系統支援的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配置認證。

[[email protected] ~]# pcs cluster auth test01 test02

Username: hacluster

Password:

test01: Authorized

test02: Authorized

出現以下顯示錶示認證成功。

[[email protected] ~]# 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為例:

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將控制權還給叢集