天天看點

corosync+pacemaker高可用簡介環境說明安裝配置故障遷移總結

簡介

  說到高可用,我們可能會用heartbeat和keepalived,也可能會用corosync+pacemaker,但他們之間有什麼差別呢?我們在此主要談下heartbeat和corosync+pacemaker之間的淵源。

  Heartbeat到了v3版本後,拆分為多個子項目,其中pacemaker就是拆分出來的資料總管。Heartbeat 3.0拆分之後的組成部分:為:

1.Heartbeat:将原來的消息通信層獨立為heartbeat項目,新的heartbeat隻負責維護叢集各節點的資訊以及它們之前通信,被稱為基礎元件;(注意與corosync差別)

2.cluster-glue相當于一個中間層,可以将heartbeat和crm(pacemaker)聯系起來,主要包含2個部分,LRM和STONITH;

3.Resource Agent:用來控制服務啟停,監控服務狀态的腳本集合,這些腳本将被LRM調用進而實作各種資源啟動、停止、監控等等。

4.Pacemaker也就是Cluster Resource Manager (簡稱CRM),用來管理整個HA的控制中心,用戶端通過pacemaker來配置管理監控整個叢集。它不能提供底層心跳資訊傳遞的功能,它要想與對方節點通信需要借助底層(新拆分的heartbeat或corosync)的心跳傳遞服務,将資訊通告給對方。

另,pacemaker管理資源的工具由指令行界面的crmsh、pcs和圖形化界面pygui、hawk等進行管理,我們使用pcs鍊進行資源管理。

  通過以上,我們了解了pacemaker的由來,下面我們再來看下叢集底層新拆分的heartbeat和corosync之間的差別:

1.配置檔案的版本管理:Heartbeat隻能為所有的資源配置一個主服務,而corosync則允許為不同的資源組配置不同的主服務

2.管理資源的靈活性:在corosync中,其會自行處理配置檔案的同步問題,heartbeat則無此功能

3.分組管理:Heartbeat隻支援2個節點,而corosync則支援多個節點的叢集,支援把資源進行分組,按照組進行資源的管理,設定主服務,自行進行啟停

4.配置複雜度:Heartbeat非常容易進行配置,第一次配置可能隻需要幾分鐘,而Corosync由于有一定的複雜度則需要一點耐心

  是以,一般來說都是選擇corosync來進行心跳的檢測,搭配pacemaker的資源管理系統來建構高可用的系統,下面我們就來介紹下corosync+pacemaker建構高可用系統。

環境說明

IP hostname 系統 VIP
10.10.10.60 pcmk-1 Centos7.2 10.10.10.62
10.10.10.61 pcmk-2 Centos7.2 10.10.10.62

注:為友善測試,兩台伺服器上都關閉防火牆及selinux

安裝配置

1.配置雙機信任

#配置雙機信任
#pcmk-1
ssh-keygen -t rsa
scp /root/.ssh/id_rsa.pub [email protected]:/root/.ssh/authorized_keys
#pcmk-2
ssh-keygen -t rsa
scp /root/.ssh/id_rsa.pub [email protected]:/root/.ssh/authorized_keys           

2.安裝叢集元件

#pcmk-1,pcmk-2
yum install -y pacemaker pcs psmisc policycoreutils-python           

安裝完畢後,會生成一個hacluster使用者,供叢集使用。

3.啟動pcs并設為開機啟動

pcs是pacemaker的指令行管理工具,用來管理同步各個節點的corosync的配置檔案

#pcmk-1,pcmk-2
systemctl start pcsd.service
systemctl enable pcsd.service
ln -s '/usr/lib/systemd/system/pcsd.service' '/etc/systemd/system/multi-user.target.wants/pcsd.service'           

4.為hacluster設定密碼

安裝元件生成的hacluster使用者,用來本地啟動pcs程序,是以我們需要設定密碼,每個節點的密碼相同。

#pcmk-1,pcmk-2
passwd hacluster
Changing password for user hacluster.
New password: 
Retype new password: 
Sorry, passwords do not match.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.           

5.驗證節點(在其中一個節點即可)

#pcmk-1或pcmk-2
[[email protected]1 ~]# pcs cluster auth pcmk-1 pcmk-2
Username: hacluster
Password: 
pcmk-2: Authorized
pcmk-1: Authorized           

6.生成corosync配置檔案(在其中一個節點即可)

#pcmk-1或pcmk-2
[[email protected]1 ~]# pcs cluster setup --name mycluster pcmk-1 pcmk-2
Shutting down pacemaker/corosync services...
Redirecting to /bin/systemctl stop  pacemaker.service
Redirecting to /bin/systemctl stop  corosync.service
Killing any remaining services...
Removing all cluster configuration files...
pcmk-1: Succeeded
pcmk-2: Succeeded
Synchronizing pcsd certificates on nodes pcmk-1, pcmk-2...
pcmk-2: Success
pcmk-1: Success

Restaring pcsd on the nodes in order to reload the certificates...
pcmk-2: Success
pcmk-1: Success           

以上建立一個名為mycluster叢集,生成并同步corosync配置檔案,生成的檔案為/etc/corosync/corosync.conf

注意:若在另一個節點生成需要重新驗證節點。

7.啟動叢集并設為自啟動(在其中一個節點即可)

#all參數會使每個節點都啟動,若沒有all則隻在本地生效
[root@pcmk-1 ~]# pcs cluster start --all
pcmk-1: Starting Cluster...
pcmk-2: Starting Cluster...

[root@pcmk-1 ~]# pcs cluster enable --all
pcmk-1: Cluster Enabled
pcmk-2: Cluster Enabled           

8.檢視叢集狀态

[[email protected]1 ~]# pcs cluster status
Cluster Status:
 Last updated: Fri Jan 15 10:05:43 2016     Last change: Fri Jan 15 09:56:15 2016 by hacluster via crmd on pcmk-2
 Stack: corosync
 Current DC: pcmk-2 (version 1.1.13-10.el7-44eb2dd) - partition with quorum
 2 nodes and 0 resources configured
 Online: [ pcmk-1 pcmk-2 ]

PCSD Status:
  pcmk-1: Online
  pcmk-2: Online           

其中Online表示pcmk-1,pcmk-2節點的兩個主機存活,pcsd status表示兩個節點上的pcsd程序存活。

9.檢視corosync相關狀态

[[email protected]1 ~]# corosync-cfgtool -s
Printing ring status.
Local node ID 1
RING ID 0
    id  = 10.10.10.60
    status  = ring 0 active with no faults
#檢驗corosync成員
[[email protected]1 ~]# corosync-cmapctl | grep members
runtime.totem.pg.mrp.srp.members.1.config_version (u64) = 0
runtime.totem.pg.mrp.srp.members.1.ip (str) = r(0) ip(10.10.10.60) 
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(10.10.10.61) 
runtime.totem.pg.mrp.srp.members.2.join_count (u32) = 1
runtime.totem.pg.mrp.srp.members.2.status (str) = joined
#檢查corosync狀态
[[email protected]1 ~]# pcs status corosync

Membership information
----------------------
    Nodeid      Votes Name
         1          1 pcmk-1 (local)
         2          1 pcmk-2           

10.檢視pacemaker程序

[[email protected] ~]# ps axf |grep pacemaker
22445 pts/0    S+     0:00          \_ grep --color=auto pacemaker
22105 ?        Ss     0:00 /usr/sbin/pacemakerd -f
22106 ?        Ss     0:00  \_ /usr/libexec/pacemaker/cib
22107 ?        Ss     0:00  \_ /usr/libexec/pacemaker/stonithd
22108 ?        Ss     0:00  \_ /usr/libexec/pacemaker/lrmd
22109 ?        Ss     0:00  \_ /usr/libexec/pacemaker/attrd
22110 ?        Ss     0:00  \_ /usr/libexec/pacemaker/pengine
22111 ?        Ss     0:00  \_ /usr/libexec/pacemaker/crmd           

11.檢視整個叢集所有元件的狀态

[[email protected]1 ~]# pcs status
Cluster name: mycluster
WARNING: no stonith devices and stonith-enabled is not false
Last updated: Fri Jan 15 10:10:59 2016      Last change: Fri Jan 15 09:56:15 2016 by hacluster via crmd on pcmk-2
Stack: corosync
Current DC: pcmk-2 (version 1.1.13-10.el7-44eb2dd) - partition with quorum
2 nodes and 0 resources configured

Online: [ pcmk-1 pcmk-2 ]

Full list of resources:


PCSD Status:
  pcmk-1: Online
  pcmk-2: Online

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled           

12.檢查配置檔案是否正确

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

為保證資料安全性,pacemaker預設啟動stonith,但是我們沒有配置stonith,是以報錯。我們先暫時禁用stonith,等會再配置stonith

#禁用stonith,再次檢查配置檔案正常
[root@pcmk-1 ~]# pcs property set stonith-enabled=false
[root@pcmk-1 ~]# crm_verify -L           

13.添加虛拟ip資源–vip(漂移ip)

[root@pcmk-1 heartbeat]# pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=10.10.10.62 cidr_netmask=32 op monitor interval=30s           

在這裡我們以10.10.10.62作為浮動IP,名字為ClusterIP 并且告訴叢集每30秒檢查它一次。

其中ocf: heartbeat:IPaddr2。這告訴Pacemaker三件事情,第一個部分ocf,指明了這個資源采用的标準(類型)以及在哪能找到它。第二個部分标明這個資源腳本的在ocf中的名字空間,在這個例子中是heartbeat。最後一個部分指明了資源腳本的名稱。

#運作下面的指令來獲得可用的資源
[root@pcmk-1 resource.d]# pcs resource standards
ocf
lsb
service
systemd
stonith
#運作下面的指令來獲得可用的ocf資源提供者
[root@pcmk-1 ~]# pcs resource providers
heartbeat
openstack
pacemaker
#如果你想看特定一個ocf資源提供者的所有可用資源代理
[root@pcmk-1 resource.d]# pcs resource agents ocf:heartbeat
CTDB
Delay
Dummy
Filesystem
IPaddr
IPaddr2
IPsrcaddr
LVM
MailTo
........           

14.檢視IP資源狀态

[[email protected]1 heartbeat]# pcs status
Cluster name: mycluster
Last updated: Fri Jan 15 10:38:04 2016      Last change: Fri Jan 15 10:37:58 2016 by root via cibadmin on pcmk-1
Stack: corosync
Current DC: pcmk-2 (version 1.1.13-10.el7-44eb2dd) - partition with quorum
2 nodes and 1 resource configured

Online: [ pcmk-1 pcmk-2 ]

Full list of resources:

 ClusterIP  (ocf::heartbeat:IPaddr2):   Started pcmk-1

PCSD Status:
  pcmk-1: Online
  pcmk-2: Online

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled           

ok,我們的IP資源已經可用,我們可以通過VIP進行通路某些應用了。

下面我們來模拟下故障遷移。

故障遷移

1.停掉pcmk-1節點

[[email protected]1 heartbeat]# pcs cluster stop pcmk-1
pcmk-1: Stopping Cluster (pacemaker)...
pcmk-1: Stopping Cluster (corosync)...
[[email protected]1 heartbeat]# pcs status
Error: cluster is not currently running on this node           

2.檢視VIP是否漂移到pcmk-2節點

[[email protected]2 ~]# pcs status
Cluster name: mycluster
Last updated: Fri Jan 15 10:42:41 2016      Last change: Fri Jan 15 10:37:59 2016 by root via cibadmin on pcmk-1
Stack: corosync
Current DC: pcmk-2 (version 1.1.13-10.el7-44eb2dd) - partition with quorum
2 nodes and 1 resource configured

Online: [ pcmk-2 ]
OFFLINE: [ pcmk-1 ]

Full list of resources:

 ClusterIP  (ocf::heartbeat:IPaddr2):   Started pcmk-2

PCSD Status:
  pcmk-1: Online
  pcmk-2: Online

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled           

其中pcmk-1節點已經offline,但是pcmk-1的pcsd程序還活着,是以為online,此時VIP已經漂移到pcmk-2

注意:當pcmk-1重新啟動後,會自動加入叢集中,但是vip不會再次漂移到pcmk-1;但是pacemaker老版本中,vip會重新漂移到恢複後的節點。

3.防止資源在節點恢複後遷移

資源在節點恢複後再遷移到原節點往往需要一點時間,此時會無法對外提供服務;當在資料庫間遷移時,會需要更長的時間。但是我們可以通過stickiness來解決,pacemaker預設所有節點的stickiness都為0,我們最通常更改預設情況下的stickiness就足夠了

[root@pcmk-1 ~]# pcs resource defaults resource-stickiness=100
[root@pcmk-1 ~]# pcs resource defaults
resource-stickiness: 100           

總結

  從cososync+pacemaker與未拆分heartbeat比,配置的确比較麻煩,但是從管理、擴充、應用等方面來說,前者還是非常友善的,沒有那麼多局限性;從長遠來看cososync+pacemaker是趨勢。

繼續閱讀