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」となる。