SSブログ

Pacemaker + Corosyncでのクラスタ環境の構築 [CentOS]

Pacemaker を使用したクラスタ環境の構築を検討しており、手順の確認等のため、実際に環境を構築してみた。
詳細は、以下の通りである。

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


nice!(10)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 10

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

CentOS 6.x上のFirefoxの..DRBDの試用 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。