Pacemaker + Corosyncでのクラスタ環境の構築 [CentOS]
詳細は、以下の通りである。
1. 要件
(1) ソフトウエアのバージョン
・OS: CentOS 6.7
・pacemaker-1.1.12-8.el6_7.2.i686
・corosync-1.4.7-2.el6.i686
(2) システム要件
(a) インターコネクト用 LAN
サービス LAN を インターコネクト用としても使用する。
(192.168.0.0/24)
(b) クラスタを構成するノード
KVM の VM 上に構築した 2 個のノードでクラスタを構成する。
(c) 共有ディスク
共有ディスク用のディスクイメージを追加し、該当する VM 間で共有する。
(共有ディスク: /dev/sdb)
(d) クラスタリングの対象とするサービス
NFS サーバー
2. 実施手順
2-1. パッケージのインストール
すべてのノードで下記コマンドを実施する。
# yum install pacemaker corosync pcs
・corosync: クラスタ制御
・pacemaker: リソース制御
・pcs: Pacemaker 設定用のコマンドライン・ツール
2-2. Corosync の設定
いずれかのノードで下記の手順を実施し、当該ファイルを他のノードにコピーする。
(1) /etc/corosync/corosync.conf の作成
# cd /etc/corosync # cp -p corosync.conf.example corosync.conf
(2) /etc/corosync/corosync.conf の編集
# diff corosync.conf corosync.conf.example 25c25 < bindnetaddr: 192.168.0.0 --- > bindnetaddr: 192.168.1.0
192.168.0.0 をインターコネクト用 LAN として定義する。
2-3. サービスの起動
すべてのノードで下記の手順を実施する。
(1) サービスの起動
# /etc/init.d/corosync start # /etc/init.d/pacemaker start # chkconfig corosync on # chkconfig pacemaker on
(2) 状態の確認
# crm_mon Last updated: ... Last change: ... Stack: classic openais (with plugin) Current DC: vm2.private.net - partition with quorum Version: 1.1.11-97629de 2 Nodes configured, 2 expected votes 0 Resources configured Online: [ vm2.private.net vm3.private.net ]
(補足)
crm_mon コマンドの終了: Ctrl+C
2-4. クラスタ特性の設定
いずれかのノードで下記の手順を実施する。
(1) クラスタ特性の設定
# pcs property set stonith-enabled=false # pcs property set no-quorum-policy=ignore
(2) 設定状況の確認
# pcs property list
2-5. リソースの定義
2-5-1. VIP の定義
いずれかのノードで下記の手順を実施する。
(1) リソースの定義
# pcs resource create vip ocf:heartbeat:IPaddr2 \ ip=192.168.0.20 cidr_netmask=24 \ nic="eth0" \ op monitor interval=30s
192.168.0.20/24 をリソースとして定義する。
(2) 状態の確認
# pcs status resources vip (ocf::heartbeat:IPaddr2): Started vm2.private.net
2-5-2. VIPcheck の定義
スプリットブレイン対策として、いずれかのノードで下記の手順を実施する。
ただし、リソース・エージェントの追加はすべてのノードで実施する。
(1) リソース・エージェントの追加
(a) VIPcheck リソース・エージェントの入手
http://sourceforge.jp/projects/linux-ha/downloads/45456/VIPcheck/
(b) リソース・エージェントの追加
# cd /usr/lib/ocf/resource.d # mkdir additional # cd additional # cp -p VIPcheck . # chown root:root VIPcheck # chmod 755 VIPcheck # cd ../heartbeat # ln -s ../additional/VIPcheck .
(2) リソースの定義
# pcs resource create vip-check ocf:heartbeat:VIPcheck \ target_ip=192.168.0.20 count=1 wait=10 \ op start interval=0s timeout=90s on-fail=restart start-delay=4s # pcs constraint colocation add vip with vip-check INFINITY ... (注1) # pcs constraint order vip-check then vip ... (注2) (注1) 実行するノードの設定 (注2) 実行順序設定
(3) 状態の確認
# pcs constraint Location Constraints: Ordering Constraints: start vip-check then start vip (kind:Mandatory) Colocation Constraints: vip with vip-check (score:INFINITY)
2-5-3. ファイルシステムの定義
いずれかのノードで下記の手順を実施する。
(1) リソースの定義
# pcs resource create fs-nfs ocf:heartbeat:Filesystem \ device=/dev/sdb1 directory=/share fstype="ext3" # pcs constraint colocation add fs-nfs with vip INFINITY ... (注1) # pcs constraint order vip then fs-nfs ... (注2) (注1) VIP が割り当てられたノードでリソースを有効にするための設定 (注2) VIP が割り当てられた後にリソースを有効にするための設定
/dev/sdb1 をマウントした /share をリソースとして定義する。
(2) 状態の確認
# pcs constraint Location Constraints: Ordering Constraints: start vip-check then start vip (kind:Mandatory) start vip then start fs-nfs (kind:Mandatory) Colocation Constraints: vip with vip-check (score:INFINITY) fs-nfs with vip (score:INFINITY)
2-5-4. サービスの定義 (nfsd)
(1)〜(3) の手順をすべてのノードで実施する。
また、いずれかのノードで (4) 以降の手順を実施する。
(1) nfs の自動起動の無効化
# chkconfig nfs off
(2) ファイルシステムの export
(a) /etc/exports の作成
# cat /etc/exports /share 192.168.0.0/24(rw,no_root_squash,sync)
(b) exportfs の実行
# exportfs -av
(3) nfs のカスタマイズ
系切り替え後の待ち時間を短縮するために、/etc/sysconfig/nfs を編集する。
# cd /etc/sysconfig/ # diff nfs nfs.org 50,52c50,52 < NFSD_V4_GRACE=10 < NFSD_V4_LEASE=10 < NLM_GRACE_PERIOD=10 --- > #NFSD_V4_GRACE=90 > #NFSD_V4_LEASE=90 > #NLM_GRACE_PERIOD=90
(4) リソースの定義
# pcs resource create nfs-server ocf:heartbeat:nfsserver \ nfs_init_script="/etc/init.d/nfs" nfs_ip="192.168.0.20" \ op start interval="0s" timeout="120s" \ op monitor interval="10s" timeout="60s" on-fail="restart" \ op stop interval="0s" timeout="120s" # pcs constraint colocation add nfs-server with fs-nfs INFINITY ... (注1) # pcs constraint order fs-nfs then nfs-server ... (注2) (注1) fs-nfs が割り当てられたノードで nfsd を起動するための設定 (注2) fs-nfs が割り当てられた後に nfsd を起動するための設定
(5) 状態の確認
# pcs constraint Location Constraints: Ordering Constraints: start vip-check then start vip (kind:Mandatory) start vip then start fs-nfs (kind:Mandatory) start fs-nfs then start nfs-server (kind:Mandatory) Colocation Constraints: vip with vip-check (score:INFINITY) fs-nfs with vip (score:INFINITY) nfs-server with fs-nfs (score:INFINITY)
2-6. テスト
(1) テストの準備
・vm2.private.net、vm3.private.net をそれぞれ Active、Standby ノードにする。
・NFS クライアントで、192.168.0.20:/share をマウントする。
(2) テストの実施
(a) test-1
・vm2.private.net 上で nfsd を停止する。
(# /etc/init.d/nfs stop)
・vm2.private.net 上で nfsd が再起動されることを確認する。
(b) test-2
・vm2.private.net 上で pacemaker を停止する。
(# /etc/init.d/pacemaker stop)
・すべてのリソースが vm3.private.net 上に移動することを確認する。
・クライアントで 192.168.0.20:/share がマウントできることを確認する。
(c) test-3
・vm2.private.net 上で eth0 を停止する。
(# ifconfig eth0 down)
・test-2 と同じことを確認する。
(補足)
リソースの状態は、下記のコマンドで確認できる。
# crm_mon -A
2-7. logrotate の設定
下記ログのローテーションを行う設定を追加する。
・/var/log/pacemaker.log
・/var/log/cluster/corosync.log
3. 備考
3-1. Pacemaker の設定情報
(1) Pacemaker の設定情報の所在
/var/lib/pacemaker/cib/cib.xml
(補足)
・CIB とは、Cluster Information Base の略である。
・このファイルは、動的に更新される。
(2) 現在の設定のファイルへの出力
# pcs cluster cib /tmp/output.xml
3-2. リソースの管理
(1) リソースの削除
# pcs [--force] resource delete <resource-id>
(2) リソースの開始
# pcs resource enable <resource-id>
(3) リソースの停止
# pcs resource disable <resource-id>
(4) constraint colocation の削除
# pcs constraint colocation remove <src-resource-id> <target-resource-id>
・<src-resource-id>: 定義時に with の前に指定したリソース
・<target-resource-id>: 定義時に with の後に指定したリソース
(5) constraint order の削除
# pcs constraint order remove <resource-id>
(6) 故障履歴のクリア
# pcs resource cleanup <resource-id>
・crm_mon で出力される "Failed actions:" 情報をクリアする。
(補足)
・resource-id: リソースの定義時に指定した値
・詳細は、pcs の man page を参照
3-3. リソースグループの管理
(1) リソースグループへのリソースの追加-1
# pcs resource group add <group-name> <resource-id> ...
・リソースグループを作成し、リソースグループにリソースを追加する。
(複数のリソースを指定できる。)
・リソースグループが既存の場合には、リソースの追加のみが実施される。
・リソースの起動は指定された順に行われる。
・リソースの停止は起動とは逆順に行われる。
・リソースの起動に失敗した場合には、それ以降のリソースは起動されない。
(2) リソースグループへのリソースの追加-2
# pcs resource create <resource-id> ... --group <group-name>
・リソースの定義時にリソースグループを指定することができる。
(3) リソースグループからのリソースの削除
# pcs resource group remove <group-name> <resource-id> ...
・複数のリソースを指定できる。
(4) リソースグループの一覧表示
# pcs resource group list
コメント 0