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

[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.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

查看集羣狀態

[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

 

 

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

查看狀態

[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

 

五、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配置認證。

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

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