6.10.1 共有ディスクの設定
(1) ボリュームグループの設定
(a) ボリュームグループの作成
LVMまたはLVM2で切り替えるボリュームグループの作成
共有ディスクの切り替えは,ボリュームグループ単位で実行されるため,システム管理者はOSのコマンドでボリュームグループを作成する必要があります。
ボリュームグループを作成するときは,次の事項に従ってください。
- 複数の異なるサーバで系切り替え構成にする場合,各サーバが使用するデータは異なるボリュームグループに配置するよう,共有ディスクを構成してください。
ただし,同じサーバグループ内でリソースサーバを使用する場合は,各サーバが使用するデータを同じボリュームグループに配置できます。
- 共有ディスク上に作成するボリュームグループの名称を両方の系で同じにしてください。
- 共有ディスク上に作成するボリュームグループは,HAモニタが制御します。このため,システム起動時,ボリュームグループに自動的に参照+更新接続をしない設定にする必要があります。/etc/rc.sysinitファイルを編集してください。
HA Boosterで切り替えるボリュームグループの作成
HA Boosterを使用する場合,制御グループ単位で共有ディスクを切り替えます。LVMまたはLVM2と併用する場合,この制御グループを構成するボリュームグループを作成します。HA Boosterが管理するボリュームグループについては,システム起動時,自動的に参照+更新接続する設定にする必要があります。/etc/rc.sysinitファイルを編集してください。
(b) /etc/rc.sysinitファイルの編集
/etc/rc.sysinitファイルの編集について,それぞれ次に示します。
- LVMによる切り替えを使用する場合
ファイル中の"/sbin/vgscan && /sbin/vgchange -a y"を含むすべての行を検索し," && /sbin/vgchange -a y"の部分を削除します。
共有ディスク以外で,システム起動時,ボリュームグループに自動的に参照+更新接続をしたいリソースがあるとき,およびHA Boosterで切り替えるボリュームグループについては,削除した行の次の行に"/sbin/vgchange -a y 接続するボリュームグループ名"を追加します。
- LVM2による切り替えを使用する場合
ファイル中の"/sbin/lvm.static vgchange -a y"を含むすべての行を検索し,"/sbin/lvm.static vgchange -a y --ignorelockingfailure "を削除します(Red Hat Enterprise Linux 6.1の場合は"/sbin/lvm vgchange -a y"で検索してください)。
削除することによってactionで実行するコマンドがなくなる場合は,該当するaction自体を削除するか,またはコメントアウトしてください。また,actionを削除することによって,ifコマンドのthen節などで実行するコマンドがなくなる場合は,shellの構文エラーとならないよう,":"(コロン)による空行を挿入してください。
"&& /sbin/lvm.static vgchange -a y"を含むすべての行を検索し,"&& /sbin/lvm.static vgchange -a y --ignorelockingfailure "を削除します(Red Hat Enterprise Linux 6.1の場合は,"&& /sbin/lvm vgchange -a y"で検索してください)。
共有ディスク以外で,システム起動時,ボリュームグループに自動的に参照+更新接続をしたいリソースがあるとき,およびボリュームグループをHA Boosterで切り替えるときは,削除した行の次の行に"/sbin/lvm.static vgchange -a y 接続するボリュームグループ名 --ignorelockingfailure"を追加します。
- HA Boosterによる切り替えだけを使用する場合
HA Boosterによる切り替えだけを使用し,LVMまたはLVM2だけによる切り替えを使用しない場合は,/etc/rc.sysinitファイルの編集は不要です。
- 注意
- /etc/rc.sysinitファイルの編集を誤り,shellの構文エラーになると,システムが起動できなくなるおそれがあります。編集の際には十分注意してください。
以降に,/etc/rc.sysinitファイルの編集例を示します。
(c) /etc/rc.sysinitファイルの編集例(LVMを使用する場合)
LVMを使用する場合の/etc/rc.sysinitファイルの編集例を示します。
OSがRed Hat Enterprise Linux AS 3.5の場合の例を次に示します。
- 編集前
・
・
if [ -e /proc/lvm -a -x /sbin/vgchange ]; then
action $"Setting up Logical Volume Management:" /sbin/vgscan && /sbin/vgchange -a y
fi
・
・
if [ -e /proc/lvm -a -x /sbin/vgchange -a -f /etc/lvmtab ]; then
action $"Setting up Logical Volume Management:" /sbin/vgscan && /sbin/vgchange -a y
fi
・
・ |
- 編集後(ボリュームグループを自動的に参照+更新接続しない場合)
・
・
if [ -e /proc/lvm -a -x /sbin/vgchange ]; then
# action $"Setting up Logical Volume Management:" /sbin/vgscan && /sbin/vgchange -a y
action $"Setting up Logical Volume Management:" /sbin/vgscan
fi
・
・
if [ -e /proc/lvm -a -x /sbin/vgchange -a -f /etc/lvmtab ]; then
# action $"Setting up Logical Volume Management:" /sbin/vgscan && /sbin/vgchange -a y
action $"Setting up Logical Volume Management:" /sbin/vgscan
fi
・
・ |
- 編集後(vg01とvg02を自動的に参照+更新接続する場合)
・
・
if [ -e /proc/lvm -a -x /sbin/vgchange ]; then
# action $"Setting up Logical Volume Management:" /sbin/vgscan && /sbin/vgchange -a y
action $"Setting up Logical Volume Management:" /sbin/vgscan
/sbin/vgchange -a y vg01
/sbin/vgchange -a y vg02
fi
・
・
if [ -e /proc/lvm -a -x /sbin/vgchange -a -f /etc/lvmtab ]; then
# action $"Setting up Logical Volume Management:" /sbin/vgscan && /sbin/vgchange -a y
action $"Setting up Logical Volume Management:" /sbin/vgscan
/sbin/vgchange -a y vg01
/sbin/vgchange -a y vg02
fi
・
・ |
(d) /etc/rc.sysinitファイルの編集例(LVM2を使用する場合)
LVM2を使用する場合の/etc/rc.sysinitファイルの編集例を示します。
OSがRed Hat Enterprise Linux AS 4.7の場合の例を次に示します。
- 編集前
・
・
if [ -x /sbin/lvm.static ]; then
action $"Setting up Logical Volume Management:" /sbin/lvm.static vgchange -a y --ignorelockingfailure
fi
・
・
if [ -x /sbin/lvm.static ]; then
action $"Setting up Logical Volume Management:" /sbin/lvm.static vgchange -a y --ignorelockingfailure
fi
・
・
if [ -x /sbin/lvm.static ]; then
action $"Setting up Logical Volume Management:" /sbin/lvm.static vgchange -a y --ignorelockingfailure
fi
・
・ |
- 編集後(ボリュームグループを自動的に参照+更新接続しない場合)
・
・
if [ -x /sbin/lvm.static ]; then
# action $"Setting up Logical Volume Management:" /sbin/lvm.static vgchange -a y --ignorelockingfailure
:
fi
・
・
if [ -x /sbin/lvm.static ]; then
# action $"Setting up Logical Volume Management:" /sbin/lvm.static vgchange -a y --ignorelockingfailure
:
fi
・
・
if [ -x /sbin/lvm.static ]; then
# action $"Setting up Logical Volume Management:" /sbin/lvm.static vgchange -a y --ignorelockingfailure
:
fi
・
・ |
- 編集後(vg01とvg02を自動的に参照+更新接続する場合)
・
・
if [ -x /sbin/lvm.static ]; then
# action $"Setting up Logical Volume Management:" /sbin/lvm.static vgchange -a y --ignorelockingfailure
/sbin/lvm.static vgchange -a y vg01 --ignorelockingfailure
/sbin/lvm.static vgchange -a y vg02 --ignorelockingfailure
fi
・
・
if [ -x /sbin/lvm.static ]; then
# action $"Setting up Logical Volume Management:" /sbin/lvm.static vgchange -a y --ignorelockingfailure
/sbin/lvm.static vgchange -a y vg01 --ignorelockingfailure
/sbin/lvm.static vgchange -a y vg02 --ignorelockingfailure
fi
・
・
if [ -x /sbin/lvm.static ]; then
# action $"Setting up Logical Volume Management:" /sbin/lvm.static vgchange -a y --ignorelockingfailure
/sbin/lvm.static vgchange -a y vg01 --ignorelockingfailure
/sbin/lvm.static vgchange -a y vg02 --ignorelockingfailure
fi
・
・ |
OSがRed Hat Enterprise Linux 5.3の場合の例を次に示します。
- 編集前
・
・
if [ -x /sbin/lvm.static ]; then
action $"Setting up Logical Volume Management:" /sbin/lvm.static vgchange -a y --ignorelockingfailure
fi
・
・ |
- 編集後(ボリュームグループを自動的に参照+更新接続しない場合)
・
・
if [ -x /sbin/lvm.static ]; then
# action $"Setting up Logical Volume Management:" /sbin/lvm.static vgchange -a y --ignorelockingfailure
:
fi
・
・ |
- 編集後(vg01とvg02を自動的に参照+更新接続する場合)
・
・
if [ -x /sbin/lvm.static ]; then
# action $"Setting up Logical Volume Management:" /sbin/lvm.static vgchange -a y --ignorelockingfailure
/sbin/lvm.static vgchange -a y vg01 --ignorelockingfailure
/sbin/lvm.static vgchange -a y vg02 --ignorelockingfailure
fi
・
・ |
OSがRed Hat Enterprise Linux 6.1の場合の例を次に示します。
- 編集前
・
・
if [ -x /sbin/lvm ]; then
action $"Setting up Logical Volume Management:" /sbin/lvm vgchange -a y --sysinit
:
fi
・
・ |
- 編集後(ボリュームグループを自動的に参照+更新接続しない場合)
・
・
if [ -x /sbin/lvm ]; then
# action $"Setting up Logical Volume Management:" /sbin/lvm vgchange -a y --sysinit
:
fi
・
・ |
- 編集後(vg01とvg02を自動的に参照+更新接続する場合)
・
・
if [ -x /sbin/lvm ]; then
# action $"Setting up Logical Volume Management:" /sbin/lvm vgchange -a y --sysinit
/sbin/lvm vgchange -a y vg01 --sysinit
/sbin/lvm vgchange -a y vg02 --sysinit
:
fi
・
・ |
(2) HA Boosterの制御グループの設定
HA Boosterを使用する場合,制御グループ単位で共有ディスクを切り替えます。HAモニタは,制御グループのアクセス権限をサーバ単位で変更することで,共有ディスクを制御します。
HA Boosterの制御グループには,ディスクデバイスを登録します。サーバごとに,制御グループを独立させてください。制御グループへの登録方法については,HA Booster関連のドキュメントを参照してください。
なお,LVMまたはLVM2による切り替えだけを使用し,HA Boosterによる切り替えを使用しない場合は,この設定は不要です。
(3) ファイルシステムの設定
共有ディスク上のファイルシステムを使用する場合,OSに対してファイルシステムの設定をする必要があります。
ファイルシステムの切り替え制御では,HAモニタがマウント・アンマウントします。したがって,システム起動時に自動的にマウントしないように設定してください。設定方法は,OSのマニュアルを参照してください。
HAモニタが制御するファイルシステムを/etc/fstabファイルに指定する場合,第3フィールド(ファイルシステムタイプ)には,"ignore"を指定しないでください。"ignore"を指定した場合,HAモニタが実行するfsckコマンドが失敗し,ファイルシステムを使用できないことがあります。
(4) キャラクタ型スペシャルファイルの設定
キャラクタ型スペシャルファイルは,使用する条件によってバインド・アンバインドの要否やタイミングが異なります。
キャラクタ型スペシャルファイルを使用する条件と,バインド・アンバインドの要否を,次の表に示します。
表6-6 キャラクタ型スペシャルファイルを使用する条件と,バインドまたはアンバインドの要否
キャラクタ型スペシャルファイルを 使用する条件 | バインド・アンバインドの要否 |
---|
HA Boosterが管理する制御グループにない共有ディスク上 | LVM | システム起動時にキャラクタ型スペシャルファイルをバインドします。アンバインドは不要です。 |
LVM2 | システム起動時ではなく,ボリュームグループに参照+更新接続をした時点でバインドし,ボリューブムグループの切り離しをした時点でアンバインドします。HAモニタのユーザコマンドで設定します。 また,ボリュームグループを切り離す前にアンバインドする必要があるため,HAモニタの環境設定,およびサーバ対応の環境設定のdeviceoff_orderオペランド※にreverseを設定する必要があります。 キャラクタ型スペシャルファイルを使用するすべてのサーバに対して設定してください。 |
HA Boosterが管理する制御グループにある共有ディスク上 | システム起動時に,次のファイルなどを用いてキャラクタ型スペシャルファイルをバインドします。アンバインドは不要です。
- /etc/sysconfig/rawdevices
- /etc/udev/rules.d配下のudevのruleファイル
- HA Boosterの起動スクリプト
|
- 注※
- HAモニタの環境設定のdeviceoff_orderオペランドについては,「8.3.1 HAモニタの環境設定(sysdef)」を参照してください。また,サーバ対応の環境設定のdeviceoff_orderオペランドについては,「8.4.1 サーバ対応の環境設定(servers)」を参照してください。
以降に,キャラクタ型スペシャルファイルの設定に関するユーザコマンドについて説明します。ユーザコマンドの作成方法についての詳細は,「6.16 ユーザコマンドの作成」を参照してください。
(a) ユーザコマンドの発行タイミング
次のタイミングでOSのrawコマンドが発行されるよう,ユーザコマンドを設定します。
キャラクタ型スペシャルファイルのバインド
- 実行サーバの起動時
- 待機サーバの系切り替え処理開始時
- 実行サーバでサーバ障害が発生
- 実行系で系障害が発生
- 実行系から待機系に計画系切り替えを実行
キャラクタ型スペシャルファイルのアンバインド
- 実行サーバの終了時
- 実行サーバでサーバ障害が発生
- 実行系から待機系に計画切り替えを実行
- 実行サーバでサーバ障害が発生(系切り替え不可)
- 実行サーバが正常終了
- 実行サーバが計画終了
- 待機サーバの起動時
- 待機サーバの系切り替え失敗時
(b) ユーザコマンドのコーディング例
サーバ(LinuxTP1)に対して,共有ディスク上(/dev/vg10)でキャラクタ型スペシャルファイル(/dev/raw/raw1)を論理ボリューム(lvol0)にバインドする場合の,ユーザコマンドのコーディング例を次に示します。
このコーディング例は,サンプルファイルとしてHAモニタのサンプルファイル用ディレクトリの下に,usrcommand_raw_bindのファイル名で格納されています。
# サーバ識別名の定義
SERV="LinuxTP1" # サーバ識別名:LinuxTP1
# デバイス名称の定義
RAW_NAME="/dev/raw/raw1" # rawデバイス名称
DEV_NAME="/dev/vg10/lvol0" # 共有ディスク上の論理ボリューム名称
# rawデバイスをアンバインドする
func_unbind(){
# デバイスが存在しなくなるまで待つ
COUNT=0
while [ ¥( ${COUNT} -lt 10 ¥) -a ¥( -e "$1" ¥)]
do
# rawデバイスを使用中のプロセスを強制終了する
fuser -k "$1" >/dev/null 2>&1
# コマンドの処理が完了するのを1秒待つ
sleep 1
# デバイスのアンバインド
raw "$1" 0 0
COUNT=`expr ${COUNT} + 1`
done
}
# rawデバイスをバインドする
func_bind(){
# デバイスのバインド
raw "$1" "$2"
# デバイスが使用可能になるまで待つ
COUNT=0
while [ ${COUNT} -lt 10 ]
do
# デバイスへのアクセスを試行し,アクセスできればバインド完了
dd of=/dev/null if="$1" bs=1 count=0 >/dev/null 2>&1
if [ "$?" = 0 ]
then
break
fi
# 1秒sleepしリトライする
sleep 1
COUNT=`expr ${COUNT} + 1`
done
}
# Main
# 実行サーバの起動開始時,または待機サーバの系切り替え開始時に
# rawデバイスをバインドする
# 実行サーバの終了開始時,待機サーバの起動開始時,または待機サーバの
# 系切り替え失敗時にrawデバイスをアンバインドする
PATH=/bin:/usr/bin:/sbin
export PATH
if [ "$2" = "${SERV}" ]
then
if [ "$4" = "online" ]
then
case "$5" in
"-s" ) # 実行サーバの起動
if [ "$6" = "start" ] # 状態変化の開始
then
func_bind ${RAW_NAME} ${DEV_NAME}
fi
;;
"-a" | "-w" | "-o" | "-e" | "-p" ) # 実行サーバの終了
# (サーバ障害,計画系切り替え,
# サーバ障害(系切り替え不可能),
# 正常終了,計画終了)
if [ "$6" = "start" ] # 状態変化の開始
then
func_unbind ${RAW_NAME} ${DEV_NAME}
fi
;;
esac
else
case "$5" in
"-a" | "-h" | "-w" ) # 待機サーバ系切り替え
# (サーバ障害,系障害,計画切り替え)
if [ "$6" = "start" ] # 状態変化の開始
then
func_bind ${RAW_NAME} ${DEV_NAME}
fi
;;
"-s" | "-f" ) # 待機サーバ起動,または系切り替え失敗
if [ "$6" = "start" ] # 状態変化の開始
then
func_unbind ${RAW_NAME} ${DEV_NAME}
fi
;;
esac
fi
fi |
このコーディング例では,実行サーバ起動時の実行系,または系切り替え時の系切り替え先の系でfunc_bindを実行し,キャラクタ型スペシャルファイルのバインドをしています。また,実行サーバ終了時の実行系,待機サーバ起動時の待機系,または系切り替え失敗時の系切り替えに失敗した待機系でfunc_unbindを実行し,キャラクタ型スペシャルファイルのアンバインドをしています。
func_bindでは,rawコマンドでキャラクタ型スペシャルファイルのバインドを実行します。そのあとに,キャラクタ型スペシャルファイルがアクセス可能になるまで,次の処理を1秒間隔で10回リトライしています。
- ddコマンド
キャラクタ型スペシャルファイルがアクセス可能になったか調べます。
- sleepコマンド
キャラクタ型スペシャルファイルがバインドされるのを待ちます。
func_unbindでは,キャラクタ型スペシャルファイルがアンバインドするまで,次の処理を1秒間隔で10回リトライしています。
- fuserコマンド
系切り替え時に,キャラクタ型スペシャルファイルを使用するプロセスが存在するとアンバインドできないため,共有ディスクの切り離しに失敗します。このため,fuserコマンドでキャラクタ型スペシャルファイルを使用しているすべてのプロセスを強制停止します。
- sleepコマンド
キャラクタ型スペシャルファイルがアンバインドされるのを待ちます。
- rawコマンド
キャラクタ型スペシャルファイルをアンバインドします。