2015年11月1日日曜日

[CentOS7] Pacemaker に stonith を実装する(fence_xenapi)


前回までに リソースを登録して、Apacheクラスタ(Active/Standby)を構築しました。

今回は、stonith を実装します。 stonith については下記URLが参考になります。
私の検証環境は、XenServer6.5 の仮想マシンです。
XenServer用の fence デバイスを使って stonith を実装します。
環境は以下のとおり。
  • pm01(L81pm01): 10.1.0.71
  • pm02(L82pm02): 10.1.0.72
  • XenServerホスト(Dom0): 192.168.1.100


1.fence_xenapi の導入


pm01 と pm02 に fence_xenapi をインストールします。

fence_agent のパッケージをインストールします。
[root@pm01 ~]# yum install fence-agents-all
下記URLから fence_xenapi をダウンロードします。
ダウンロードしたファイルを、/usr/sbin/fence_xenapi に保存して、実行権限をつけます。
[root@pm01 ~]# vi /usr/sbin/fence_xenapi
[root@pm01 ~]# chmod 755 /usr/sbin/fence_xenapi
下記URLから XenAPI をダウンロードします。
ダウンロードしたファイルを、/usr/sbin/XenAPI.py に保存します。
[root@pm01 ~]# vi /usr/sbin/XenAPI.py
動作を確認します。
以下のように実行して、仮想マシンのステータスを表示できればOKです。
[root@pm01 ~]# fence_xenapi -l root -p <パスワード> -o status -s https://192.168.1.100 -n L80pm01
Status: ON

2.stonith の設定


pm01 をリブートする stonith を登録します。
相打ちにならないように delay を設定します。
[root@pm01 ~]# pcs stonith create fence_pm01 fence_xenapi session_url="https://192.168.1.100" action="reboot" login="root" passwd_script="/root/xs.pw" port="L80pm01" delay=15 pcmk_host_list=pm01 pcmk_host_check=static-list pcmk_host_map="" op monitor interval=60s
pm02 をリブートする stonith を登録します。
[root@pm01 ~]# pcs stonith create fence_pm02 fence_xenapi session_url="https://192.168.1.100" action="reboot" login="root" passwd_script="/root/xs.pw" port="L81pm02" pcmk_host_list=pm02 pcmk_host_check=static-list pcmk_host_map="" op monitor interval=60s
stonith では、自ノードをリブートしない。相手をリブートするようにします。
fence_pm01 を pm01 以外で起動するように設定します。
[root@pm01 ~]# pcs constraint location fence_pm01 prefers pm01="-INFINITY"
fence_pm02 を pm02 以外で起動するように設定します。
[root@pm01 ~]# pcs constraint location fence_pm02 prefers pm02="-INFINITY"
stonith を有効にします。
[root@pm01 ~]# pcs property set stonith-enabled=true
状態を確認します。
[root@pm01 ~]# pcs status
Cluster name: cluster_test
Last updated: Sun Nov  1 16:52:16 2015          Last change: Sun Nov  1 14:49:56 2015 by root via cibadmin on pm02
Stack: corosync
Current DC: pm01 (version 1.1.13-a14efad) - partition with quorum
2 nodes and 7 resources configured

Online: [ pm01 pm02 ]

Full list of resources:

 Resource Group: WebGroup
     vipcheck_res       (ocf::myres:VIPCheck):  Started pm01
     vip_res    (ocf::heartbeat:IPaddr2):       Started pm01
     httpd_res  (ocf::heartbeat:apache):        Started pm01
 Clone Set: ping-clone [ping]
     Started: [ pm01 pm02 ]
 fence_pm01     (stonith:fence_xenapi): Started pm02
 fence_pm02     (stonith:fence_xenapi): Started pm01

PCSD Status:
  pm01: Online
  pm02: Online

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

3.動作確認


手動でフェンシングを発動します。
以下のように実行して pm02 がリブートされたらOKです。
[root@pm01 ~]# stonith_admin --reboot pm02

ハートビートを遮断してみます。
pm01 で以下のように実行します。
[root@pm01 ~]# iptables -I INPUT -p all -j DROP -s 10.1.0.72
pm02 がリブートされます。
[root@pm01 ~]# pcs status
Cluster name: cluster_test
Last updated: Sun Nov  1 16:57:43 2015          Last change: Sun Nov  1 14:49:56 2015 by root via cibadmin on pm02
Stack: corosync
Current DC: pm01 (version 1.1.13-a14efad) - partition with quorum
2 nodes and 7 resources configured

Node pm02: UNCLEAN (offline)
Online: [ pm01 ]

Full list of resources:

 Resource Group: WebGroup
     vipcheck_res       (ocf::myres:VIPCheck):  Started pm01
     vip_res    (ocf::heartbeat:IPaddr2):       Started pm01
     httpd_res  (ocf::heartbeat:apache):        Started pm01
 Clone Set: ping-clone [ping]
     ping       (ocf::pacemaker:ping):  Started pm02 (UNCLEAN)
     Started: [ pm01 ]
 fence_pm01     (stonith:fence_xenapi): Started pm02 (UNCLEAN)
 fence_pm02     (stonith:fence_xenapi): Started pm01

PCSD Status:
  pm01: Online