6.10.1 共有ディスク設定

共有ディスクの設定は,共有ディスクをLVMで切り替えるか,HA Boosterで切り替えるかによって異なります。次に,設定の概要を示します。

表6-5 共有ディスクの設定の概要

必要な設定共有ディスクの切り替え方法備考
LVMまたはLVM2HA Booster
ボリュームグループの設定ボリュームグループの作成切り替えるボリュームグループを作成します。制御グループを構成するボリュームグループを作成します。(1) ボリュームグループの設定」を参照してください。
/etc/rc.sysinitファイルの編集システム起動時に自動的に参照+更新接続しないように設定します。システム起動時に自動的に参照+更新接続するように設定します。
HA Boosterの制御グループの設定設定は不要です。設定します。(2) HA Boosterの制御グループの設定」を参照してください。
ファイルシステムの設定設定します。設定します。ファイルシステムを切り替える場合に必要です。
(3) ファイルシステムの設定」を参照してください。
キャラクタ型スペシャルファイルの設定
LVMの場合
システム起動時にバインドするように設定します。
LVM2の場合
HAモニタのユーザコマンドを作成し,サーバ起動時にバインド,サーバ停止時にアンバインドするように設定します。
システム起動時にバインドするように設定します。キャラクタ型スペシャルファイルを切り替える場合に必要です。
(4) キャラクタ型スペシャルファイルの設定」を参照してください。

注※ LVMまたはLVM2と併用する場合に該当します。


<この項の構成>
(1) ボリュームグループの設定
(2) HA Boosterの制御グループの設定
(3) ファイルシステムの設定
(4) キャラクタ型スペシャルファイルの設定

(1) ボリュームグループの設定

(a) ボリュームグループの作成

LVMまたはLVM2で切り替えるボリュームグループの作成

共有ディスクの切り替えは,ボリュームグループ単位で実行されるため,システム管理者はOSのコマンドでボリュームグループを作成する必要があります。

ボリュームグループを作成するときは,次の事項に従ってください。

HA Boosterで切り替えるボリュームグループの作成

HA Boosterを使用する場合,制御グループ単位で共有ディスクを切り替えます。LVMまたはLVM2と併用する場合,この制御グループを構成するボリュームグループを作成します。HA Boosterが管理するボリュームグループについては,システム起動時,自動的に参照+更新接続する設定にする必要があります。/etc/rc.sysinitファイルを編集してください。

(b) /etc/rc.sysinitファイルの編集

/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回リトライしています。

func_unbindでは,キャラクタ型スペシャルファイルがアンバインドするまで,次の処理を1秒間隔で10回リトライしています。