この章では、Oracle Clusterwareフレームワークの高可用性をアプリケーションに拡張する方法について説明します。 これを行うには、Oracle Clusterwareコマンドを使用して、アプリケーションをラップします。 つまり、Oracle DatabaseおよびOracle Real Application Clusters(Oracle RAC)と同じ高可用性メカニズムを使用することによって、カスタム・アプリケーションの高可用性を実現できます。 この章で説明するとおり、Oracle Clusterwareを使用して、アプリケーションの監視、再配置および再起動を実行できます。この章の内容は次のとおりです。
|
注意: Oracle Clusterware APIデモは、Windowsではサポートされていません。 |
Oracle Clusterwareには、すべてのアプリケーションを保護するためのインフラストラクチャを提供する高可用性フレームワークが含まれます。 Oracle Clusterwareで管理されるアプリケーションは、システムの起動時に起動されます。 また、Oracle Clusterwareは、アプリケーションを監視して、アプリケーションを常に使用可能な状態にします。 たとえば、あるプロセスが失敗した場合、Oracle Clusterwareはカスタマイズされたスクリプトに基づいて、そのプロセスの再起動を試行します。 クラスタ内のノードに障害が発生した場合、通常は障害が発生したノード上で実行されるプロセスを、別のノード上で再起動するようにプログラムできます。 監視の頻度、アプリケーションの起動と停止およびアプリケーションの依存性を構成できます。
アプリケーションの高可用性を実現するには、まずアプリケーションを識別するアプリケーション・プロファイルを作成します。 アプリケーション・プロファイルでは、2つ目のコンポーネントであるアクション・プログラムが使用されます。アクション・プログラムには、Oracle Clusterwareがアプリケーションを監視する方法およびアプリケーションのステータスの変化に対してOracle Clusterwareが対処する方法が記述されます。 アプリケーション・プロファイル属性はOCRに格納されます。 アプリケーション・プロファイル、アクション・プログラムおよびその他の主なOracle Clusterware高可用性コンポーネントの定義は、次のとおりです。
アクション・プログラム: プログラムの位置、監視の頻度およびOracle Clusterwareによってアプリケーションで実行される起動アクションと停止アクションを定義するプログラム。 起動アクションによってアプリケーションが起動され、停止アクションによってアプリケーションが停止され、監視またはチェック・アクションによってアプリケーションのステータスがチェックされます。
アプリケーション・プロファイル: アプリケーションの属性を記述するOracle Clusterwareのリソース・ファイル。 アプリケーション・プロファイルは、アプリケーションの動作に影響を及ぼし、様々なアクションを実行するためにOracle Clusterwareが実行する必要がある他のプログラムまたはスクリプトを識別します。
権限: 高可用性操作のために、Oracle Clusterwareによるアプリケーションのすべてのコンポーネントの制御を許可するアクセス権および使用権限(他のユーザーIDでプロセスを起動する権限を含む)。 Oracle Clusterwareは、権限を持つユーザーとして実行し、正しい起動および停止プロセスでアプリケーションを制御する必要があります。 これは通常、LinuxおよびUNIXプラットフォームではrootユーザー、Windowsプラットフォームでは管理者としてOracle Clusterwareを実行する必要があることを意味します。
リソースの依存性: 操作の順序を示すリソースまたはアプリケーション間の関係。 たとえば、起動操作時には、親リソースが起動してから、それに依存するリソースが起動します。 停止しようとしているリソースに依存するリソースが実行されている場合、リソースの停止が回避されます。 ただし、crs_stop -fコマンドを実行すると、停止しようとしているリソースに依存するすべてのリソースが最初に停止され、強制終了することができます。
Oracle Cluster Registry(OCR): Oracle Clusterwareおよび他のOracle RAC管理システムで使用される構成情報を格納するメカニズム。 OCRでは、キー/値のペアの階層型ネームスペースが使用されます。 キーおよびサブキーによって、user権限、group権限およびother権限が適用されます。
テンプレート: crs_profileコマンドによって生成されるテキスト・ファイル。アプリケーション・プロファイル属性のデフォルト値が含まれます。
|
関連項目: Oracle Clusterwareコマンドを使用して、アプリケーションの高可用性を実現する方法の詳細は、付録D「高可用性Oracle Clusterwareのコマンドライン・リファレンスおよびC API」を参照してください。 |
Oracle Clusterwareコマンドを使用して、カスタム・アプリケーションの起動、停止、再配置およびステータスのチェックを行うことができます。 これを行うには、アプリケーション・プロファイルでアプリケーションを定義します。 プロファイルでは、Oracle Clusterwareがアプリケーションを管理する方法に影響を及ぼす属性を定義します。 その後、crs_registerコマンドを使用して、アプリケーション情報をOCRに登録します。 アプリケーション・プロファイルを作成するには、次の手順を実行します。
crs_profileコマンドを実行して、アプリケーション・プロファイルを作成します。 Oracle Clusterwareプロファイルの必須およびオプションのエントリのリストは、表5-1を参照してください。
crs_registerコマンドを使用して、アプリケーション・プロファイルを登録します。
crs_startコマンドを実行して、アプリケーション・プロファイルを開始します。Oracle Clusterwareによって、アプリケーションを起動するためにプロファイルに含めたstartコマンドが実行されます。
Oracle Clusterwareは、定期的にアクション・プログラム・コマンドを実行して、アプリケーションのステータスをチェックします。
チェック時またはノード障害が発生した場合、Oracle Clusterwareは、アプリケーションを現行のノード上で再起動するか、または他のノードに再配置してリカバリします。
crs_stopコマンドを実行してアプリケーションを停止した場合、Oracle Clusterwareはstop action programコマンドを実行して、アプリケーションを停止します。
アプリケーションの可用性は、次のように管理できます。
クラスタまたはノードの起動時にリソースを起動するように指定します。
障害が発生したアプリケーションを再起動します。
アプリケーションを現行の場所で実行できない場合は、アプリケーションを他のノードに再配置します。
Oracle Clusterwareを使用する場合、完全な管理権限は必要ありません。 すべてのユーザーが、リソースまたはアプリケーションを作成できます。 ただし、他のユーザーがアプリケーション上でOracle Clusterwareを使用できるようにするには、作成者または所有者が、他のユーザーまたはユーザー・グループに対して権限を付与する必要があります。 また、権限が定義されているプロファイルを変更できるのは、権限を持つユーザーのみです。 次の項では、アプリケーション・プロファイルの詳細を示します。
アプリケーション・プロファイルには、Oracle Clusterwareがアプリケーションを起動、管理および監視する方法を定義する属性が含まれます。 1つの属性は、Oracle Clusterwareがアプリケーションを操作するために使用するアクション・プログラムの位置を示します。 Oracle Clusterwareは、アクション・プログラムを使用して、アプリケーションのステータスを監視またはチェックして、アプリケーションを起動および停止します。 Oracle Databaseは、指定された場所に格納されたファイルからアプリケーション・プロファイルを読み取り、その情報をOCRに格納します。 プロファイル内のOracle Clusterwareコマンドは、リソースの依存性を指定したり、アプリケーションまたはサービスが、依存するリソースに対するアクセス権を失った場合に、アプリケーションまたはサービスで発生した問題を判別するために使用します。
プロファイルの詳細は、次の項を参照してください。 プロファイルを作成する場合は、crs_profileコマンドの使用をお薦めします。詳細は、付録D「高可用性Oracle Clusterwareのコマンドライン・リファレンスおよびC API」を参照してください。
属性は、プロファイル・ファイル内の名前=値エントリで定義されるため、ファイル内のエントリは任意の順序で指定できます。 アプリケーション・プロファイルの主な属性の一部を次に示します。
REQUIRED_RESOURCESパラメータの設定で定義される、アプリケーションに必須のリソース。 必須リソースが使用不可になると、Oracle Clusterwareは、アプリケーションを再配置または停止します。 必須リソースは、各ノードに定義されます。
PLACEMENTパラメータの設定で定義される、アプリケーションを起動または再起動するノードの選択規則。 アプリケーションは、配置場所の候補に指定したノードからアクセス可能である必要があります。
Oracle ClusterwareがHOSTING_MEMBERSパラメータの設定で定義されるアプリケーションを起動またはフェイルオーバーする場合に、優先順位に従って使用されるノードのリスト。 PLACEMENTパラメータで定義される配置ポリシーがfavoredまたはrestrictedである場合に、このリストが使用されます。
アプリケーション・プロファイルのファイル名は、resource_name.capの書式で指定する必要があります。ここで、resource_nameは、自分またはシステムがアプリケーションに割り当てた名前です。capは、ファイルの接尾辞です。 プロファイル内のOracle Clusterwareコマンドでは、完全なファイル名ではなく、resource_nameなどの名前によってアプリケーションが参照されます。
アプリケーション・プロファイルには、オプションおよび必須のプロファイル属性があります。 オプションのプロファイル属性は、プロファイルに指定しなくてもかまいません。 デフォルト値が指定されたオプションのプロファイル属性は、登録時にそのリソース・タイプのテンプレートおよび汎用テンプレートに格納されている値とマージされます。 デフォルト値は、テンプレートから導出されます。
各リソース・タイプには、TYPE_resource_type.capという名前のテンプレート・ファイルがあります。このファイルは、Oracle Clusterwareホームのcrsディレクトリ下のtemplateサブディレクトリに格納されています。 すべてのタイプのリソースで使用される値の汎用テンプレート・ファイルは、TYPE_generic.capというファイル名の同じ場所に格納されています。
表5-1に、Oracle Clusterwareのアプリケーション・プロファイル属性をアルファベット順で示します。 この表には、属性が必須かどうか、デフォルト値および説明を属性ごとに示します。
表5-1 アプリケーション・プロファイルの属性
| 属性 | 必須かどうか | デフォルト値 | 範囲 | 説明 |
|---|---|---|---|---|
|
必須 |
なし |
該当なし |
リソースを起動、停止およびチェックするためのリソース固有のスクリプト。 アクション・プログラム・ファイルのフルパスを指定できます。 指定しない場合、デフォルトのパス(権限を持つプロファイルの場合は |
|
|
オプション |
0 |
|
|
|
|
|
オプション |
restore |
該当なし |
クラスタを再起動した後に、Oracle Clusterwareによってリソースを自動的に起動する必要があるかどうかを示します。
注意: |
|
オプション |
60 |
|
リソースのアクション・プログラムのチェック・エントリ・ポイントが繰返し実行される時間間隔(秒単位)。 チェックの間隔を短い値に設定して、頻繁にチェックされるようにした場合、なんらかのオーバーヘッドを伴う可能性があります。 属性を無効にするには、 |
|
|
オプション |
リソースの名前 |
該当なし |
リソースの説明。 |
|
|
オプション |
0 |
|
Oracle Clusterwareがリソースの再起動またはフェイルオーバーを試行する前に待機する時間(秒単位)。 即時フェイルオーバーを有効にするには、 |
|
|
オプション |
0 |
|
Oracle Clusterwareが障害しきい値を適用する間隔(秒単位)。 値が |
|
|
オプション |
0 |
|
指定された |
|
|
場合による |
なし |
該当なし |
リソースのホスティングが可能なクラスタ・ノードのリスト。リストは、空白で区切って順序付けします。 ノード名は、通常、物理ホスト名と同じです。 ただし、ノード名を変更することもできます。 たとえば、ベンダーのクラスタウェアが存在する場合、Oracle Clusterwareのノード名はベンダーのクラスタウェアのノード名と同じです。 ベンダーのクラスタウェアの実装に、物理ノード名がノード名として使用されるとはかぎりません。 ベンダーのクラスタウェアのノード名を表示するには、 |
|
|
必須 |
なし |
該当なし |
アプリケーションの名前。 アプリケーション名は、 |
|
|
オプション |
なし |
該当なし |
配置を決定する際にこのリソースで使用されるリソース名のリスト。リストは、空白で区切って順序付けします。 最大58個のユーザー定義のリソースを指定できます。 |
|
|
オプション |
balanced |
該当なし |
配置ポリシー( |
|
|
オプション |
なし |
該当なし |
このリソースが依存するリソース名のリスト。リストは、空白で区切って順序付けします。 このプロファイルで必須リソースとして使用される各リソースは、Oracle Clusterwareに登録する必要があります。登録しない場合、リソースのプロファイル登録が失敗します。 |
|
|
オプション |
1 |
|
Oracle Clusterwareがリソースの再配置を試行する前に、単一のクラスタ・ノード上でリソースの再起動を試行する回数。 |
|
|
|
|
該当なし |
Oracle Clusterwareデーモンによって保持される、リソースが再起動された回数を示すカウンタ。 0(ゼロ)から |
|
|
オプション |
60 |
任意の正の整数 |
アクション・スクリプトを実行する最大時間(秒単位)。 スクリプトが指定された時間内に完了しなかった場合、エラー・メッセージが戻されます。 このタイムアウトは、すべてのアクション・スクリプトのエントリ・ポイント(起動、停止およびチェック)に適用されます。 値が指定されていない場合、Oracle Clusterwareではデフォルト値の60秒が使用されます。 |
|
|
|
|
該当なし |
起動アクション・スクリプトを実行できる最大時間(秒単位)。 スクリプトが指定された時間内に完了しなかった場合、エラー・メッセージが戻されます。 この属性が指定されていなかったり、0秒が指定されている場合、Oracle Clusterwareでは |
|
|
|
|
該当なし |
停止アクション・スクリプトを実行できる最大時間(秒単位)。 スクリプトが指定された時間内に完了しなかった場合、エラー・メッセージが戻されます。 この属性が指定されていなかったり、0秒が指定されている場合、Oracle Clusterwareでは |
|
|
必須 |
なし |
該当なし |
|
|
|
|
|
任意の正の整数 |
Oracle Clusterwareがリソースを安定しているとみなすまでに、リソースが稼働中である必要がある時間。 s: 秒(デフォルト)m: 分h: 時間d: 日w: 週例: デフォルトは |
プロファイルは任意の場所に格納できます。また、クラスタが認識可能なファイル・システム上に格納する必要はありません。 次の項で説明するとおり、Oracle RACではプロファイルのデフォルトの位置が提供されています。 LinuxおよびUNIXシステムではroot権限、Windowsシステムでは管理者権限を持つプロファイルのデフォルトの位置は、Oracle Clusterwareホームのcrsディレクトリ下のprofileサブディレクトリです。 root権限または管理者権限を持たないプロファイルのデフォルトの位置は、Oracle Clusterwareホームのcrsディレクトリ下のpublicサブディレクトリです。 アクション・スクリプトはすべてのノードで同じディレクトリに格納され、同じファイルである必要があります。
エントリ・ポイントを使用すると、リソースの起動、停止およびチェックを行う方法を指定できます。 シェルまたはPerlスクリプト、C++関数、Java関数を使用するなど、様々な方法でエントリ・ポイントを実装できます。 Oracle Clusterwareには、次のエントリ・ポイントがあります。
START: 開始(オンライン)エントリ・ポイントでは、リソースをオンラインにします。
STOP: 停止(オフライン)エントリ・ポイントでは、リソースをオフラインにします。
CHECK: チェック(監視)・エントリ・ポイントでは、リソースの状態を監視します。
この項の例では、postmanという名前のアプリケーションを作成します。 Oracle Clusterwareは、/opt/email/bin/crs_postmanスクリプトを使用して、アプリケーションの起動、停止、およびアプリケーションが実行中かどうかの監視を行います(action_script)。 Oracle Clusterwareは、check_interval属性の設定に従って、5秒ごとにpostmanをチェックします。 障害が発生した場合、Oracle Clusterwareはpostmanを1回のみ再起動します。 Oracle Clusterwareは、postmanアプリケーションを配置するノードを決定する際、optional_resourcesパラメータの値を考慮します。 可能な場合、Oracle Clusterwareは同じノード上にpostmanを配置します。 最終的に、postmanを実行するには、リソースnetwork1が、required_resourcesパラメータに設定されたノードと同じノードで実行されている必要があります。 リソースnetwork1に障害が発生するか、または別のノードに再配置された場合、Oracle Clusterwareはpostmanアプリケーションを停止または移動します。
アクション・プロファイルを作成するには、crs_profileコマンドを使用します。 例5-1では、crs_profileコマンドを使用して、電子メールの監視に使用されるpostmanアクション・スクリプトのアプリケーション・プロファイルを作成します。
例5-1 crs_profileコマンドを使用したアクション・プロファイルの作成
$ crs_profile -create postman -t application -B /opt/email/bin/crs_postman \ -d "Email Application" -r network1 -l application2 \ -a postman.scr -o ci=5,ft=2,fi=12,ra=2
この例で作成するアプリケーション・プロファイル・ファイルの内容は、次のとおりです。
NAME=postman TYPE=application ACTION_SCRIPT=/oracle/crs/script/postman.scr ACTIVE_PLACEMENT=0 AUTO_START=always CHECK_INTERVAL=5 DESCRIPTION=email app FAILOVER_DELAY=0 FAILURE_INTERVAL=12 FAILURE_THRESHOLD=2 HOSTING_MEMBERS= OPTIONAL_RESOURCES=application2 PLACEMENT=balanced REQUIRED_RESOURCES=network1 RESTART_ATTEMPTS=2 SCRIPT_TIMEOUT=60
アクション・スクリプトの最適な例はxclockスクリプトです。これは、すべてのLinuxおよびUNIXプラットフォームにおけるデフォルト・バイナリである簡単なアクション・スクリプトです。 例5-2では、xclockアクション・スクリプトの内容を示しています。
#!/bin/bash
# start/stop/check script for xclock example
# To test this change BIN_DIR to the directory where xclock is based
# and set the DISPLAY variable to a server within your network.
BIN_DIR=/usr/X11R6/bin
LOG_DIR=/tmp
BIN_NAME=xclock
DISPLAY=yourhost.domain.com:0.0
export DISPLAY
if [ ! -d $BIN_DIR ]
then
echo "start failed"
exit 2
fi
PID1=`ps -ef | grep $BIN_NAME | grep -v grep | grep -v xclock_app | awk '{ print $2 }'`
case $1 in
'start')
if [ "$PID1" != "" ]
then
status_p1="running"
else
if [ -x $BIN_DIR/$BIN_NAME ]
then
umask 002
${BIN_DIR}/${BIN_NAME} & 2>${LOG_DIR}/${BIN_NAME}.log
status_p1="started"
else
echo `basename $0`": $BIN_NAME: Executable not found"
fi
fi
echo "$BIN_NAME: $status_p1"
;;
'stop')
if [ "${PID1}" != "" ]
then
kill -9 ${PID1} && echo "$BIN_NAME daemon killed"
else
echo "$BIN_NAME: no running Process!"
fi
;;
'check')
if [ "$PID1" != "" ]
then
echo "running"
exit 0
else
echo "not running"
exit 1
fi
;;
*)
echo "Usage: "`basename $0`" {start|stop|check}"
;;
esac
Oracle Clusterwareは、配置ポリシーおよびホスティング・ノードのリストとともに必須リソースのリストを使用して、アプリケーションのホスティングに適切なクラスタ・ノードを判別します。 必須リソースは、アプリケーションが稼働または起動しているノード上でONLINEステータスである必要があります。
ホスティング・ノード上の必須リソースに障害が発生すると、Oracle Clusterwareは現行のノードでアプリケーションの再起動を試行します。 RESTART_ATTEMPTSが0に設定されていない場合、およびアプリケーションが現行のノードで起動できない場合、Oracle Clusterwareは、必須リソースが提供されている別のノードにアプリケーションのフェイルオーバーを試行します。 適切なノードが存在しない場合は、Oracle Clusterwareはアプリケーションを停止します。 この場合、Oracle Clusterwareは、not restartingイベント通知を行います。
強制(-f)オプションを指定してcrs_start、crs_stopまたはcrs_relocateコマンドを使用した場合、必須リソースのリストを使用して、相互依存関係にあるアプリケーション・グループを起動、停止および再配置することもできます。 つまり、他の必須リソースを使用するように一連のリソースを構成できます。 たとえば、リソースAおよびBがリソースCに依存するA、BおよびCを構成できます。 -forceオプションを使用してリソースCを停止する場合、このアクションは3つのすべてのリソースを停止します。 crs_relocateコマンドでも同様です。
また、-forceオプションを使用することによって、オンライン依存性を再配置し、必要に応じて、リソースを起動できます。 たとえば、ノードAがプライマリ・ノードとして割り当てられているリソースVIP_Aが、かわりにノードBで実行されていると想定します。 ノードAのインスタンス・リソースでcrs_startを実行すると、この操作は失敗します。 これは、VIP_AリソースがノードAのインスタンスに必須であり、VIP_Aリソースがオンラインであるためです。 ただし、リソースは、リソースが実行できないノード上にあります。 ただし、インスタンス Bでcrs_start -fを実行すると、強制的にVIP_Aリソースが再配置され、インスタンスが起動されます。
ネットワーク経由でアプリケーションにアクセスしている場合、依存リソースとして、アプリケーションの仮想インターネット・プロトコル(VIP)・アドレスを作成することをお薦めします。 前述の例では、アプリケーションのVIPアドレスはnetwork1です。 次のコマンドを実行して、アプリケーションのVIPアドレスを作成します。
crs_profile –create network1 -t application \
-a CRS_home/bin/usrvip \
-o oi=eth0,ov=138.3.83.78,on=255.255.240.0
|
注意: VIPユーザーの場合、Oracle DatabaseのCRS home/binディレクトリに提供されているusrvipアクション・スクリプトを使用する必要があります。 |
この例では、CRS_HOMEはOracle Clusterwareのインストール環境のホーム・ディレクトリです。 また、eth0はパブリック・ネットワーク・アダプタの名前です。138.3.83.78は、アプリケーションが実行されているノードに関係なく、DNSによって、アプリケーションを検索する新しいホスト名に解決されます。 255.255.240.0は、パブリックIPアドレスのネットマスクです。 oracleユーザーとして、次のようにVIPアドレスをOracle Clusterwareに登録します。
crs_register network1
LinuxおよびUNIXオペレーティング・システムの場合、アプリケーションのVIPアドレス・スクリプトはrootユーザーとして実行する必要があります。 rootユーザーとして、リソースの所有者を次のように変更します。
crs_setperm network1 –o root
rootユーザーとして、oracleユーザーによるこのスクリプトの実行を許可します。
crs_setperm network1 –u user:oracle:r-x
oracleユーザーとして、VIPアドレスを次のように起動します。
crs_start network1
配置ポリシーには、Oracle Clusterwareがアプリケーションを起動するノード、およびノードに障害が発生した後にアプリケーションを再配置するノードを選択する方法が指定されます。 アプリケーション・プロファイルにリストされたすべての必須リソースが使用可能なクラスタ・ノードのみが、アプリケーションの適切なホスティング・ノードとみなされます。 Oracle Clusterwareでは、次の配置ポリシーがサポートされています。
balanced: Oracle Clusterwareは、現在実行中のリソースが最も少ないノードで、アプリケーションを優先的に起動または再起動します。 オプション・リソースに基づいた配置が、最初に検討されます。 次に、実行中のリソースが最も少ないホストが選択されます。 これらの条件に従って優先されるノードが存在しない場合、使用可能なノードが選択されます。
favored: Oracle Clusterwareは、アプリケーション・プロファイルのHOSTING_MEMBERS属性内のノードのリストを参照します。 このノード・リストに存在し、リソースの要件を満たすクラスタ・ノードのみが、配置の対象として検討されます。 オプション・リソースに基づいた配置が、最初に検討されます。 オプション・リソースに基づいた適切なノードが存在しない場合は、ホスティング・ノードの順序によって、アプリケーションを実行するノードが決定されます。 ホスティング・ノードのリストに使用可能なノードが存在しない場合、Oracle Clusterwareはアプリケーションを任意の使用可能なノードに配置します。 このノードはHOSTING_MEMBERSリストに含まれている場合と含まれていない場合があります。
restricted: favoredに類似していますが、ホスティング・リストのノードのいずれも使用可能でない場合、Oracle Clusterwareはアプリケーションを起動または再起動しません。 restrictedの配置ポリシーを使用すると、リストに存在しないノードに手動でアプリケーションを再配置した場合でも、アプリケーションがそのノード上で実行されることはありません。
favoredまたはrestrictedの配置ポリシーを使用するには、HOSTING_MEMBERS属性にホスティング・ノードを指定する必要があります。 balancedの配置ポリシーを使用する場合は、HOSTING_MEMBERS属性にホスティング・ノードを指定しないでください。 アプリケーションが検証されず、登録できなくなります。 ACTIVE_PLACEMENTを1に設定した場合、ノードをクラスタに追加するか、またはクラスタ・ノードを再起動するたびに、アプリケーションの配置が再評価されます。 これによって、Oracle Clusterwareは、ノードが障害からリカバリした後、アプリケーションを優先ノードに再配置できます。
Oracle Clusterwareは、オプション・リソースを使用し、ホスティング・ノードでONLINEステータスであるオプション・リソースの数に基づいて、ホスティング・ノードを選択します。 各ノードのONLINEステータスであるオプション・リソースの数が同じである場合、次のようにオプション・リソースの順序が考慮されます。
Oracle Clusterwareは、各ノード上のオプション・リソースのステータスを、アプリケーション・プロファイルにリストされた先頭のリソースから順番に比較します。
リスト内の連続した各リソースに対して、あるノード上でリソースがONLINEステータスである場合、そのリソースがONLINEステータスでないノードは除外されます。
Oracle Clusterwareは、リソースのホスティングに使用可能なノードが1つになるまで、この方法でリスト内の各リソースを評価します。
オプション・リソースの最大数は58です。
このアルゴリズムによって優先ノードが複数になった場合、リソースは配置ポリシーに従って選択されたノードのいずれかに配置されます。
この項では、Oracle Clusterwareコマンド(start、stopおよびcheck)を解釈するOracle Clusterwareのアクション・プログラムの作成のガイドラインを示します。
Oracle Clusterwareは、ステータス・コードに依存して、アクション・プログラムの終了後にリソースのステータスをONLINEまたはOFFLINEに設定します。 Windowsシステムでは、プログラムは非ブロッキング型である必要があります。これは、WindowsサービスまたはWindowsリソースが、コンソールの対話中にブロックしないことを意味します。
アクション・プログラムは、成功または失敗を示すステータス・コードを戻す必要があります。 たとえば、LinuxまたはUNIXシステムでスクリプトをBourneシェルで作成した場合、プログラムが、失敗にはexit(1)を発行し、成功にはexit(0)を発行する必要があります。 同様に、Windowsシステムでは、アクション・プログラムが、成功には(0)、失敗には(1)のステータスを戻す必要があります。
アプリケーションで障害が発生した後、Oracle Clusterwareは、チェック・パラメータを指定してアクション・プログラムをコールします。 アクション・プログラムは、失敗を示すステータス(1)でOracle Clusterwareに応答します。 この失敗を示すステータスを受信した後、Oracle Clusterwareは、停止パラメータを指定してアクション・プログラムをコールします。 停止リクエストがコールされたときに、アプリケーションが実行されていない場合でも、アクション・プログラムによって、アプリケーションが正常に停止したことを示すステータス(0)が戻されることが重要です。
アクション・プログラムの停止エントリ・ポイントがSCRIPT_TIMEOUT値の秒数内に終了できなかった場合、またはアクション・プログラムによって失敗を示すコードが戻された場合、Oracle Clusterwareは、リソースのステータスをUNKNOWNに設定します。 これは、起動、再配置または停止の操作時に発生する場合があります。 リソースが正常に停止するか、またはリソースが実行されていない場合、アクション・プログラムの停止エントリ・ポイントが成功を示す値で終了していることを確認します。
一部のプラットフォームでは、デーモンまたはサービスは通常、バックグラウンド・プロセスとして起動する必要があります。 ただし、この方法でリソースを起動すると、起動の試行時に成功を示すステータスが常に戻されます。 これは、デフォルトのスクリプトでは、マイナー・エラー(コマンド・パスの綴り間違いなど)は検出されないことを意味します。
LinuxおよびUNIXシステムでは、起動直後にリソースがバックグラウンドに移動しない場合、アプリケーションを起動する行の末尾にアンパサンド(&)を追加すると、バックグラウンドでアプリケーションを起動できます。
Windowsシステムでは、net startを使用して、バックグラウンドで起動する必要があるサービスを起動できます。
コマンドを使用してデーモンまたはサービスをバックグラウンドで起動する場合は、Oracle Clusterwareでスクリプトを使用する前に、スクリプトで使用するコマンドのテストを対話形式で実行し、エラーを排除します。
この項では、Oracle Clusterwareがアクション・プログラムを実行する方法について説明します。 アクション・プログラムに対する最初の引数は、Oracle Clusterwareが実行中のアクションに応じて、start、stopまたはcheckコマンドのいずれかになります。 2番目の引数は、アプリケーションのOracle Clusterwareのリソース名です。 これによって、スクリプトが、Oracle Clusterwareが起動、停止またはチェックを実行するインスタンスを判別できます。アクション・プログラムは、$_CAA_attribute_nameを使用して、環境からOracle Clusterwareのすべてのリソース属性を取得できます。 たとえば、$_CAA_NAMEにはアプリケーション名(スクリプトに対する2番目の引数)が含まれ、$_CAA_HOSTING_MEMBERSにはそのHOSTING_MEMBERS属性が含まれています。
Oracle Clusterwareでは、Oracle Clusterwareアプリケーションでのユーザー定義の属性がサポートされています。ユーザー定義の属性には、USRを含む名前が付きます。 ユーザー定義の属性は、アプリケーションに対するOracle Clusterwareのアプリケーション・プロファイルの一部として格納されます。 これらの属性は、$_USR_attributenameを使用してアクション・プログラム内で参照できます。 ユーザー定義の属性を追加するには、次の構文を使用して、CRS_home/crs/template/application.tdfファイルに追加します。
# # an example user-defined attribute # #!=========================== attribute: USR_EXAMPLE type: string switch: -o example default: required: no
attributeパラメータには、新しい属性の名前が含まれます。 typeパラメータには、ユーザー定義の属性のタイプが定義されます。属性のタイプは次のいずれかになります。
string
boolean
integer: 数値属性
positive_integer: 数値属性(正の整数)
name string
name_list: カンマで区切られた名前のリスト
switchパラメータには、crs_profileコマンドに属性を指定する方法を指定します。 ユーザー定義の属性のrequiredフィールドをnoに設定します。
この項では、Windowsのcrsuserプログラムについて説明します。 crsuserコマンドの構文は、次のとおりです。
crsuser add [domain\]username
たとえば、Windowsシステムでは、ORA_DBAグループおよびローカル管理者グループに含まれているオペレーティング・システム・ユーザーとして、次のコマンドを発行することができます。
C:\> crsuser add oracledomain\oracluster
ユーザーのWindowsパスワードを指定します。 これによって、OracleCRSToken_userサービスが作成されます。このサービスは、Oracle Clusterwareが、指定されたユーザーID(LocalSystemアカウントで実行されていない場合)でOracle Clusterwareリソースを起動するために必要です。 また、crsuserコマンドremove [domain\]usernameを使用して、トークン・サービスおよび登録済ユーザーがリストされるcrsuserリストを削除することもできます。
この項では、Oracle Clusterwareコマンドを使用する方法について説明します。内容は次のとおりです。
Oracle Clusterwareで管理するアプリケーションごとにアプリケーション・プロファイルを作成し、そのプロファイルをOCRに追加する必要があります。crsctl add resourceコマンドを使用して、アプリケーションをOCRに追加します。たとえば、前述の例の電子メール監視アプリケーションを追加するには次のコマンドを入力します。
# crsctl add resource postman
プロファイルを変更した場合、crs_register -uコマンドを再実行して、OCRを更新します。
Oracle Clusterwareに登録されているアプリケーション・リソースを起動するには、crs_startコマンドを使用します。 次に例を示します。
# crs_start postman
次のテキストは、コマンドの出力例です。
Attempting to start 'postman' on node 'rac1' Start of 'postman' on node 'rac1' succeeded.
アプリケーションは現在、rac1という名前のノード上で実行されています。
|
注意: アプリケーション・リソースの名前は、アプリケーションの名前と同じ場合と同じでない場合があります。 |
アクション・プログラムがコールされるたびに、コマンドがSCRIPT_TIMEOUTパラメータに設定された時間待機して、アクション・プログラムから成功または失敗の通知を受け取ります。 障害しきい値を超えたために停止したアプリケーション・リソースは、起動できます。 起動する前に、リソースをcrs_registerに登録する必要があります。
リソースを起動および停止するには、crs_startおよびcrs_stopコマンドを使用します。 Oracle Clusterwareの外部でリソースを手動で起動または停止すると、リソースのステータスを無効にできます。 また、Oracle Clusterwareによって、手動で停止操作を実行したリソースの再起動が試行される場合もあります。
すべての必須リソースが、リソースを起動したノード上でONLINEである必要があります。 REQUIRED_RESOURCESパラメータで識別される必須リソースがOFFLINEの場合、crs_start resource_nameコマンドを実行すると、リソースが起動される前に、必須リソースが起動されます。
crs_startコマンドをリソースで実行すると、リソースのターゲット値がONLINEに設定されます。 Oracle Clusterwareは、startパラメータを指定してアクション・プログラムを実行し、ターゲットと一致するようにステータスの変更を試行します。 リソースが実行中の場合、ターゲットのステータスと現在のステータスの両方がONLINEになります。
使用不可のノード上でのアプリケーションの起動
使用不可のクラスタ・ノード上でアプリケーションを起動した場合、crs_startを実行すると、不確定な結果が戻されます。 この例では、アクション・プログラムの起動セクションが実行されます。ただし、起動の通知がコマンドラインに表示される前に、クラスタ・ノードに障害が発生します。 crs_startコマンドは失敗し、エラーRemote start for resource_name failed on node node_nameが戻されます。 アプリケーションは、実際にはONLINEですが、別のノードにフェイルオーバーされ、アプリケーションが不適切なノードで起動されたかのように表示されます。
クラスタ・ノードでリソースを起動中にそのノードで障害が発生した場合、crs_statコマンドを使用して、クラスタ上のリソースのステータスをチェックします。
crs_relocateコマンドを使用して、アプリケーションおよびアプリケーション・リソースを再配置します。 たとえば、rac2というノードに電子メール監視アプリケーションを再配置するには、次のコマンドを入力します。
# crs_relocate postman -c rac2
アクション・プログラムがコールされるたびに、crs_relocateコマンドがSCRIPT_TIMEOUTパラメータの値に指定された期間待機して、アクション・プログラムから成功または失敗の通知を受け取ります。 再配置の試行は、次の場合に失敗します。
アプリケーションに、初期ノード上でONLINEの必須リソースが存在する
指定されたリソースが必要なアプリケーションが、初期ノード上でONLINEである
アプリケーションおよびその必須リソースを再配置するには、-fオプションを指定してcrs_relocateコマンドを使用します。 Oracle Clusterwareは、ステータスに関係なく、アプリケーションに必要なすべてのリソースを再配置または起動します。
アプリケーションおよびアプリケーション・リソースを停止するには、crs_stopコマンドを使用します。 crs_stopコマンドを完了すると、アプリケーションのステータスはただちにOFFLINEに変わります。 Oracle Clusterwareは、常にリソースのステータスをターゲットのステータスに一致させようとするため、Oracle Clusterwareのサブシステムによって、アプリケーションが停止されます。 次の例では、電子メール・アプリケーションを停止します。
# crs_stop postman
次のテキストは、コマンドの出力例です。
Attempting to stop `postman` on node `rac1` Stop of `postman` on node `rac1` succeeded.
アプリケーションが別のオンライン・アプリケーションの必須リソースである場合、強制(「-f」)オプションを使用しないかぎり、そのアプリケーションを停止できません。 crs_stop -f resource_nameコマンドを他のリソースで必要とされるアプリケーション上で使用する場合、およびこれらのリソースがONLINEである場合、Oracle Clusterwareはアプリケーションを停止します。 また、このアプリケーションを必要とする、すべてのONLINEのリソースも停止されます。
|
注意: Oracle Clusterwareが停止できるのは、アプリケーションおよびアプリケーション・リソースのみです。 Oracle Clusterwareは、ネットワーク、テープまたはメディア・チェンジャ・リソースを停止できません。 |
この項では、Oracle Clusterwareによる再起動の管理を制御する方法について説明します。 アクション・プログラムのいくつかの属性を設定することによって、Oracle Clusterwareが自動的にリソースを再起動しないようにできます。 また、Oracle Clusterwareによるアクション・プログラムの再起動カウンタの管理を制御することもできます。 さらに、Oracle Clusterwareがアクション・スクリプトで実行するstart、stopおよびcheckアクションのタイムアウト値をカスタマイズすることもできます。 内容は次のとおりです。
ノードを停止して再起動すると、Oracle Clusterwareは、ノードの起動直後にリソースを起動します。 これは、リソースが依存するシステム・コンポーネント(ボリューム・マネージャ、ファイル・システムなど)が実行されていない場合、リソースの起動が失敗する場合があるため、適切でない場合もあります。 これは特に、リソースが依存するシステム・コンポーネントをOracle Clusterwareが管理しない場合に該当します。 自動再起動を管理するには、AUTO_START属性を使用して、ノードの再起動時に、Oracle Clusterwareによって自動的にリソースが起動されるかどうかを指定します。
AUTO_STARTの有効な値は次のとおりです。
always: ノードが停止したときのリソースのステータスに関係なく、ノードの再起動時にリソースを再起動します。
restore: ノードが停止したときのリソースのステータスがOFFLINE(STATE=OFFLINE、TARGET=OFFLINEなど)である場合、再起動時にリソースを起動しません。 リソースは、ノードが停止したときのステータスにリストアされます。 リソースは、停止時にONLINEであった場合にのみ起動されます。
never: ノードが停止したときのリソースのステータスに関係なく、Oracle Clusterwareはリソースを再起動しません。
|
注意: always、restoreおよびneverの値は、小文字のみがサポートされています。 |
リソースに障害が発生すると、Oracle Clusterwareは、リソースに障害が発生した回数に関係なく、プロファイル属性RESTART_ATTEMPTSに指定された実行回数のみ、リソースを再起動します。 CRSDプロセスは、内部カウンタを保持して、リソースが再起動された回数を追跡します。 Oracle Clusterwareによってリソースの安定性に基づいて再起動試行カウンタが自動的に管理されるメカニズムが提供されています。 UPTIME_THESHOLD属性を使用して、リソースの安定性を指定します。
UPTIME_THRESHOLD属性の期間は、様々な単位(秒(s)、分(m)、時間(h)、日(d)、週(w)など)で指定できます。 この属性の有効な値の例は、7日間(7d)、5時間(5h)、180分(180m)などです。 期間を数値で指定し、最後の文字として単位(s、m、h、dまたはw)を指定します。
UPTIME_THRESHOLDに設定した期間が経過すると、Oracle ClusterwareはRESTART_COUNTSの値を0(ゼロ)にリセットします。RESTART_COUNTの値がRESTART_ATTEMPTSに設定した値に達すると、Oracle Clusterwareによってアラートが生成されます。
|
注意: RESTART_COUNTの値がRESTART_ATTEMPTSに設定した値に達すると、Oracle ClusterwareはCRSDログ・ファイルにアラートを記録します。 Oracle Clusterwareは、アラート・ファイルにはこのメッセージを記録しません。 |
RESTART_ATTEMPTSおよびRESTART_COUNT属性の障害発生の例を次に示します。
リソースが再起動を繰り返している場合: リソースがアップタイムのしきい値条件を満たさず、RESTART_ATTEMPTSの値で設定された回数再起動した後、リソースが停止します。
ノードに障害が発生するか、またはノードが再起動した場合: リソースが再配置されるか、または同じノード上で再起動されると、Oracle ClusterwareはRESTART_COUNTERの値を0(ゼロ)にリセットします。
crsdプロセスが失敗した場合: RESTART_COUNTとRESTART_ATTEMPTSの両方がOCRに格納されるため、動作に影響は及ぼされません。
Oracle Database 11gより前のリリースがインストールされている場合、次のいずれかの操作を実行して、リリース1(11.1)の属性をプロファイルに追加します。
Oracle Database 11gの属性でリソースを変更して、リソースを再登録します。 これによって、個別のタイムアウトが有効になります。
リソースは、変更しないでください。 これによって、すべてのアクション(起動、停止およびチェック)のタイムアウトとして、SCRIPT_TIMEOUTの値が使用されるOracle Database 11gより前のリリースの動作が保持されます。
アプリケーションおよびアプリケーション・リソースの登録を解除するには、crs_unregisterコマンドを使用します。 アプリケーションまたはリソースがONLINEであるか、または別のリソースの必須リソースである場合、アプリケーションを登録解除することはできません。 次の例では、電子メール・アプリケーションを登録解除します。
# crs_unregister postman
登録解除プロセスによって、OCR上の領域が解放されます。 また、Oracle Clusterwareでリソースが管理されない場合は、クリーンアップ手順としてcrs_unregisterコマンドを実行します。 通常、永続的に停止されているすべてのアプリケーションを登録解除する必要があります。
クラスタ・ノード上のアプリケーションおよびリソースのステータス情報を表示するには、crs_statコマンドを使用します。 次の例では、postmanアプリケーションのステータス情報を表示します。
# crs_stat postman NAME=postman TYPE=application TARGET=ONLINE STATE=ONLINE on rac2
次のコマンドを入力して、すべてのアプリケーションおよびリソースの情報を表形式で表示します。
# crs_stat -t
次のテキストは、コマンドの出力例です。
Name Type Target State Host ---------------------------------------------------------------- cluster_lockd application ONLINE ONLINE rac2 dhcp application OFFLINE OFFLINE
次のコマンドを入力して、次の情報を確認します。
アプリケーション・リソースが再起動された回数
障害間隔内に、アプリケーション・ソースに障害が発生した回数
アプリケーションまたはリソースの再起動可能な回数または障害発生の許容回数の最大数
アプリケーションまたはリソースのターゲット・ステータスおよび通常のステータスの情報
# crs_stat -v
冗長な内容を表形式で表示するには、次のコマンドを入力します。
# crs_stat -v -t
次のテキストは、コマンドの出力例です。
Name Type R/RA F/FT Target State Host ---------------------------------------------------------------------- cluster_lockd application 0/30 0/0 ONLINE ONLINE rac2 dhcp application 0/1 0/0 OFFLINE OFFLINE named application 0/1 0/0 OFFLINE OFFLINE network1 application 0/1 0/0 ONLINE ONLINE rac1
次のコマンドを入力して、OCRに格納されたアプリケーション・プロファイルの情報を表示します。
# crs_stat -p
次のテキストは、コマンドの出力例です。
NAME=cluster_lockd TYPE=application ACTION_SCRIPT=cluster_lockd.scr ACTIVE_PLACEMENT=0 AUTO_START=restore CHECK_INTERVAL=5 DESCRIPTION=Cluster lockd/statd FAILOVER_DELAY=30 FAILURE_INTERVAL=60 FAILURE_THRESHOLD=1 HOSTING_MEMBERS= OPTIONAL_RESOURCES= PLACEMENT=balanced REQUIRED_RESOURCES= RESTART_ATTEMPTS=2 SCRIPT_TIMEOUT=60 ...