クラスタアプリケーション実行時のトラブルについて対処法を説明します。
■トラブル一覧
No. | 現象 | Solaris | Linux |
---|---|---|---|
クラスタアプリケーションがフェイルオーバするが、原因がわからない | ○ | ○ | |
引継ぎネットワークリソースを使用するクラスタアプリケーションが Online にならない | ○ | - | |
リソースの異常発生時、または、ノードの停止時に、クラスタアプリケーションが他ノードにフェイルオーバしない | ○ | ○ | |
ノードを起動してもクラスタアプリケーションが Online にならない | ○ | ○ | |
Oracle RAC のクラスタアプリケーションが、RMS 起動時に正常に動作しない | ○ | ○ | |
hvenv.local ファイルを変更後、RMS が起動できなくなった | ○ | ○ | |
RMS のメッセージが syslog に出力される | ○ | ○ | |
StandbyTransitions 属性に StartUp が設定されていないクラスタアプリケーションが、RMS の起動時に Standby 状態に遷移した | ○ | ○ | |
一定時間内にクラスタアプリケーションが Offline にならない場合、shutdown により自動フェイルオーバしない | ○ | ○ | |
クラスタアプリケーションを構成するすべてのノードで RMS が起動しないと、クラスタアプリケーションが自動起動しない | ○ | ○ | |
クラスタに登録されているアプリケーションを起動すると、アプリケーション起動時に設定している環境変数LANG=jaが有効にならない | ○ | ○ | |
クラスタアプリケーションが Online-Standby にならず、Online-Offline になる | ○ | ○ | |
クラスタアプリケーションの状態が Inconsistent になる | ○ | ○ | |
移動待機構成においてクラスタアプリケーションの切替えが発生した場合、切替えが発生したアプリ以外の待機が Offline となる | ○ | ○ | |
クラスタアプリケーション停止時に、切替えが発生しない | ○ | ○ | |
プロシジャリソースに登録しているアプリケーションのプロセスを強制停止させても、プロセスが再起動しない(状態遷移も行われない) | ○ | ○ | |
プロセス監視リソースを定義したクラスタアプリケーションを起動したところ、コンソールに 2207 番のメッセージが表示され、Faulted 状態になった | ○ | - | |
クラスタアプリケーションの AutoSwitchOver 属性に "ShutDown" を設定しているにもかかわらず、ノードをシャットダウンさせてもクラスタアプリケーションのフェイルオーバが行われない | ○ | ○ | |
Fsystem リソースのリソース故障が発生しましたというメッセージが出力され、クラスタアプリケーションがフェイルオーバしたが原因がわからない | ○ | ○ | |
Fsystem リソースが故障となりフェイルオーバした際に、切替え先でもリソース故障が発生する | ○ | ○ | |
全ノードを再起動した際、本来は運用系ノードで Online 状態になるクラスタアプリケーションが、待機系ノードで Online 状態になった | ○ | ○ | |
Cmdline リソースの状態が Standby にならない | ○ | ○ | |
Cmdline リソースを設定したクラスタアプリケーションの起動に失敗する | ○ | ○ | |
userApplication に AutoSwitchOver 属性を設定しているにもかかわらず、切替えが実行されない | ○ | ○ | |
2:1運用待機のクラスタ構成で、Oracle と ListManagerを別々のクラスタアプリケーションで起動させたときに、Oracle の起動が完了する前に ListManager の起動が開始し、Oracle への接続エラーとなり起動に失敗する | ○ | - | |
ファイルシステムのマウントに失敗し、クラスタアプリケーションが起動できない | ○ | - | |
クラスタ環境を NFS サーバとして使用し、NFS クライアントから NFS マウントを行っているまま userApplication を待機系へ切り替えた後、NFS クライアントで NFS マウントが正しく行われない | ○ | - | |
Oracle リソースに異常が発生し、クラスタアプリケーションが Faulted 状態になる | ○ | ○ | |
クラスタアプリケーションを構成するすべてのノードでクラスタアプリケーションが Faulted 状態となる | ○ | - | |
共用ディスクを追加し、Fsystem リソースのマウントポイントに追加後、クラスタアプリケーションが起動できない | ○ | ○ | |
Fsystem リソースの Online 処理が失敗する | ○ | ○ | |
I/O フェンシング機能を使用する userApplication でリソース故障が発生する | ○ | ○ |
check スクリプトで監視しているプロセスは、クラスタフアプリケーションの offline 処理で停止してください。
フェイルオーバが発生した場合、原因となったリソースに関係するログファイルを確認してください。
ログファイルの参照方法については、"第9章 RMS に関するトラブル情報収集" を参照してください。
Cmdline リソースの場合、check スクリプトで監視しているプロセスが異常終了した原因を確認し、そのプロシジャが正常に動作するかプログラムの見直しを行ってください。プロセス監視リソースに障害が発生した場合は、監視しているプログラムが異常終了した原因を確認してください。Gds リソース、Gls リソースに障害が発生した場合は、それぞれの機能のマニュアルを参照してエラーの原因を確認してください。
なお、フェイルオーバにより、待機ノードが運用となり、業務が継続して運用可能な状態であれば、PRIMECLUSTER としては正常動作です。
引継ぎネットワークリソースを使用するクラスタアプリケーションを構築したが、クラスタアプリケーション を起動すると、IP アドレスの Online 処理に失敗して Online にならない。このとき switchlog には以下のメッセージが出力されていた。
ERROR: There is no interface interface in /usr/opt/reliant/etc/hvipalias, aborting startup.: ====
(SCR, 9): ERROR: FAULT REASON: failed to execute script <PreCheckScript> with resource <app1>: Exited with a non-zero code: 1
userApplication Configuration Wizard または RMS Wizard Tool を使用して該当のクラスタアプリケーション に適切な AutoSwitchOver 属性を設定してください。AutoSwitchOver 属性の詳細については、"PRIMECLUSTER 導入運用手引書" の "属性の説明" を参照してください。
ノード起動時に RMS を自動起動させるために、/opt/SMAW/SMAWRrms/bin/hvenv.local ファイルに export HV_RCSTART=1 を設定するか、HV_RCSTART の設定を削除します。
また、RMS 起動時に、クラスタアプリケーションが自動的に online にさせるために、userApplication Configuration Wizard または RMS Wizard Tool を使用してクラスタアプリケーションの AutoStartUp 属性を Yes に設定します。
ノード起動時にクラスタアプリケーションを自動的に起動する場合には、上記の両方を設定してください。
Oracle RAC のクラスタアプリケーションにおいて、RMS を起動すると AutoStartUp 属性が No にもかかわらず、その subApplication が Online になった。一方クラスタアプリケーションは Online にはならず、Inconsistent となった。
RMS を起動する前に、RAC を Oracle のコマンドを使用して直接起動していたことが原因です。
Oracle を起動する場合は、必ず RMS のコマンド (hvswitch(1M)) を使用してください。
hvenv.local ファイルを変更後、RMS が起動できなくなった。このとき switchlog に以下のメッセージが出力されていた。
(ADC, 3): ERROR: Remote host <nodename> reported the checksum (X) which is different from the local checksum (Y).
原因として以下の可能性が考えられます。
RMS は、タイマ割込みが毎秒発生することをチェックしています。時刻変更によりタイマの割込み間隔が不規則になると、本メッセージが出力されることがあります。NTP の設定を見直してください。
クラスタアプリケーションの StandbyTransitions 属性に StartUp が設定されていない場合にも、AutoStartUp 属性が Yes に設定されている場合は、RMS 起動時にクラスタアプリケーションが Standby 状態に遷移します。
Cluster Admin の RMS メインウィンドウから [Offline (hvutil -f)] を実行するか、hvutil(1M) コマンドを-f オプションで実行して、Standby 状態に遷移したアプリケーションを Offline 状態にしてください。
shutdown により自動フェイルオーバしない原因としては、RMS の環境変数 RELIANT_SHUT_MIN_WAIT の値が小さいことが考えられます。
クラスタアプリケーションの AutoSwitchOver 属性に Shutdown を定義することで、クラスタアプリケーションはshutdown を契機にフェイルオーバします。しかし、RMS の環境変数 RELIANT_SHUT_MIN_WAIT の値以内にクラスタアプリケーションが Offline 状態にならない場合は、RMS の強制停止処理が実行され、shutdown はするものの、クラスタアプリケーションは自動フェイルオーバしません。この場合、以下のように、hvshut コマンドがタイムアウトしたため RMS を強制停止する旨のメッセージが /var/adm/messages(Solaris)、あるいは /var/log/messages(Linux) に出力されます。
[/var/adm/messages] または [/var/log/messages]
scfreport shutdown was executed.
(SWT, 42): NOTICE: hvshut -l has been invoked on host fuji2RMS.
(ADM, 103): NOTICE: app1: Shutdown in progress. AutoSwitchOver (ShutDown) attribute is set, invoking a switchover to next priority host
(US, 18): NOTICE: app1: starting Offline processing.
(ADC, 51): WARNING: hvshut utility has timed out.
(ADC, 52): NOTICE: Waiting for application <app1> to finish its <RequestOffline> before shutdown.
(ADM, 101): NOTICE: Processing forced shutdown request for node fuji2RMS.
(BM, 48): NOTICE: RMS monitor has been normally shut down.
クラスタアプリケーションの Offline 処理が終了するのに必要な時間を見積もり、RMS 環境変数 RELIANT_SHUT_MIN_WAIT に設定してください。
参照
RELIANT_SHUT_MIN_WAIT の詳細については、以下のマニュアルの“グローバル環境変数”の“RELIANT_SHUT_MIN_WAIT”を参照してください。
PRIMECLUSTER 4.3A30 以降 :“PRIMECLUSTER RMS 導入運用手引書”
PRIMECLUSTER 4.3A20 以前 :“PRIMECLUSTER 活用ガイド<クラスタ構築・運用時の留意点>”
RMS 環境変数の参照/変更方法については、“PRIMECLUSTER RMS 導入運用手引書”を参照してください。
PRIMECLUSTER では RMS 起動時に、環境変数 LANG=C,LC_ALL=C を設定しており、 ロケールの設定でLANGよりLC_ALLの設定が優先されるためです。
ロケールの設定を行いたい場合は、Cmdline リソースのスクリプト内で環境変数 LC_ALLの設定を行ってください。ロケールの設定方法の詳細については、各OSのマニュアルを参照してください。
RMS Wizard のクラスタアプリケーションのリソース設定にて、STANDBYCAPABLE が設定されていない可能性があります。
クラスタアプリケーションを Online-Standby 運用する場合、STANDBYCAPABLE の設定が必要です。
■Solaris の場合
Cmdline リソースを使用する場合、設定の詳細は "PRIMECLUSTER 導入運用手引書 (Oracle Solaris)" の "Cmdlineリソースの作成" を参照してください。
プロシジャリソースを使用する場合、設定の詳細は "PRIMECLUSTER 導入運用手引書 (Oracle Solaris)" の "プロシジャリソースの作成" を参照してください。
■Linuxの場合
Cmdline リソースを使用する場合、設定の詳細は "PRIMECLUSTER 導入運用手引書 (Linux)"の"Cmdlineリソースの設定" を参照してください。
プロシジャリソースを使用する場合、設定の詳細は "PRIMECLUSTER 導入運用手引書 (Linux)"の"プロシジャリソースの設定" を参照してください。
RMS Wizard のクラスタアプリケーションのリソース設定にて、STANDBYCAPABLE は設定されていますか?
Cmdline リソースを使用したクラスタアプリケーションを Online-Standby 運用する場合、ALLEXITCODES の設定が必要です。
■Solaris の場合
設定の詳細は "PRIMECLUSTER 導入運用手引書 (Oracle Solaris)" の "Cmdlineリソースの作成" を参照してください。
■Linux の場合
設定の詳細は "PRIMECLUSTER 導入運用手引書 (Linux)" の "Cmdlineリソースの設定" を参照してください。
RMS Wizard のクラスタアプリケーションの設定にて、StandbyTransitions が設定されていない可能性があります。
クラスタアプリケーションを Online-Standby 運用する場合、StandbyTransitions の設定が必要です。詳細については以下を参照してください。
"PRIMECLUSTER 導入運用手引書" の "スタンバイ運用のクラスタアプリケーション作成"
RMS Wizard のクラスタアプリケーションの設定にて、StandbyTransitions は設定されていますか?
2 ノードの相互待機構成で業務優先度を設定している場合、クラスタアプリケーションはOnline-Offline になります。これは PRIMECLUSTER の仕様です。
2 ノードの相互待機構成でクラスタアプリケーションを Online-Standby 状態で使用する場合は、業務優先度の設定を解除してください。詳細については以下を参照してください。
■Solaris の場合
"PRIMECLUSTER 導入運用手引書 (Oracle Solaris)" の "クラスタアプリケーションの排他関係を設定する"
■Linux の場合
"PRIMECLUSTER 導入運用手引書 (Linux)" の "スタンバイ運用のクラスタアプリケーション作成"
2 ノードの相互待機構成で、業務優先度を設定していませんか?
クラスタアプリケーションの起動前にリソースが Online になっている場合、クラスタリソースの状態に矛盾が発生し、クラスタアプリケーションが Inconsistent になる可能性があります。
例えば、ClusterExclusive 属性が "1" に設定されているリソースが、クラスタアプリケーションを起動する前に待機系で Online 状態になっている場合に、クラスタアプリケーションを起動するとクラスタアプリケーションの状態が Inconsistent と表示されます。
矛盾が発生する要因は、クラスタアプリケーション起動前にリソースが Online になっていることです。
Gds リソースを設定している場合、クラスタアプリケーションの起動前に Gds リソースが活性化されている可能性があります。
■Solaris の場合
"PRIMECLUSTER 導入運用手引書 (Oracle Solaris)" の "Gds リソースの作成" で、ディスククラスの用途が排他使用 ”する”と設定されているかどうか確認してください。
また、Gds リソースの設定を CUI で行った場合は、設定前に hvgdsetup コマンドを実行したかどうか確認してください。
■Linux の場合
Gds リソース設定前に hvgdsetup コマンドを実行したかどうか確認してください。詳細は "PRIMECLUSTER 導入運用手引書 (Linux)" の"Gds リソースの設定"を参照してください。
PRIMECLUSTER の仕様です。移動待機構成において、クラスタアプリケーションの切替えが発生した場合、待機ノードにて切替えが発生したアプリケーション以外のアプリケーション状態が Standby にならず、Offline となります。
詳細は、"PRIMECLUSTER 導入運用手引書" の "スタンバイ運用" を参照してください。
Check スクリプトがない場合、アプリケーションの状態 (正常状態、sleep 状態、ハング状態等) を判断することができません。このため、アプリケーションが異常停止しても、クラスタインタコネクトのハートビートが正常に行われている間は切替えが発生しません。
このような状態を回避するため、アプリケーションの状態を監視する Check スクリプトを別途作成し、Cmdline リソースに設定する必要があります。
Check スクリプトの作成方法については、PRIMECLUSTER 4.3A30以降の場合、"PRIMECLUSTER 導入運用手引書"、PRIMECLUSTER 4.3A20以前の場合、"PRIMECLUSTER 活用ガイド<クラスタ構築・運用時の留意点>" を参照してください。
アプリケーションの状態を監視する Check スクリプトを作成していますか?
プロシジャリソースで登録されているアプリケーションのプロセスを停止させても状態遷移は発生しません。また、プロセスを再起動するといった処理も行いません。Procedure リソースでは、状態遷移の指示タイミングにて exitcode がエラーになった場合にリソースの異常、状態遷移が発生します。
プロシジャリソースはPRIMECLUSTER 4.4以降では、"PRIMECLUSTER 導入運用手引書" の "PRIMECLUSTER 対応製品"、PRIMECLUSTER 4.3以前では、 "PRIMECLUSTER 導入運用手引書" の "PRIMECLUSTER 対応製品一覧表" に記載されている製品をリソース登録する場合に使用されます。
それ以外のアプリケーションをクラスタアプリケーションとして登録したい場合は、Cmdline リソースを使用してください。
また、プロセスの生存監視を行いたい場合は、プロセス監視リソースを使用してください。
プロセス監視リソースの設定画面 ("PRIMECLUSTER 導入運用手引書 (Oracle Solaris)" の "プロセス監視リソースの作成" の "設定方法"を参照)において、起動後直ちに終了してしまうプログラムを起動コマンドに指定したことが考えられます。
例えば、以下の例のような複数のプログラムを起動し、自身は直ちに終了するスクリプトを前述の起動コマンドに指定した場合、プロセス監視リソースを定義したクラスタアプリケーションはその Online 処理に失敗し Faulted 状態になります。
#!/bin/sh
/opt/bin/process0 &
/opt/bin/process1 &
/opt/bin/process2 &
exit 0
プロセス監視機能は、クラスタアプリケーションに対する Online 指示が発行された際、前述の起動コマンドに指定されたプログラムを生存監視対象として認識しそれを起動しようとします。
しかし、前述の例のようにそれが起動後直ちに終了してしまうスクリプトであった場合、プロセス監視機能から見ると、生存監視対象が起動後に突然終了したように見えてしまうため、プロセス監視リソースに異常が発生したと判断し当該リソースを Faulted 状態にします。
前述の起動コマンドに指定できるのは、起動後に動作し続けるプログラムです。
例えば前述の例において process0、process1、process2 が起動後に動作し続けるプログラムであり、それらの生存状態をプロセス監視機能によって監視した場合、それらを別々のプロセス監視リソースとして定義し、各起動コマンドには process0、process1、process2 をそれぞれ指定してください。
クラスタアプリケーションが Fault 状態となっている可能性があります。
クラスタアプリケーションが Fault となった原因を確認し、Fault 状態をクリアしてからシャットダウンを行ってください。
Fsystem リソースで監視しているマウントポイント名が、リネームされた可能性があります。
Fsystem リソースで監視しているマウントポイントは、リネームしないでください。
マウントポイント名を変更する際は、RMS を停止して Fsystem リソースの再作成を行ってください。
Fsystem リソースの Online 処理(マウント処理)に失敗し、fsck が ScriptTimeout 属性の値の範囲で処理が完了しなかったためにリソース故障が発生している可能性があります。
環境に合わせて、ScriptTimeout の値をチューニングしてください。
運用系ノードにおいて、クラスタアプリケーションの Online 処理に失敗した可能性があります。
Online 処理に失敗していないかを、switchlog ($RELIANT_LOG_PATH/switchlog) で確認してください。
Online 処理に失敗していた場合は、その原因を調査し、正常に動作するように対処してください。
Cmdline リソースの Flag である ALLEXITCODES を "Yes" に設定してください。
実行時に異常になった、Cmdline リソースの各種スクリプトを見直してください。
また、手動でスクリプトを実行し、正常に動作する場合は、手動で実行している場合と、実行権限、環境変数等の違いが考えられます。
HaltFlag 属性の値が "No" の場合で、ダブルフォルトが発生した場合は、SF(Shutdown Facility) からの強制停止、強制停止後の切替え処理も実行されません。
HaltFlag 属性の値を "Yes" に設定してください。
2:1 運用待機構成で、Oracle のリソース (Wizard for Oracle) と ListManager のリソース (cmdline リソース) が、別々のクラスタアプリケーションに登録されているために、起動順番が保障できない設定となっています。
Oracle のリソースと ListManager のリソースを同一のクラスタアプリケーションとして登録してください。
ファイルシステムに不整合が生じているため、ファイルシステムのマウントに失敗し、クラスタアプリケーションの起動が行えない可能性があります。
ファイルシステムの修復を行った後にクラスタアプリケーションを起動してください。
【コマンド実行例(Solaris で UFS のファイルシステムを修復する場合)】
# fsck -F ufs -y /dev/sfdsk/class0001/rdsk/volume0001
NFS クライアントから NFS マウント時に使用される Fsystem リソースと Gls リソースが異なる userApplication に登録されている可能性があります。
NFS マウントで使用される Fsystem リソースと、Gls リソースを 1 つの userApplication に登録してください。
Oracle が使用しているファイルシステムへ アーカイブファイルが出力される等の理由で、ファイルシステムがいっぱいになっている可能性があります。
Oracle が使用しているファイルシステムから不要なファイルを削除してください。
1 つの NIC に対し、引継ぎネットワークリソースと Global Link Services (以降、GLS) の設定が行われているため、引継ぎネットワークリソースの活性化に失敗している可能性があります。
引継ぎネットワークリソースと、GLS で使用する NIC を別々の NIC に分けて再設定してください。
追加したマウントポイントのファイルシステムが作成されていない可能性があります。
手動でマウントを行い、ファイルシステムが作成されているかどうか確認し、作成されていない場合はファイルシステムを作成してください。
Fsystem リソースに設定されたマウントポイントに、ファイルシステムが作成されていない可能性があります。
Fsystem リソースに設定されたマウントポイントにファイルシステムを作成してください。
マウントポイント配下のファイルを使用しているプロセスが存在するか、カレントディレクトリとして動作しているプロセスが存在すると、マウントに失敗し、Online処理が異常になる場合があります。
userApplication が OfflineまたはStandbyの状態のとき、Fsystemリソースの制御対象であるマウントポイント配下のファイルを使用したり、プロセスのカレントディレクトリとして動作させないよう、運用を見直してください。
同一のホスト上のゲスト OS (ゲストドメイン)間でクラスタシステムを構成している環境では、I/O フェンシング機能を使用することはできません。
クラスタシステムを構成するゲスト OS (ゲストドメイン)が、異なるホスト上で動作するよう、構成を変更してください。
クラスタアプリケーションが制御する共用ディスク( LUN )を、クラスタシステム以外のシステムからも制御するよう誤って設定されている可能性があります。
クラスタアプリケーションが制御する共用ディスク( LUN )を、クラスタシステム以外のシステムから制御されていないか確認してください。