LXDコンテナ上でPacemakerを使って仮想IPとApacheのアクティブ・パッシブ・クラスタを試してみた

Cluster Labs - Pacemaker Documentation の "Pacemaker 1.1 for Corosync 2.x and pcs" の "Clusters from Scratch (en-US)" を参考にしつつ、多少手順を変更して試してみました。

実験用コンテナの環境構築

コンテナの作成

LXDのdnsmasqの固定IP設定をSIGHUPで更新する · hnakamur's blog at github の手法を使って、2つのコンテナ用のIPアドレスを設定しておきます。

lxdhost:~$ cat /var/lib/lxd-bridge/dhcp-hosts 
pcmk-1,10.155.92.101
pcmk-2,10.155.92.102

また、仮想IPとして 10.155.92.100 を使用しますので、 /var/lib/lxd-bridge/dnsmasq.lxdbr0.leases で使われていないことを確認しておきます。

sudo kill -HUP `cat /var/run/lxd-bridge/dnsmasq.pid`

で設定を dnsmasq に反映します。

なお、 2.1.3. Configure Network の "Important" の囲み部分によるとDHCPはcorosyncと干渉するので、 クラスタのマシンはDHCPを決して使うべきではない そうです。この記事はあくまでPacemakerの使い方を把握するために試してみるだけなので気にしないことにしますが、実運用の際には DHCP を使わない構成にする必要があります。

以下のコマンドでコンテナ pcmk-1pcmk-2 を作成します。

lxdhost:~$ lxc launch images:centos/7/amd64 pcmk-1
lxdhost:~$ lxc launch images:centos/7/amd64 pcmk-2

コンテナ内の /etc/hosts 設定

端末を2つ開いて lxc exec pcmk-1 bashlxc exec pcmk-2 bash を実行し、それぞれ環境構築していきます。

まず、コンテナ作成直後の pcmk-1/etc/hosts を確認すると以下のようになっていました。

127.0.0.1   localhost
127.0.1.1   pcmk-1

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

当初 pcmk-1 ではIPv4の部分を

127.0.0.1   localhost
127.0.1.1   pcmk-1
10.155.92.102 pcmk-2

と変更し、 pcmk-2 では

127.0.0.1   localhost
127.0.1.1   pcmk-2
10.155.92.101 pcmk-1

と変更してみたのですが、Pacemakerがうまく動かなかったようです(要追試)。

pcmk-1pcmk-2/etc/hosts の IPv4 部分を以下のコマンドで変更したら、うまくいったので、とりあえずこれで試しました。

# cat > /etc/hosts <<'EOF'
127.0.0.1   localhost

10.155.92.101   pcmk-1
10.155.92.102   pcmk-2

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
EOF

Pacemakerのインストール

pcmk-1pcmk-2 で以下のコマンドを実行します。

# yum -y update
# yum -y install pacemaker pcs psmisc policycoreutils-python which

whichは仮想IPを使うための ocf:heartbeat:IPaddr2 のリソース用の resource agent スクリプト /usr/lib/ocf/resource.d/heartbeat/IPaddr2 で必要となります。

pcsd サービスを起動し、OS起動時に自動起動するようにします。

# systemctl start pcsd
# systemctl enable pcsd

クラスタを作成して仮想IPの作成・移動実験

クラスタの作成と開始

hacluster のパスワードを設定します。ここでは password という値にしていますが適宜変更してください。

# echo password | passwd --stdin hacluster

ここから先は pcmk-1 だけでコマンドを実行します。 -p の値は上で設定したパスワードに合わせてください。

# pcs cluster auth pcmk-1 pcmk-2 -u hacluster -p password
# pcs cluster setup --name mycluster pcmk-1 pcmk-2

この時点で /etc/corosync/corosync.conf が作られます。

以下のコマンドでクラスタを開始します。

# pcs cluster start --all

起動してすぐにステータスを確認すると Node の行が UNCLEAN (offline) になりました。

[root@pcmk-1 ~]# pcs status
Cluster name: mycluster
WARNING: no stonith devices and stonith-enabled is not false
Last updated: Thu Aug 11 15:55:17 2016          Last change: Thu Aug 11 15:55:16 2016 by hacluster via crmd on pcmk-1
Stack: unknown
Current DC: NONE
2 nodes and 0 resources configured

Node pcmk-1: UNCLEAN (offline)
Node pcmk-2: UNCLEAN (offline)

Full list of resources:


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

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

しばらくしてから再度ステータスを確認すると pcmk-1 も pcmk-2 も Online になっていました。

# pcs status
Cluster name: mycluster
WARNING: no stonith devices and stonith-enabled is not false
Last updated: Thu Aug 11 15:56:41 2016          Last change: Thu Aug 11 15:55:37 2016 by hacluster via crmd on pcmk-2
Stack: corosync
Current DC: pcmk-2 (version 1.1.13-10.el7_2.4-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/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

STONITHを無効化

Chapter 5. Create an Active/Passive Clusterの手順でクラスタの設定エラーを確認します。

# 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 を無効にします。無効にしたあと設定エラーを再度確認すると、今度はエラーが無くなりました。

# pcs property set stonith-enabled=false
# crm_verify -L -V

なお、 Chapter 5. Create an Active/Passive Cluster の最後の Warning にもある通り、 実運用では STONITH を無効にするのは全く不適切 とのことなので、きちんと設定する必要があります。 STONITH についての説明は上記の Warning の囲み内からもリンクされている Chapter 8. Configure STONITH を参照してください。

仮想IPアドレス用のリソース作成

pcmk-1 で以下のコマンドを実行して、仮想IPアドレス 10.155.92.100 用のリソースを作成します。

# pcs resource create ClusterIP ocf:heartbeat:IPaddr2 \
    ip=10.155.92.100 cidr_netmask=32 op monitor interval=30s

数秒してから状態を確認してみます。

# pcs status
Cluster name: mycluster
Last updated: Thu Aug 11 16:04:50 2016          Last change: Thu Aug 11 16:04:47 2016 by root via cibadmin on pcmk-1
Stack: corosync
Current DC: pcmk-2 (version 1.1.13-10.el7_2.4-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/disabled
  pacemaker: active/disabled
  pcsd: active/enabled
# pcs resource --full
 Resource: ClusterIP (class=ocf provider=heartbeat type=IPaddr2)
  Attributes: ip=10.155.92.100 cidr_netmask=32 
  Operations: start interval=0s timeout=20s (ClusterIP-start-interval-0s)
              stop interval=0s timeout=20s (ClusterIP-stop-interval-0s)
              monitor interval=30s (ClusterIP-monitor-interval-30s)

ip コマンドを実行して、仮想IPアドレスが pcmk-1 側についており pcmk-2 側にはついていないことを確認します。

[root@pcmk-1 ~]# ip a s eth0
120: eth0@if121: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 00:16:3e:e6:fb:ab brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.155.92.101/24 brd 10.155.92.255 scope global dynamic eth0
       valid_lft 3203sec preferred_lft 3203sec
    inet 10.155.92.100/32 brd 10.155.92.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::216:3eff:fee6:fbab/64 scope link 
       valid_lft forever preferred_lft forever
[root@pcmk-2 ~]# ip a s eth0
122: eth0@if123: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 00:16:3e:4b:6d:b1 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.155.92.102/24 brd 10.155.92.255 scope global dynamic eth0
       valid_lft 3560sec preferred_lft 3560sec
    inet6 fe80::216:3eff:fe4b:6db1/64 scope link 
       valid_lft forever preferred_lft forever

pcmk-1 をクラスタから離脱させて仮想IPアドレスが pcmk-2 に移動するか確認

以下のコマンドで pcmk-1 をクラスタから離脱させます。

[root@pcmk-1 ~]# pcs cluster stop pcmk-1
pcmk-1: Stopping Cluster (pacemaker)...
pcmk-1: Stopping Cluster (corosync)...

pcmk-1 で状態を確認すると以下のようになります。

[root@pcmk-1 ~]# pcs status
Error: cluster is not currently running on this node

pcmk-2 で状態を確認すると以下のようになります。 pcmk-1OFFLINE となっていますが、 pcsd は動いているので PCSD Status のほうは Online のままです。

[root@pcmk-2 ~]# pcs status
Cluster name: mycluster
Last updated: Thu Aug 11 16:10:04 2016          Last change: Thu Aug 11 16:04:47 2016 by root via cibadmin on pcmk-1
Stack: corosync
Current DC: pcmk-2 (version 1.1.13-10.el7_2.4-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/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

ip コマンドを実行して、仮想IPアドレスが pcmk-2 側についており pcmk-1 側にはついていないことを確認します。

[root@pcmk-1 ~]# ip a s eth0
120: eth0@if121: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 00:16:3e:e6:fb:ab brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.155.92.101/24 brd 10.155.92.255 scope global dynamic eth0
       valid_lft 3024sec preferred_lft 3024sec
    inet6 fe80::216:3eff:fee6:fbab/64 scope link 
       valid_lft forever preferred_lft forever
[root@pcmk-2 ~]# ip a s eth0
122: eth0@if123: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether 00:16:3e:4b:6d:b1 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.155.92.102/24 brd 10.155.92.255 scope global dynamic eth0
       valid_lft 3385sec preferred_lft 3385sec
    inet 10.155.92.100/32 brd 10.155.92.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::216:3eff:fe4b:6db1/64 scope link 
       valid_lft forever preferred_lft forever

pcmk-1 をクラスタに復帰させる

以下のコマンドで pcmk-1 をクラスタに復帰させます。

[root@pcmk-1 ~]# pcs cluster start pcmk-1
pcmk-1: Starting Cluster...

状態を確認してみると、仮想IP は pcmk-2 のほうについたままです。 5.3. Perform a Failover の最後の Note によると Pacemakerのより古いバージョンでは pcmk-1 のほうに切り替わっていたそうですが、挙動が変更されたとのことです。

[root@pcmk-1 ~]# pcs status
Cluster name: mycluster
Last updated: Thu Aug 11 16:12:35 2016          Last change: Thu Aug 11 16:04:47 2016 by root via cibadmin on pcmk-1
Stack: corosync
Current DC: pcmk-2 (version 1.1.13-10.el7_2.4-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-2

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

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

以下のコマンドを実行して、仮想IPを pcmk-1 のほうに移動します。

pcs cluster stop pcmk-2 && pcs cluster start pcmk-2

ApacheのActive/Passiveクラスタを作って仮想IPと連動させる

リソースのスティッキネスのデフォルト値を設定

5.4. Prevent Resources from Moving after Recovery を見て設定します。

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

Apache のインストールと設定

pcmk-1pcmk-2 で以下のコマンドを実行します。

# yum -y install httpd wget
# mkdir -p /var/www/html /var/log/httpd
# cat > /var/www/html/index.html <<EOF
<html>
<body>My Test Site - $(hostname)</body>
</html>
EOF
# cat > /etc/httpd/conf.d/status.conf <<'EOF'
<Location /server-status>
  SetHandler server-status
  Require ip 127.0.0.1
</Location>
EOF

Apache の Active/Passive クラスタ作成

pcmk-1pcmk-2 のどちらか一方で以下のコマンドを実行します。 公式のドキュメントでは、 pcmk-2 で開始した後、制約を追加しただけでは pcmk-1 に移動しないというデモをしていますが、ここでは --disabled つきでリソースを作成後、制約を追加してから有効化することで最初から pcmk-1 で開始させています。

また、制約を追加するごとに crm_simulate -sL を実行してリソースをどのノードに割り当てるかのスコアを確認しています。

まず WebSite という名前のリソースを disabled 状態で作成します。

# pcs resource create WebSite ocf:heartbeat:apache \
    configfile=/etc/httpd/conf/httpd.conf \
    statusurl="http://localhost/server-status" \
    op monitor interval=3s on-fail=restart \
    --disabled

WebSite リソースは ClusterIP リソースと同じノードで動かすという制約を追加します。

# pcs constraint colocation add WebSite with ClusterIP INFINITY
# crm_simulate -sL

Current cluster status:
Online: [ pcmk-1 pcmk-2 ]

 ClusterIP      (ocf::heartbeat:IPaddr2):       Started pcmk-1
 WebSite        (ocf::heartbeat:apache):        (target-role:Stopped) Stopped

Allocation scores:
native_color: ClusterIP allocation score on pcmk-1: 100
native_color: ClusterIP allocation score on pcmk-2: 0
native_color: WebSite allocation score on pcmk-1: -INFINITY
native_color: WebSite allocation score on pcmk-2: -INFINITY

Transition Summary:

リソースの開始順序を ClusterIP、 WebSite にする制約を追加します。

# pcs constraint order ClusterIP then WebSite

WebSite のリソースをなるべく pcmk-1 側で動かすようにする制約を追加します。 250 という値はこの後の操作を一度試行錯誤してみて適当に選びましたが、希望通りの動作が実現できさえすれば違う値でも構いません。

# pcs constraint location WebSite prefers pcmk-1=250
# crm_simulate -sL

Current cluster status:
Online: [ pcmk-1 pcmk-2 ]

 ClusterIP      (ocf::heartbeat:IPaddr2):       Started pcmk-1
 WebSite        (ocf::heartbeat:apache):        (target-role:Stopped) Stopped

Allocation scores:
native_color: ClusterIP allocation score on pcmk-1: 350
native_color: ClusterIP allocation score on pcmk-2: 0
native_color: WebSite allocation score on pcmk-1: -INFINITY
native_color: WebSite allocation score on pcmk-2: -INFINITY

Transition Summary:

希望する制約を一通り追加したので、 WebSite リソースを稼働開始します。

# pcs resource enable WebSite
# crm_simulate -sL

Current cluster status:
Online: [ pcmk-1 pcmk-2 ]

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

Allocation scores:
native_color: ClusterIP allocation score on pcmk-1: 450
native_color: ClusterIP allocation score on pcmk-2: 0
native_color: WebSite allocation score on pcmk-1: 350
native_color: WebSite allocation score on pcmk-2: -INFINITY

Transition Summary:

pcmk-1pcmk-2ps auxww | grep httpd すると pcmk-1 側で Apache が稼働して pcmk-2 側では稼働していないことを確認できます。

手動で制約を調整して仮想IPとApacheを pcmk-2 に移動する

以下のコマンドで制約を調整し、移動が完了するまでのスコアの変遷を確認します。 500 という値は前項の最後の pcmk-1 の ClusterIP のスコアを上回る値として選びました。

# pcs constraint location WebSite prefers pcmk-2=500 \
  && for i in `seq 1 20`; do crm_simulate -sL; sleep 0.1; done

出力結果のうち変化があったものだけを抜粋します。 まず開始直後の状態。

Current cluster status:
Online: [ pcmk-1 pcmk-2 ]

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

Allocation scores:
native_color: ClusterIP allocation score on pcmk-1: 450
native_color: ClusterIP allocation score on pcmk-2: 500
native_color: WebSite allocation score on pcmk-1: -INFINITY
native_color: WebSite allocation score on pcmk-2: 500

Transition Summary:
 * Move    ClusterIP    (Started pcmk-1 -> pcmk-2)
 * Move    WebSite      (Started pcmk-1 -> pcmk-2)

WebSiteが停止した状態。

Current cluster status:
Online: [ pcmk-1 pcmk-2 ]

 ClusterIP      (ocf::heartbeat:IPaddr2):       Started pcmk-1
 WebSite        (ocf::heartbeat:apache):        Stopped

Allocation scores:
native_color: ClusterIP allocation score on pcmk-1: 350
native_color: ClusterIP allocation score on pcmk-2: 500
native_color: WebSite allocation score on pcmk-1: -INFINITY
native_color: WebSite allocation score on pcmk-2: 500

Transition Summary:
 * Move    ClusterIP    (Started pcmk-1 -> pcmk-2)
 * Start   WebSite      (pcmk-2)

ClusterIPがpcmk-2に移った状態。

Current cluster status:
Online: [ pcmk-1 pcmk-2 ]

 ClusterIP      (ocf::heartbeat:IPaddr2):       Started pcmk-2
 WebSite        (ocf::heartbeat:apache):        Stopped

Allocation scores:
native_color: ClusterIP allocation score on pcmk-1: 250
native_color: ClusterIP allocation score on pcmk-2: 600
native_color: WebSite allocation score on pcmk-1: -INFINITY
native_color: WebSite allocation score on pcmk-2: 500

Transition Summary:
 * Start   WebSite      (pcmk-2)

WebSiteが pcmk-2 で稼働開始した状態。

Current cluster status:
Online: [ pcmk-1 pcmk-2 ]

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

Allocation scores:
native_color: ClusterIP allocation score on pcmk-1: 250
native_color: ClusterIP allocation score on pcmk-2: 700
native_color: WebSite allocation score on pcmk-1: -INFINITY
native_color: WebSite allocation score on pcmk-2: 600

Transition Summary:

手動で制約を調整して仮想IPとApacheを pcmk-1 に戻す

次に pcmk-2 から pcmk-1 に戻してみます。 以下のコマンドで制約のIDを確認します。

[root@pcmk-1 ~]# pcs constraint --full
Location Constraints:
  Resource: WebSite
    Enabled on: pcmk-1 (score:250) (id:location-WebSite-pcmk-1-250)
    Enabled on: pcmk-2 (score:500) (id:location-WebSite-pcmk-2-500)
Ordering Constraints:
  start ClusterIP then start WebSite (kind:Mandatory) (id:order-ClusterIP-WebSite-mandatory)
Colocation Constraints:
  WebSite with ClusterIP (score:INFINITY) (id:colocation-WebSite-ClusterIP-INFINITY)

以下のコマンドで pcmk-2 側の制約を削除し、 pcmk-1 側に戻るまでのスコアの動きを確認します。

# pcs constraint remove location-WebSite-pcmk-2-500 \
  && for i in `seq 1 20`; do crm_simulate -sL; sleep 0.1; done

開始直後の状態。

Current cluster status:
Online: [ pcmk-1 pcmk-2 ]

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

Allocation scores:
native_color: ClusterIP allocation score on pcmk-1: 250
native_color: ClusterIP allocation score on pcmk-2: 200
native_color: WebSite allocation score on pcmk-1: 250
native_color: WebSite allocation score on pcmk-2: -INFINITY

Transition Summary:
 * Move    ClusterIP    (Started pcmk-2 -> pcmk-1)
 * Move    WebSite      (Started pcmk-2 -> pcmk-1)

WebSiteが停止した状態。

Current cluster status:
Online: [ pcmk-1 pcmk-2 ]

 ClusterIP      (ocf::heartbeat:IPaddr2):       Started pcmk-2
 WebSite        (ocf::heartbeat:apache):        Stopped

Allocation scores:
native_color: ClusterIP allocation score on pcmk-1: 250
native_color: ClusterIP allocation score on pcmk-2: 100
native_color: WebSite allocation score on pcmk-1: 250
native_color: WebSite allocation score on pcmk-2: -INFINITY

Transition Summary:
 * Move    ClusterIP    (Started pcmk-2 -> pcmk-1)
 * Start   WebSite      (pcmk-1)

ClusterIPが pcmk-1 に移動した状態。

Current cluster status:
Online: [ pcmk-1 pcmk-2 ]

 ClusterIP      (ocf::heartbeat:IPaddr2):       Started pcmk-1
 WebSite        (ocf::heartbeat:apache):        Stopped

Allocation scores:
native_color: ClusterIP allocation score on pcmk-1: 350
native_color: ClusterIP allocation score on pcmk-2: 0
native_color: WebSite allocation score on pcmk-1: 250
native_color: WebSite allocation score on pcmk-2: -INFINITY

Transition Summary:
 * Start   WebSite      (pcmk-1)

WebSiteが pcmk-1 で稼働開始した状態。

Current cluster status:
Online: [ pcmk-1 pcmk-2 ]

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

Allocation scores:
native_color: ClusterIP allocation score on pcmk-1: 450
native_color: ClusterIP allocation score on pcmk-2: 0
native_color: WebSite allocation score on pcmk-1: 350
native_color: WebSite allocation score on pcmk-2: -INFINITY

Transition Summary:

Active側のコンテナに障害が発生してコンテナごと落ちるケースの模擬実験

Active側 pcmk-1 のコンテナを停止させたときの挙動を確認

LXDホストで以下のコマンドを実行して pcmk-1 を停止させます。

$ lxc stop -f pcmk-1

pcmk-2pcs status を実行すると pcmk-1 が OFFLINE になったことがわかりますが、 PCSD Status: の後を表示するところでブロックしたので Ctrl-C で止めました。

[root@pcmk-2 ~]# pcs status
Cluster name: mycluster
Last updated: Fri Aug 12 13:13:37 2016          Last change: Fri Aug 12 09:34:39 2016 by root via cibadmin on pcmk-1
Stack: corosync
Current DC: pcmk-2 (version 1.1.13-10.el7_2.4-44eb2dd) - partition with quorum
2 nodes and 2 resources configured

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

Full list of resources:

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

PCSD Status:
^C

ip a s eth0ps auxww | grep httpd で仮想IPとApacheが pcmk-2 で動いていることが確認できました。

pcmk-1 のコンテナを起動させた時の挙動を確認

LXDホストで以下のコマンドを実行して pcmk-1 を起動し、コンテナ内に入ります。

$ lxc satrt pcmk-1
$ lxc exec pcmk-1 bash

pcmk-1 側は pcsd は起動していますが、クラスタには所属していない状態です。

理由は Chapter 4. Start and Verify Cluster に説明があります。 pcsdsystemctl enable でOS起動時の自動起動を有効にしていますが corosyncpacemaker はしていないからです。

実運用時に物理的な障害などで pcmk-1 がクラスタから外れた場合、その後電源をいれて起動できたとしても、障害の原因を調査して、正常にサービスを稼働できるかを確認してからクラスタに復帰させたいので、この設定で良いと思います。

[root@pcmk-1 ~]# pcs status
Error: cluster is not currently running on this node

pcmk-2pcs status は今度はブロックせずに完了します。

[root@pcmk-2 ~]# pcs status
Cluster name: mycluster
Last updated: Fri Aug 12 13:18:22 2016          Last change: Fri Aug 12 09:34:39 2016 by root via cibadmin on pcmk-1
Stack: corosync
Current DC: pcmk-2 (version 1.1.13-10.el7_2.4-44eb2dd) - partition with quorum
2 nodes and 2 resources configured

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

Full list of resources:

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

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

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

以下のコマンドを実行して pcmk-1 をクラスタに復帰させます。

[root@pcmk-1 ~]# pcs cluster start pcmk-1
pcmk-1: Starting Cluster...

しばらくして pcs status を確認すると pcmk-1 がオンラインになり、 ClusterIP と WebSite リソースが pcmk-1 に移動することが確認できました。