以前書いた記事で、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 WebGroupstop と monitor は不要なので削除します。
[root@pm01 ~]# pcs resource op remove vipcheck_res stop [root@pm01 ~]# pcs resource op remove vipcheck_res monitorstart のパラメータを変更したいので、一旦削除して追加します。
[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 forevereth0に仮想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コマンドを試してみたいと思います。