PRIMECLUSTER Disaster Recovery Edition 説明書
目次 索引 前ページ次ページ

第2章 DBサーバの構築

2.4 preonlineスクリプトの作成

1) 留意事項

DBサーバのuserApplicationを作成する場合、以下の留意事項があります。

◆ userApplicationの分離と連携

バックアップ運用を以下の状態で行う場合、userApplicationはOracleとACMの2つに分離する必要があります。

下の図のように、"Oracleサービス" と "ACMサービス" を分けると、各ノード上でそれぞれのサービスが独立して動作します。例えば、Oracleリソースに異常が発生すると、Oracleサービスのみ待機系に切替りACMサービスは運用系で処理を継続するため、バックアップができない状態になります。

以下にuserApplicationの構成例を示します。

◆ センタ切替え時のRECセッション状態チェック

メインセンタからバックアップセンタに切り替える場合、バックアップセンタ側のディスク(ETERNUS)は、REC先のままの状態となっているとサーバへのマウントが失敗し、userApplicationの起動ができません。

◆ ファイルシステムの整合性チェック

メインセンタからバックアップセンタに切り替える場合、REC先であるバックアップセンタ側の領域(GFS領域) は、リストア後の状態と同じであるためパーティション情報の再設定(sfxadm) とファイルシステムの整合性チェック (fsck) が必要になります。

リストア後の状態については、「PRIMECLUSTER Global File Services 説明書」の "5.4 リストア後の設定変更" を参照してください。

2) 回避方法

上記の3つの留意事項は、userApplicationの事前起動処理(preonlineスクリプト)で回避することができます。以下にpreonlineスクリプトの例を示します。

◆ メインセンタ側のpreonlineスクリプト例

#!/bin/sh
#DR検証用スクリプト
#サイト                 :メイン
#クラスタサービス       :Oracle
#スクリプトタイプ       :Preonlineスクリプト
#説明
#本ノード上でACMサービスが動作していない場合、ACMサービスを本ノード
#上でOnlineにする。
#
#メインサイト側に対してRECが有効になっている場合(reverseモード)、Oracle
#起動を抑止する。
#
#注意事項
#本スクリプトはACMが起動しているノード上で実行すること。
#
#クラスタ関連パラメタ
ACM_SERVICE=userApp_1
MYNODE=`uname -n`RMS
WAITTIME=15
RETRY=8

#ACM関連パラメタ
#SWSTGNODEはACMが使用するクラスタ引継ぎIPアドレスに対応するノード名
SWSTGNODE=drdbacm
export SWSTGNODE

#Filesystem関連パラメタ
SDXVOL_CMD="/usr/sbin/sdxvolume"
SFXADM_CMD="/usr/sbin/sfxadm"
FSCK_CMD="/usr/sbin/fsck -F sfxfs -o p"
FILESYS_TBL="/export/home/dr/proc/sfxfs.tbl"
SDXONL_TBL="/export/home/dr/proc/sdxonl.tbl"

DEBUG=0

#####################################################
# ACM起動チェック
#####################################################

if [ $DEBUG = 0 ]
then

hvassert -s $ACM_SERVICE Online
if [ $? != 0 ]
then
# 本ノード上でACMサービスを起動
         hvswitch $ACM_SERVICE  $MYNODE
         I=0;
         while :
         do
                  sleep $WAITTIME
                  hvassert -s $ACM_SERVICE Online
                  if [ $? = 0 ]
                  then
                           break;
                  fi
                  I=`expr $I + 1`
                  if [ $I = $RETRY ]
                  then
                           logger -p user.err -t "DR Service" "Can not start ACM service on this node"
                           exit 1
                  fi
         done
fi

fi

######################################################
# RECモードチェック
######################################################

ELEMS=`/opt/FJSVswsrp/bin/swsrpstat | /usr/bin/awk '{printf"%s,%s",$4,$5}'`

for i in $ELEMS
do
         DEST=`echo $i | cut -d, -f1`
         MODE=`echo $i | cut -d, -f2`
         if [ $DEST = "reverse" ];
         then
                  if [$MODE != "replicated" ];
                  then
                           # Oracle起動を抑止する。
                           logger -p user.err -t "DR Service"  "Cluster service Oracle can not be started since ACM mode is set to reserve"
                           exit 1
                  fi
         fi
done

#####################################################
# sfxadm fsck 実行
#####################################################

SDX_OFFLINE()
{
if [ -f $1 ];
then
         for i in `cat $1`
         do
                  SDX_CLASS=`echo $i | cut -d, -f1`
                  SDX_VOLUME=`echo $i | cut -d, -f2`
                  $SDXVOL_CMD -F -c $SDX_CLASS -v $SDX_VOLUME
         done
fi
return 0
}

if [ -f $SDXONL_TBL ] ;
         then
         rm $SDXONL_TBL
         touch $SDXONL_TBL
fi

for i in `cat $FILESYS_TBL`
do
         SDX_CLASS=`echo $i | cut -d/ -f4`
         SDX_VOLUME=`echo $i | cut -d/ -f6`
         $SDXVOL_CMD -N -c $SDX_CLASS -v $SDX_VOLUME
         if [ $? -ne 0 ];
         then
                  logger -p user.err -t "DR Service"  "GDS Online err CLASS=${SDX_CLASS} VOLUME=${SDX_VOLUME}"
                  SDX_OFFLINE $SDXONL_TBL
                  # Oracle起動を抑止する。
                  exit 1
         fi
         echo "$SDX_CLASS,$SDX_VOLUME" >> $SDXONL_TBL

done

for i in `cat $FILESYS_TBL`
do
         $SFXADM_CMD $i
         if [ $? -ne 0 ];
         then
                  logger -p user.err -t "DR Service"  "GFS sfxadm err DEV=$i"
                  SDX_OFFLINE $SDXONL_TBL
                  # Oracle起動を抑止する。
                  exit 1
         fi
         $FSCK_CMD $i
         if [ $? -ne 0 ];
         then
                  logger -p user.err -t "DR Service"  "filesystem check err DEV=$i"
                  SDX_OFFLINE $SDXONL_TBL
                  # Oracle起動を抑止する。
                  exit 1
         fi
done

SDX_OFFLINE $SDXONL_TBL

# Oracle起動を許可する。
exit 0

◆ バックアップセンタ側のpreonlineスクリプト例

#!/bin/sh
#DR検証用スクリプト
#サイト                 :バックアップ
#クラスタサービス       :Oracle
#スクリプトタイプ       :Preonlineスクリプト
#
#説明
#バッアップサイト側に対してRECが有効になっている場合(regularモード)、Oracle
#起動を抑止する。
#
#注意事項
#本スクリプトはACMが起動しているノード上で実行すること。

#ACM関連パラメタ
#SWSTGNODEはACMが使用するIPアドレスに対応するノード名
SWSTGNODE=drdbacm3
export SWSTGNODE

#Filesystem関連パラメタ
SFXADM_CMD="/usr/sbin/sfxadm"
FSCK_CMD="/usr/sbin/fsck -F sfxfs -o p"
FILESYS_TBL="/export/home/dr/proc/sfxfs.tbl"

######################################################
# RECモードチェック
######################################################

ELEMS=`/opt/FJSVswsrp/bin/swsrpstat | /usr/bin/awk '{printf"%s,%s",$4,$5}'`

for i in $ELEMS
do
         DEST=`echo $i | cut -d, -f1`
         MODE=`echo $i | cut -d, -f2`
         if [ $DEST = "regular" ];
         then
                  if [$MODE != "replicated" ];
                  then
                           # Oracle起動を抑止する。
                           logger -p user.err -t "DR Service"  "Cluster service Oracle can not be started since ACM mode is set to reserve"
                           exit 1
                  fi
         fi
done

#####################################################
# sfxadm fsck 実行
#####################################################

for i in `cat $FILESYS_TBL`
do
         $SFXADM_CMD $i
         if [ $? -ne 0 ];
         then
                  logger -p user.err -t "DR Service"  "GFS sfxadm err DEV=$i"
                  # Oracle起動を抑止する。
                  exit 1
         fi
         $FSCK_CMD $i
         if [ $? -ne 0 ];
         then
                  logger -p user.err -t "DR Service"  "filesystem check err DEV=$i"
                  # Oracle起動を抑止する。
                  exit 1
         fi
done

# Oracle起動を許可する。

exit 0

上記のpreonlineスクリプトは例です。実際のpreonlineスクリプトは業務に合わせて作成してください。

◆ 定義ファイル例 (/export/home/dr/proc/sfxfs.tbl)

/dev/sfdsk/DB_class0003/rdsk/ora_cnt01
/dev/sfdsk/DB_class0003/rdsk/oraredo01
/dev/sfdsk/DB_class0003/rdsk/oradata01
/dev/sfdsk/DB_class0003/rdsk/oraindx02
/dev/sfdsk/DB_class0004/rdsk/ora_cnt02
/dev/sfdsk/DB_class0004/rdsk/oraredo02
/dev/sfdsk/DB_class0004/rdsk/oraindx01
/dev/sfdsk/DB_class0004/rdsk/oratemp
/dev/sfdsk/DB_class0004/rdsk/oraundo
/dev/sfdsk/DB_class0004/rdsk/oradata02
/dev/sfdsk/DB_class0004/rdsk/oraarchufs

◆ シングルノードクラスタ上のuserApplication作成時の注意点

バックアップセンタ側のクラスタシステムはシングルノードクラスタなので、通常のuserApplicationを作成する場合とは、リソース属性の設定値に違いがあります。

以下にシングルノードクラスタ上のuserApplicationを作成する場合の注意点を説明します。


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005