6.13.1 共有ディスクの設定
共有ディスクの設定は,共有ディスクをLVMで切り替えるか,HA Boosterで切り替えるか,またはLVMを使用しないディスクやパーティションに直接作成したファイルシステムを切り替えるかによって異なります。次に,設定の概要を示します。なお,「参照+更新接続」とは,ボリュームグループを活性化することを意味します。
必要な設定 |
共有ディスクの切り替え方法 |
備考 |
|||
---|---|---|---|---|---|
LVM |
HA Booster |
LVMを使用しないディスク,パーティション |
|||
ボリュームグループの設定 |
ボリュームグループの作成 |
切り替えるボリュームグループを作成します。 |
制御グループに登録するデバイス上に,ボリュームグループを作成します。※1 |
設定は不要です。 |
「(1) ボリュームグループの設定」を参照してください。 |
/etc/lvm/lvm.confファイルの編集 |
システム起動時に自動的に参照+更新接続しないように設定します。 |
システム起動時に自動的に参照+更新接続するように設定します。※1 |
設定は不要です。 |
||
HA Boosterの制御グループの設定 |
設定は不要です。 |
設定します。 |
設定は不要です。 |
「(2) HA Boosterの制御グループの設定」を参照してください。 |
|
ファイルシステムの設定 |
設定します。 |
設定します。 |
設定します。 |
ファイルシステムを切り替える場合に必要です。 「(3) ファイルシステムの設定」を参照してください。 |
|
キャラクタ型スペシャルファイルの設定※2 |
HAモニタのユーザコマンドを作成し,サーバ起動時にバインド,サーバ停止時にアンバンドするように設定します。 |
システム起動時にバインドするように設定します。 |
HAモニタではキャラクタ型スペシャルファイル(rawデバイス)を制御しません。キャラクタ型スペシャルファイルを使用する場合は,ユーザコマンドなどでの制御を検討してください。 |
キャラクタ型スペシャルファイルを切り替える場合に必要です。 「(4) キャラクタ型スペシャルファイルの設定」を参照してください。 |
- 注※1
-
LVMと併用する場合に該当します。
- 注※2
-
RHEL9以降のバージョンの場合は,キャラクタ型スペシャルファイルを使用できません。
(1) ボリュームグループの設定
(a) ボリュームグループの作成
LVMで切り替えるボリュームグループの作成
共有ディスクの切り替えは,ボリュームグループ単位で実行されるため,システム管理者はOSのコマンドでボリュームグループを作成する必要があります。
ボリュームグループを作成するときは,次の事項に従ってください。
-
複数の異なるサーバで系切り替え構成にする場合,各サーバが使用するデータは異なるボリュームグループに配置するよう,共有ディスクを構成してください。
ただし,同じサーバグループ内でリソースサーバを使用する場合は,各サーバが使用するデータを同じボリュームグループに配置できます。
-
共有ディスク上に作成するボリュームグループの名称を両方の系で同じにしてください。
-
共有ディスク上に作成するボリュームグループは,HAモニタが制御します。このため,システム起動時,ボリュームグループに自動的に参照+更新接続をしない設定にする必要があります。設定するためには,/etc/lvm/lvm.confファイルを編集してください。
HA Boosterで切り替えるボリュームグループの作成
HA Boosterを使用する場合,制御グループ単位で共有ディスクを切り替えます。LVMと併用する場合,制御グループに登録するデバイス上に,ボリュームグループを作成します。作成したボリュームグループは,システム起動時,自動的に参照+更新接続する設定にする必要があります。設定するためには,/etc/lvm/lvm.confファイルを編集してください。
/etc/lvm/lvm.confファイルについては,「(b) /etc/lvm/lvm.confファイルの編集」および「(c) /etc/lvm/lvm.confファイルの編集例」を参照してください。
(b) /etc/lvm/lvm.confファイルの編集
HAモニタが制御する共有ディスクについて,次の設定となるように,/etc/lvm/lvm.confファイルの"auto_activation_volume_list"を編集してください。
-
HA Boosterの制御対象のボリュームグループ(制御グループに登録したデバイスの上のボリュームグループ):
システム起動時に,ボリュームグループを自動的に参照+更新接続(活性化)するように設定する。
-
HA Boosterの制御対象外のボリュームグループ:
システム起動時に,ボリュームグループを自動的に参照+更新接続(活性化)しないように設定する。
(c) /etc/lvm/lvm.confファイルの編集例
LVMを使用する場合の/etc/lvm/lvm.confファイルの編集例を示します。
OSがRed Hat Enterprise Linux server 7.1の場合の例を次に示します。
- 編集前(システム上のすべてのボリュームグループを自動的に参照+更新接続する設定)
-
activation { ・ ・ # If auto_activation_volume_list is defined but empty, no volumes will be # activated automatically and --activate ay/-a ay will do nothing. # # auto_activation_volume_list = [] # If auto_activation_volume_list is defined and it's not empty, only matching # volumes will be activated either automatically or by using --activate ay/-a ay. # # "vgname" and "vgname/lvname" are matched exactly. # "@tag" matches any tag set in the LV or VG. # "@*" matches if any tag defined on the host is also set in the LV or VG # # auto_activation_volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ] ・ ・ }
- 編集後(ボリュームグループを自動的に参照+更新接続しない場合)
-
activation { ・ ・ # If auto_activation_volume_list is defined but empty, no volumes will be # activated automatically and --activate ay/-a ay will do nothing. # # auto_activation_volume_list = [] # If auto_activation_volume_list is defined and it's not empty, only matching # volumes will be activated either automatically or by using --activate ay/-a ay. # # "vgname" and "vgname/lvname" are matched exactly. # "@tag" matches any tag set in the LV or VG. # "@*" matches if any tag defined on the host is also set in the LV or VG # # auto_activation_volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ] auto_activation_volume_list = [] ・ ・ }
- 編集後(vg01とvg02を自動的に参照+更新接続する場合)
-
activation { ・ ・ # If auto_activation_volume_list is defined but empty, no volumes will be # activated automatically and --activate ay/-a ay will do nothing. # # auto_activation_volume_list = [] # If auto_activation_volume_list is defined and it's not empty, only matching # volumes will be activated either automatically or by using --activate ay/-a ay. # # "vgname" and "vgname/lvname" are matched exactly. # "@tag" matches any tag set in the LV or VG. # "@*" matches if any tag defined on the host is also set in the LV or VG # # auto_activation_volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ] auto_activation_volume_list = [ "vg01", "vg02" ] ・ ・ }
OSがRed Hat Enterprise Linux server 7.2の場合の例を次に示します。
- 編集前(システム上のすべてのボリュームグループを自動的に参照+更新接続する設定)
-
# Configuration section activation. activation { ・ ・ # Configuration option activation/auto_activation_volume_list. # Only LVs selected by this list are auto-activated. ・ ・ # Example # volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ] # # This configuration option does not have a default value defined. ・ ・ }
- 編集後(ボリュームグループを自動的に参照+更新接続しない場合)
-
# Configuration section activation. activation { ・ ・ # Configuration option activation/auto_activation_volume_list. # Only LVs selected by this list are auto-activated. ・ ・ # Example # volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ] # # This configuration option does not have a default value defined. auto_activation_volume_list = [] ・ ・ }
- 編集後(vg01とvg02を自動的に参照+更新接続する場合)
-
# Configuration section activation. activation { ・ ・ # Configuration option activation/auto_activation_volume_list. # Only LVs selected by this list are auto-activated. ・ ・ # Example # volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ] # # This configuration option does not have a default value defined. auto_activation_volume_list = [ "vg01", "vg02" ] ・ ・ }
OSがRed Hat Enterprise Linux server 7.3~7.7,8.1~8.6,および9.1の場合の例を次に示します。
- 編集前(システム上のすべてのボリュームグループを自動的に参照+更新接続する設定)
-
# Configuration section activation. activation { ・ ・ # Configuration option activation/auto_activation_volume_list. ・ ・ # Example # auto_activation_volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ] # # This configuration option does not have a default value defined. ・ ・ }
- 編集後(ボリュームグループを自動的に参照+更新接続しない場合)
-
# Configuration section activation. activation { ・ ・ # Configuration option activation/auto_activation_volume_list. ・ ・ # Example # auto_activation_volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ] # # This configuration option does not have a default value defined. auto_activation_volume_list = [] ・ ・ }
- 編集後(vg01とvg02を自動的に参照+更新接続する場合)
-
# Configuration section activation. activation { ・ ・ # Configuration option activation/auto_activation_volume_list. ・ ・ # Example # auto_activation_volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ] # # This configuration option does not have a default value defined. auto_activation_volume_list = [ "vg01", "vg02" ] ・ ・ }
(2) HA Boosterの制御グループの設定
HA Boosterを使用する場合,制御グループ単位で共有ディスクを切り替えます。HAモニタは,制御グループのアクセス権限をサーバ単位で変更することで,共有ディスクを制御します。
HA Boosterの制御グループには,ディスクデバイスを登録します。サーバごとに,制御グループを独立させてください。制御グループへの登録方法については,HA Booster関連のドキュメントを参照してください。
なお,LVMによる切り替えだけを使用し,HA Boosterによる切り替えを使用しない場合は,この設定は不要です。
(3) ファイルシステムの設定
共有ディスク上のファイルシステムを使用する場合,OSに対してファイルシステムの設定をする必要があります。
ファイルシステムの切り替え制御では,HAモニタがマウント・アンマウントします。したがって,システム起動時に自動的にマウントしないように設定してください。設定方法は,OSのマニュアルを参照してください。
HAモニタが制御するファイルシステムを/etc/fstabファイルに指定する場合,次の点に注意してください。
-
第3フィールド(ファイルシステムタイプ)には,"ignore"を指定しないでください。"ignore"を指定した場合,HAモニタが実行するfsckコマンドが失敗し,ファイルシステムを使用できないことがあります。
-
第6フィールド(OS起動時のfsck順序)は指定しないか,"0"を指定してください。1以上の値を指定した場合,現用系でファイルシステムをマウント中に待機系のOSが起動すると,fsckが実施されます。これによって,共有ディスクのデータ破壊が起こるおそれがあります。
(4) キャラクタ型スペシャルファイルの設定
LVMまたはHA Boosterを使用する場合のキャラクタ型スペシャルファイルの設定※について説明します。
- 注※
-
RHEL9以降のバージョンの場合は設定できません。
キャラクタ型スペシャルファイルは,使用する条件によってバインド・アンバインドの要否やタイミングが異なります。
キャラクタ型スペシャルファイルを使用する条件と,バインド・アンバインドの要否を,次の表に示します。
キャラクタ型スペシャルファイルを使用する条件 |
バインド・アンバインドの要否 |
|
---|---|---|
HA Boosterが管理する制御グループにない共有ディスク上 |
システム起動時ではなく,ボリュームグループに参照+更新接続をした時点でバインドし,ボリュームグループの切り離しをした時点でアンバインドします。HAモニタのユーザコマンドで設定します。 また,ボリュームグループを切り離す前にアンバインドする必要があるため,HAモニタの環境設定,およびサーバ対応の環境設定のdeviceoff_orderオペランド※にreverseを設定する必要があります。 キャラクタ型スペシャルファイルを使用するすべてのサーバに対して設定してください。 |
|
HA Boosterが管理する制御グループにある共有ディスク上 |
システム起動時に,次のファイルなどを用いてキャラクタ型スペシャルファイルをバインドします。アンバインドは不要です。
|
- 注※
-
HAモニタの環境設定のdeviceoff_orderオペランドについては,「8.3.1 HAモニタの環境設定(sysdef)」を参照してください。また,サーバ対応の環境設定のdeviceoff_orderオペランドについては,「8.4.1 サーバ対応の環境設定(servers)」を参照してください。
以降に,キャラクタ型スペシャルファイルの設定に関するユーザコマンドについて説明します。ユーザコマンドの作成方法についての詳細は,「6.20 ユーザコマンドの作成」を参照してください。
(a) ユーザコマンドの発行タイミング
次のタイミングでOSのrawコマンドが発行されるよう,ユーザコマンドを設定します。
キャラクタ型スペシャルファイルのバインド
-
実行サーバの起動時(-s start)(サーバ種別:online)
-
待機サーバの系切り替え処理開始時
-
実行サーバでサーバ障害が発生(-a start)(サーバ種別:standby)
-
実行系で系障害が発生(-h start)(サーバ種別:standby)
-
実行系から待機系に計画系切り替えを実行(-w start)(サーバ種別:standby)
-
キャラクタ型スペシャルファイルのアンバインド
-
実行サーバの終了時
-
実行サーバでサーバ障害が発生(-a start)(サーバ種別:online)※
-
実行系から待機系に計画切り替えを実行(-w start)(サーバ種別:online)
-
実行サーバでサーバ障害が発生(系切り替え不可)(-o start)(サーバ種別:online)
-
実行サーバが正常終了(-e start)(サーバ種別:online)
-
実行サーバが計画終了(-p start)(サーバ種別:online)※
-
-
待機サーバの起動時(-s start)(サーバ種別:standby)
-
待機サーバの系切り替え失敗時(-f start)(サーバ種別:standby)
- 注※
-
モニタモードのサーバまたはリソースサーバの場合,渡されないパラメタであり,このタイミングでのアンバインドは不要です。
(b) ユーザコマンドのコーディング例
サーバ(LinuxTP1)に対して,共有ディスク上(/dev/vg10)でキャラクタ型スペシャルファイル(/dev/raw/raw1)を論理ボリューム(lvol0)にバインドする場合の,ユーザコマンドのコーディング例を次に示します。
このコーディング例は,サンプルファイルとしてHAモニタのサンプルファイル用ディレクトリの下に,usrcommand_raw_bindのファイル名で格納されています。
# サーバ識別名の定義 SERV="LinuxTP1" # サーバ識別名:LinuxTP1 # ユーザ名 USER_NAME="TP1user" # ユーザ名:TP1管理者またはHiRDB管理者 # デバイス名称の定義 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 # デバイスの所有者を変更 chown $USER_NAME "$1" } # 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コマンド
キャラクタ型スペシャルファイルがバインドされるのを待ちます。
-
chownコマンド
キャラクタ型スペシャルファイルの所有者を変更します。所有者の変更は,OSのudevの機能で行います。udevの設定については,OSのマニュアルを参照してください。
また,バインドしたキャラクタ型スペシャルファイルの所有者を指定のユーザに設定しています。
func_unbindでは,キャラクタ型スペシャルファイルがアンバインドするまで,次の処理を1秒間隔で10回リトライしています。
-
fuserコマンド
系切り替え時に,キャラクタ型スペシャルファイルを使用するプロセスが存在するとアンバインドできないため,共有ディスクの切り離しに失敗します。このため,fuserコマンドでキャラクタ型スペシャルファイルを使用しているすべてのプロセスを強制停止します。
-
sleepコマンド
キャラクタ型スペシャルファイルがアンバインドされるのを待ちます。
-
rawコマンド
キャラクタ型スペシャルファイルをアンバインドします。
なお,このコーディング例では,なんらかの要因でバインド処理に10秒以上要した場合,最後に実行されるchownコマンドによる権限変更に失敗します。このままサーバの起動を継続する設定の場合※,サーバがrawデバイスにアクセスするときまでエラーに気づけません。
- 注※
-
サーバ環境設定のuoc_neckを省略,またはnouseを指定。
このため,次のことを検討してください。
-
chownコマンドによる権限変更に失敗したタイミングでサーバの起動を中止するように,サーバ環境設定のuoc_neckにuseを指定する。
なお,サンプルのユーザコマンドでは,最後に実行するchownコマンドの結果がユーザコマンドの結果となっていますが,chownコマンドの後に処理を記述するなど,サンプルから変更している場合は,ユーザコマンドの結果にchownコマンドの結果などが反映されるように考慮してください。
-
サーバ環境設定のuoc_neckをuseにしない場合,エラー発生に気づけるようにユーザコマンド内でsyslogなどにメッセージを出力する。
-
必要に応じて,キャラクタ型スペシャルファイルがアクセス可能になるまでリトライする時間を変更してください。