Linux 高可用集羣解決方案

高可用性H.A.HighAvailability)指的是通過儘量縮短因日常維護操作(計劃)和突發的系統崩潰(非計劃)所導致的停機時間,以提高系統和應用的可用性,HA系統是目前企業防止核心計算機系統因故障停機的最有效手段。

HA的工作機制與框架

1,RAResouceAgent

CRM通信,啓動各個資源,資源包括可啓動的服務(如httpd,nginx)和不可啓動的如(IP地址),可以在資源級別進行監控

RA常見的RALSB(linuxStandardBase)linux標準庫,即/etc/rc.d/init.d/下的所有文件,OCFOpenClusterFramework)開放集羣框架,Stonith(斷掉誰的電,節點級別),fence(資源級別的)

2,DC(DesignatedCoordinator)指派協調員。協調集羣事務,是被推舉出來的,收集心跳信息,決定那個資源運行在哪個節點上

3,MessagingLayer:消息傳輸層,集羣的基礎架構層

負責傳遞心跳信息,管理成員關係

常見的消息傳輸層有:HeartbeatV1,V2,V3,Corosync,Cman

4,CRM集羣資源管理器,針對不同的MessagingLayer通常會有不同的CRM

接受上層委託與集羣的基礎架構層次通信,將不具備高可用的資源也可以高可用

Heatbeatv1---àharesouces

Heartbeatv2--àcrm(向下兼容haresouces

Heartbeatv3--àpacemaker(可以用於其他的MessagingLayer)

cmanàrgmanger

CRM可以對資源粘性和資源約束進行定義。

資源粘性:當前節點宕機,離線,修復後重新上線,資源還要不要回到原來節點。

資源約束:

位置約束(position),資源更傾向於在哪些節點

排列約束(collocation,資源和資源見的關係,是不是一個資源必須和另外一個資源同時運行在同一個節點

順序約束(order),資源啓動順序,資源關閉順序

轉移關係,RHCS中有故障轉移域,而對於其他的CRM有左對稱(白名單)或者右對稱黑名單)

LRM(LocalResouceManager)本地資源管理器。DC通知LRM搶佔或者放棄資源

下面,我們實現corosync+pacemaker+pcs還有Heartbeatv2+CRM+pcs實現高可用

node1.sysbo.net

172.16.11.12

節點1

node2,sysbo.net

172.16.11.8

節點2

node3.sysbo.net

172.16.11.9

節點3

ms.sysbo.net

172.16.11.10

管理節點(管理節點並無多大用處,只是使用ansible往各個節點發送信息)

Corosync+pacemaker+pcs(Centos6.4)

Prepare

1,保證3個節點使用主機名可以互相通信,並且主機名一定要和使用uname–n的結果一致,在/etc/hosts中添加以下幾行信息

172.16.11.8node2node2.sysbo.net

172.16.11.12node1node1.sysbo.net

172.16.11.9node3node3.sysbo.net

172.16.11.10msms.sysbo.net

[root@ms~]#ansibleall-a"uname-n"查看主機名,並且與/etc/hosts文件中保持一致,修改主機名在/etc/sysconfig/network中修改

2,設定管理節點和個節點可以使用互信的ssh進行通信

1
2
3
4
[root@ms ~]# ssh-keygen -t rsa
[root@ms ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1
[root@ms ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2
[root@ms ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node3

首先安裝Corosync

1
#ansible all -a "yum -y install corosync"

在節點上修改配置corosync的配置文件

1
2
3
[root@node1 corosync]# vim /etc/corosync/corosync.conf
[root@ms ~]# ssh node1
[root@node1 corosync]# vim /etc/corosync/corosync.conf

添加下面兩段代碼

1
2
3
4
5
6
7
8
service {
ver: 0
name: pacemaker //定義corosync的CRM爲pacemaker
}
aisexec {
uer:root
group:root
}

修改bindnetaddr後面的IP地址爲節點所在的網絡地址,並且定義組播地址

1
2
3
4
5
6
7
8
9
10
11
totem {
version: 2
secauth: off
threads: 0
interface {
ringnumber: 0
bindnetaddr: 172.16.0.0 //節點所在的網絡地址
mcastaddr: 226.94.1.1 //定義組播地址
mcastport: 5405 //組播地址端口
ttl: 1
}

節點間傳遞消息需要加密,我們使用corosync自帶工具生成一堆密鑰,發送公鑰給其他節點

啓動corosync

1
[root@ms ~]# ansible all -a 'service corosync start'

啓動之後

保證corosync的引擎啓動:

1
grep-e "Corosync Cluster Engine"-e "configuration file"/var/log/cluster/corosync.log

查看初始化成員節點通知是否正常發出:

1
grepTOTEM  /var/log/cluster/corosync.log

檢查啓動過程中產生的錯誤

1
grepERROR: /var/log/cluster/corosync.log | grep-vunpack_resources

檢查pacemaker是否正常啓動

1
greppcmk_startup /var/log/cluster/corosync.log

查看stonith設備

1
[root@node2 ~]# pcs stonith list

禁用STONITH設備(我們stonith設備)

1
[root@node2 ~]# pcs property set stonith-enabled=false

下面的命令我們可以查看集羣信息基礎庫,

1
[root@node2 ~]# pcs cluster cib

查看stonith設備是否被禁用掉了

1
2
[root@node2 ~]# pcs cluster cib |grep stonith
<nvpair name="stonith-enabled"value="false"id="cib-bootstrap-options-stonith-enabled"/>

Stonith確實被禁用了

查看資源代理的provider

1
[root@node3 ~]# pcs resource standards

查看某種provider所有的資源代理的列表

1
2
[root@node3 ~]# pcs resource agents lsb
[root@node3 ~]# pcs resource agents ocf:pacemaker

web集羣,創建IP地址資源

1
2
[root@node3 ~]# pcs resource create webip ocf:heartbeat:IPaddr ip=172.16.11.5 cidr_netmask=16 op monitor interval=30s
[root@node3 ~]# pcs resource create webserver lsb:httpd

定義資源約束

webipwebserver運行在同一節點

1
[root@node2 ~]# pcs constraint colocation add webserver webip INFINITY

順序約束,先啓動webip然後再啓動webserver

1
[root@node2 ~]# pcs constraint order webip then webserver

記得配置corosyncpacemaker開機自動啓動

1
2
[root@ms ~]# ansible all -a "chkconfig corosync on"
[root@ms ~]# ansible all -a "chkconfig pacemaker on"

禁用資源服務

1
[root@ms ~]# ansible all -a "chkconfig httpd off"

Heartbeatv2+CRM+hb_gui(centos6.4)

因爲heartbeatV2centos6.4中已經不再提供了,所以,我們使用src.rpm自己製作rpm包,我們總共需要一下四個包組,並且按照一下次序安裝,中間遇到衝突可以使用yum–e–nodeps軟件包名刪除,解決衝突

1
2
3
4
5
yum -y installPyXML net-snmp-libs libnet
rpm -ivh heartbeat-pils-2.1.4-12.el6.x86_64.rpm
rpm -ivh heartbeat-stonith-2.1.4-12.el6.x86_64.rpm
rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm
rpm -ivh heartbeat-gui-2.1.4-12.el6.x86_64.rpm

複製authkey/ha.d中,自己制定隨機數

1
cp/usr/share/doc/heartbeat-2.1.4/authkeys/etc/ha.d/

生成隨機數

1
# openssl rand -hex 8

authkeys中將自己生成的隨機數添加到裏面

1
2
auth 2
2 sha1 13a4fbcd94e01072

在節點上修改一下文件

1
[root@node1 ~]# vim /etc/ha.d/ha.cf

Heartbeat支持廣播,組播,還有單播

1
mcast eth0 225.0.0.98 694 1 0

修改爲你想要的組播地址

添加資源節點

1
2
3
node node1.sysbo.net
node node2.sysbo.net
node node3.sysbo.net

添加外部ping節點

1
ping172.16.0.1

使用CRM來做集羣資源管理

1
crm respawn

hacluster添加密碼啓動hb_gui,密碼爲hacluster的密碼

A142421391-42356.png

可以看到3個允許的節點,在裏面可以創建資源,定義約束關係,操作非常簡單,這裏我就不詳述了

A142423704-42357.png_small.png

最後一定要記住禁用資源開機啓動.

總結,實現高可用的解決方案有很多,我們可以從中選擇一種實現,其實瞭解了原理,所有的高可用軟件操作都變的非常簡單。



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