2015年10月31日土曜日

[CentOS7] Pacemaker のリソースを登録する(Apacheのクラスタ)


以前書いた記事で、CentOS7にPacemaker+Corosyncをインストールしました。

今回は、下記のリソースを使用して、Apacheのクラスタ(Active/Standby) を試してみます。

  • VIPCheck
    一番最初に起動させてVIPに疎通できるかチェックし、疎通できた場合は後続のリソースを起動しないようにします。(スプリットブレインの防止)
  • IPaddr2
    仮想IPアドレス(VIP)を作成します。
  • apache
    apache を起動します。
  • ping
    ネットワークを監視して、デフォルトGWに疎通できるサーバでリソースが起動するようにします。

ping 以外のリソースは同一グループ(WebGroup)に所属させることで、一緒に行動するようにします。VIPCheck/IPaddr2/apacheは常に同じサーバ(Active)で動くようにします。
ping は Active/Standby の両方で動かします。

構成情報は以下のとおり
  • pm01: 10.1.0.71
  • pm02: 10.1.0.72
  • vip: 10.1.0.70
  • デフォルトGW: 10.1.0.254


1.VIPCheck の設定


VIPCheckは、下記URLで配布しているので、ソース(シェルスクリプト)を入手します。
pm01 と pm02 に VIPCheck を配置します。私はコピペしました。
[root@pm01 ~]# cd /usr/lib/ocf/resource.d/
[root@pm01 resource.d]# mkdir myres
[root@pm01 resource.d]# vi myres/VIPCheck
[root@pm01 resource.d]# chmod 755 myres/VIPCheck
[root@pm01 resource.d]# ls -l myres/VIPCheck
-rwxr-xr-x 1 root root 5463 10月 31 20:30 myres/VIPCheck
[root@pm02 ~]# cd /usr/lib/ocf/resource.d/
[root@pm02 resource.d]# mkdir myres
[root@pm02 resource.d]# vi myres/VIPCheck
[root@pm02 resource.d]# chmod 755 myres/VIPCheck
[root@pm02 resource.d]# ls -l myres/VIPCheck
-rwxr-xr-x 1 root root 5463 10月 31 20:30 myres/VIPCheck
以下のようにリソースを登録します。"--group" でリソースを所属させるグループを指定しています。グループに追加した順番で起動するようになります。
[root@pm01 ~]# pcs resource create vipcheck_res ocf:myres:VIPCheck target_ip=10.1.0.70 count=1 wait=10 --group WebGroup
stop と monitor は不要なので削除します。
[root@pm01 ~]# pcs resource op remove vipcheck_res stop
[root@pm01 ~]# pcs resource op remove vipcheck_res monitor
start のパラメータを変更したいので、一旦削除して追加します。
[root@pm01 ~]# pcs resource op remove vipcheck_res start
[root@pm01 ~]# pcs resource op add vipcheck_res start interval=0s timeout=90s on-fail=restart start-delay=4s

2.VIPの設定


pm01とpm02のNICは以下のように eth0 という名前にしています。
[root@pm01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 4a:73:98:ab:45:82 brd ff:ff:ff:ff:ff:ff
    inet 10.1.0.71/32 brd 10.1.0.71 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::4873:98ff:feab:4582/64 scope link
       valid_lft forever preferred_lft forever
[root@pm02 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether ca:f9:d7:75:bd:8b brd ff:ff:ff:ff:ff:ff
    inet 10.1.0.72/32 brd 10.1.0.72 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::c8f9:d7ff:fe75:bd8b/64 scope link
       valid_lft forever preferred_lft forever
eth0に仮想IPアドレスを設定します。
以下のようにリソースを登録します。
[root@pm01 ~]# pcs resource create vip_res ocf:heartbeat:IPaddr2 nic=eth0 ip=10.1.0.70 cidr_netmask=24 --group WebGroup

3.Apacheの設定


Apacheは、server-status が使用できるように設定します。
pm01、pm02の/etc/httpd/conf.d/status.conf に以下の内容を記述します。
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from localhost
</Location>
Apacheは、Pacemakerで起動/停止するので、OSの自動起動/停止はOFFにします。
[root@pm01 ~]# systemctl list-unit-files -t service | grep httpd
httpd.service                               disabled
[root@pm02 ~]# systemctl list-unit-files -t service | grep httpd
httpd.service                               disabled
以下のようにリソースを登録します。
[root@pm01 ~]# pcs resource create httpd_res apache configfile="/etc/httpd/conf/httpd.conf" statusurl="http://127.0.0.1/server-status" --group WebGroup

4.ping の設定


以下のようにリソースを登録します。 "--clone" を指定することで、クラスタの全ノードで起動するようになります。
[root@pm01 ~]# pcs resource create ping ocf:pacemaker:ping dampen=5s multiplier=1000 host_list=10.1.0.254 --clone
デフォルトGWに疎通可能なサーバで WebGrop のリソースが起動するように設定します。
[root@pm01 ~]# pcs constraint location WebGroup rule score=-INFINITY pingd lt 1 or not_defined pingd

5.自動フェイルバックを無効にする


自動フェイルバックを無効にし、リソース異常時に同一サーバでリソースを再起動する回数を1回にします。
[root@pm01 ~]# pcs resource defaults resource-stickiness=INFINITY migration-threshold=1

6.pm01 が優先して Active になるようにする


pm01/pm02を同時に起動した場合などは、pm01が優先して Activeになるように設定します。
[root@pm01 ~]# pcs constraint location WebGroup prefers pm01=50

7.確認


設定が成功していれば、以下のようにリソースが起動します
[root@pm01 resource.d]# pcs status
Cluster name: cluster_test
Last updated: Sat Oct 31 22:41:27 2015          Last change: Sat Oct 31 22:41:23 2015 by root via cibadmin on pm01
Stack: corosync
Current DC: pm02 (version 1.1.13-a14efad) - partition with quorum
2 nodes and 5 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 ]

PCSD Status:
  pm01: Online
  pm02: Online

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled
設定内容は以下のようにして確認できます。
[root@pm01 resource.d]# pcs config
Cluster Name: cluster_test
Corosync Nodes:
 pm01 pm02
Pacemaker Nodes:
 pm01 pm02

Resources:
 Group: WebGroup
  Resource: vipcheck_res (class=ocf provider=myres type=VIPCheck)
   Attributes: target_ip=10.1.0.70 count=1 wait=10
   Operations: start timeout=90s on-fail=restart interval=0s start-delay=4s (vipcheck_res-name-start-interval-0s-on-fail-restart-start-delay-4s-timeout-90s)
  Resource: vip_res (class=ocf provider=heartbeat type=IPaddr2)
   Attributes: nic=eth0 ip=10.1.0.70 cidr_netmask=24
   Operations: start interval=0s timeout=20s (vip_res-start-timeout-20s)
               stop interval=0s timeout=20s (vip_res-stop-timeout-20s)
               monitor interval=10s timeout=20s (vip_res-monitor-interval-10s)
  Resource: httpd_res (class=ocf provider=heartbeat type=apache)
   Attributes: configfile=/etc/httpd/conf/httpd.conf statusurl=http://127.0.0.1/server-status
   Operations: start interval=0s timeout=40s (httpd_res-start-timeout-40s)
               stop interval=0s timeout=60s (httpd_res-stop-timeout-60s)
               monitor interval=10 timeout=20s (httpd_res-monitor-interval-10)
 Clone: ping-clone
  Resource: ping (class=ocf provider=pacemaker type=ping)
   Attributes: dampen=5s multiplier=1000 host_list=10.1.0.254
   Operations: start interval=0s timeout=60 (ping-start-timeout-60)
               stop interval=0s timeout=20 (ping-stop-timeout-20)
               monitor interval=10 timeout=60 (ping-monitor-interval-10)

Stonith Devices:
Fencing Levels:

Location Constraints:
  Resource: WebGroup
    Enabled on: pm01 (score:50) (id:location-WebGroup-pm01-50)
    Constraint: location-WebGroup
      Rule: score=-INFINITY boolean-op=or  (id:location-WebGroup-rule)
        Expression: pingd lt 1  (id:location-WebGroup-rule-expr)
        Expression: not_defined pingd  (id:location-WebGroup-rule-expr-1)
Ordering Constraints:
Colocation Constraints:

Cluster Properties:
 cluster-infrastructure: corosync
 cluster-name: cluster_test
 dc-version: 1.1.13-a14efad
 have-watchdog: false
 no-quorum-policy: ignore
 stonith-enabled: false



次回は、F/Oさせてみたり、リソース関連のpcsコマンドを試してみたいと思います。