RedHatClusterSuite
RedHatClusterSuite構築手順
RHCS構築環境
RedHatLinuxEL(5.2)
RedHat Cluster suite 5.2(ReadHat Cluster Administration)
共有ディスクとして、RedHat上に立てたiscsi-targetに対して各ノードからopen-iscsi2.0で接続する。
Redhat Cluster Suite について
Redhat Cluster Suiteは「アドバンスドモード」のRedHat Linuxにインストールすること。
RHCSは負荷分散機能(IPロードバランサ)とフェイルオーバクラスタ機能(Cluster Manager)の2つの機能から構成されている。
Redhat Cluster Suiteにおいて、可用性向上を目的とした製品は「Redhat Cluster Adminbistration」である。
主要モジュール(最小構成時)
ipvsadm
dlm-kernel-hugemem
cman-kernelheaders
cluster-cim
dlm-kernelheaders
cluster-snmp
cman-kernel-hugemem
modcluster
luci
ricci
pianha
主要デーモン
名前 | 説明 |
---|---|
ccsd(Cluster Configuration Service daemon) | クラスタの設定の同期をノード間で行います。 |
dlm(Distributed lock manager) | クラスタのノード全体で同期が必要な全ての要素の排他制御のためのロック機構を管理します。 |
cman(Cluster MANager) | ノード間のメッセージング、メンバシップの管理などクラスタ全体を管理します。 |
fenced (Fence Daemon) | 異常ノードによるクラスタの不整合を防止するためのデバイスであるフェンスデバイスを管理します。 |
rgmanager Resource group manager) | ディスクやIPアドレス、起動スクリプトなどのクラスタの各種リソースを管理し、HAサービスの起動・停止・状態監視を行います。 |
fence デバイスについて
フェンスとは、クラスタシステム内で問題が発生したノードを強制停止、又は再起動させる為のデバイスです。つまり、正しく作動していない筐体を強制的に停止する機能です。
フェンスが設定されていないとRHの公式サポートが受けられないということです。
共有ディスクの用意設定
共有ディスクのパーティションを設定する。
RHCSはQUORUM DISKが必要。
/dev/sdb にクラスタパーティションとデータパーティションの作成を行う。
fdisk /dev/sdb を実行
- n(作成),p(基本領域),1(領域番号),1(最初シリンダ),8(最終シリンダ)
- t(IDの変更),83(Linux)
- n(作成),p(基本領域),2(領域番号),9(最初シリンダ),400(最終シリンダ)
→ブロック数が4の倍数であることを確認。
- w(書き込み)
結果として、/dev/sdb1 と /deb/sdb2 が作成される
ファイルシステムの作成
# mkfs -t ext3 /dev/sdb2
(もしくは# mkfs.ext3 /dev/sdb2)
# tune2fs -j /dev/sdb2
(評価用にリミット解除:# tune2fs -c 0 -i 0 /dev/sdb2)
クラスタノードからマウントできることを確認
# df -T
# mkdir /ClusterDisk
# mount /dev/sdb2 /ClusterDisk
クォ-ラムの設定。
両ノードでそれぞれ以下のコマンドを実行し、Qdisk用パーティション(/dev/sdb1)が認識できること。
# cat /proc/partitions
# mkqdisk ?c /dev/sdb1 ?l qdisk0
クラスタ設定
両ノードで共有ディスクの設定が完了していること。
クラスタ定義
1クラスタノードから「Cluster Configurration」を起動する。
# system-config-cluster &
2フェンスデバイスの作成
3クラスタノードの作成
4ノードの割り当て(評価ではQuorum Votesを「1」とした)
5フェールオーバドメインの作成
フェイルオーバドメインは、フェイルオーバ可能なクラスタノードのグループです。
リソースの追加
ファイルシステムリソース
IPアドレスリソース
スクリプトリソース
※リソースの注意事項を下記に記載する。
クラスタサービス設定
IPアドレスリソース→ファイルシステムリソース→スクリプトリソース」の順番で依存させること。
設定が終わったら、一旦両ノード共クラスターを全て停止します。
# service rgmanager stop
# service cman stop
※RHEL5.2より前のバージョンでは、ccsd,cman,fenced,rgmanagerの個別停止が必要かもしれない
停止処理が完了したら、クラスタ設定を行った端末からクラスタ環境設定ファイル/etc/cluster/cluster.confを、もう片側のノードにコピーします。
# scp /etc/cluster/cluster.conf 10.17.21.32:/etc/cluster/cluster.conf
ファイルシステムリソースについて
ディスクリソースで「force unmount」オプションをつけておかないと、フェールオーバー時に共有ディスク上でプロセスが動作している場合にKILL(fuser)されることがないため、iノード情報に狂いが生じる可能性がある。
もしくはスクリプトリソースでfuserコマンドを発行してもよい。
スクリプトリソースについて
サービススクリプトの形式は、System V initスクリプトが従っている規約に従います。
この規約は、スクリプトにstart、stop、status句が含まれていることを規定しています。
これらは、成功時に終了ステータス0を返します。クラスタインフラストラクチャは、正常に起動できなかったクラスタサービスを停止します。サービスを起動できなかった場合、サービスは無効な状態になります。
スクリプトリソースは/usr/share/cluster配下のservice/shをテンプレートにして作成します。
#!/bin/bash
#
# Cluster
#
SITENAME=
SITEDB=
MID=
PIDFILE=
LOGFILE=
clsmonitor() {
# プロセスの生存確認
kill -0 `cat $PIDFILE`
if [ ! "$STATUS" = 0 ]; then
exit 1
fi
}
case $1 in
start)
# クラスタサイトの起動処理
exit 0
;;
stop)
# クラスタサイトの停止処理
exit 0
;;
status|monitor)
clsmonitor
exit 0
;;
*)
# その他の動作通知については任意に設定すること。
# recover|restart, reload, meta-data, validate-all, reconfig
echo "`date`:Caution!! [node:`hostname`]" >> $LOGFILE
exit 0
;;
esac
クラスタ起動
クラスタサービスを起動
cmanを実行することで、「Cluster Configurration」にノード情報タブが生成されます。rgmanagerを起動すると、クラスタサービスを認識するようになります。
# service cman start
# service rgmanager start
「Cluster Configurration」を使用した場合、cmanは参加ノードで一斉に実行する必要がある。
ノードから見て他ノードのcmanが検知できない場合、タイムアウトする。(デフォルトタイムyアウトは300sec)
環境確認
環境確認は以下のコマンドを実行します。
# clustat
なお、クラスタ(スクリプトリソース)から起動されるプロセスは、デフォルトでは「ナイス値は-1」となる。