イベント FailoverClustering 1230 について

こんにちは。Windows プラットフォーム サポート担当です。

本日は、クラスター環境で発生するイベント ID 1230 (ソース:Microsoft-Windows-FailoverClustering) についてご紹介します。

 

- イベント ID 1230

クラスターではリソースに対する操作 (正常性チェック LooksAlive, IsAlive など) で応答が無い場合に、リソースの応答を待ち続けることでクラスターの動作が停止することを防ぐためにタイムアウト値 DeadlockTimeout が設けられています。

リソースの操作が DeadlockTimeout 値を超えて完了しないとタイムアウトが発生しイベント ID 1230 が記録されます。

 

- イベント ID 1230 の原因調査

イベント ID 1230 が記録された時のクラスター ログからは何の操作でタイムアウトが発生したかを確認することができますが、リソースの操作が停止しタイムアウトした原因はイベント ログやクラスター ログなどから調査することが困難となります。

 

// リソース Disk01 への操作 LOOKSALIVE がタイムアウトしたことを示すクラスター ログ

ERR   [RHS] RhsCall::DeadlockMonitor: Call LOOKSALIVE timed out for resource 'Disk01'.

 

例えば、上記のようにクラスター ログからはディスク リソース 'Disk01' に対する LooksAlive がタイムアウトしたことが分かりますが、LooksAlive がタイムアウトした原因については判断することができず、別途調査が必要となります。

一般的にディスク リソースの操作でタイムアウトが発生する原因としては、ウィルス対策ソフトなどのフィルター ドライバーによりディスクへの I/O が阻害される問題や、ストレージ側の高負荷により応答を返せない問題が多く報告されています。

この場合、ウィルス対策ソフトを停止し事象の切り分けを行うことや、ストレージ側での事象発生時の負荷状況などを確認していただく必要がありますが、OS の観点からは事象発生時にメモリダンプを採取いただくことでタイムアウト発生時のメモリ情報からリソースへの操作が何の処理で待たされていたのか調査を進めることが可能です。

※ タイムアウトの一例としてディスク リソースを上げていますが、メモリダンプの調査はリソースの種類に依存せず有効です。

 

以下、イベント ID 1230 が記録された時に自動でメモリダンプ採取を行う方法を紹介します。

運用中の環境などでイベント ID 1230 が記録され再現性がある場合には、原因調査のために下記設定を行い事象再現時のメモリダンプを採取して弊社サポートまでお問い合わせいただくことをご検討ください。

 

- イベント ID 1230 記録時に自動でメモリダンプを採取する方法

メモリダンプの設定については、下記ブログをご参考ください。

※ メモリダンプの種類は完全メモリダンプを採取いただくことを推奨いたしますが、完全メモリダンプへの設定変更が難しい場合には、まずはカーネル メモリダンプの採取をお願いします。

 

<参考> メモリ ダンプ ファイルを生成する方法について

https://blogs.technet.microsoft.com/askcorejp/2014/08/10/339/

 

< Windows Server 2008, Windows Server 2008 R2 >

イベント ID 1230 が記録された際に、タスクから NotMyFault を実行し、ブルースクリーンを発生させメモリダンプを採取します。

※ NotMyFault はマイクロソフトから提供しているブルースクリーンを強制的に発生させるツールです。

 

NotMyFault によるメモリ ダンプ自動採取手順

--------------------------------------------------

※ 事前にメモリダンプの設定を確認します。

 

1. NotMyFault ツールをダウンロードします。

下記の URL より、NotMyFault.zip をダウンロードします。

 

https://download.sysinternals.com/files/NotMyFault.zip

 

2. ツールをサーバーに設置します。

ダウンロードした Notmyfault.zip を解凍し、解凍したフォルダをメモリダンプ採取対象のサーバーの任意の場所 (D:\Notmyfault など) に配置します。

 

3. イベント トリガーを設定します。

以下の手順ではソース : Microsoft-Windows-FailoverClustering、ID: 1230 のイベントの出力に対応して NotMyFault を自動で実行しブルー スクリーンを発生させます。

 

a) イベント ビューアー から "ソース : Microsoft-Windows-FailoverClustering、ID : 1230" を右クリックし、[このイベントにタスクを設定] をクリックします。

b) [基本タスクの作成ウィザード] が起動します。

c) [名前] と [説明] を必要に応じて編集し、[次へ] をクリックします。

d) [特定イベントのログへの記録時] で [次へ] をクリックします。

e) [操作] で [プログラムの開始] を選択し [次へ] をクリックします。

f) [プログラムの開始] の [プログラム/スクリプト] の [参照] をクリックし、解凍した Notmyfault フォルダから NotMyfault.exe を選択します。

 

(例:32 bit OS 用パス)

"D:\NotMyFault\NotMyfault.exe"

※ Notmyfault を D ドライブに置いた場合

(例:64 bit OS 用パス)

"D:\NotMyFault\NotMyfault64.exe"

※ Notmyfault を D ドライブに置いた場合

 

g) [引数の追加] に /AcceptEula /crash を入力して [次へ] をクリックします。

h) [概要] で下記にチェックを入れ [完了] をクリックします。

□[完了] をクリックしたときに、このタスクの [プロパティ] ダイアログを開く

i) 作成したタスクのプロパティで [全般] タブの [セキュリティ オプション] で下記にチェックを入れます。     

□ユーザーがログオンしているかどうかにかかわらず実行する

□最上位の特権で実行する

k) タスクを実行するユーザー アカウントの情報を求められますので、ローカル管理者のアカウントの情報を入力します。

 

4. NotMyFault を使用できるようにします。

NotMyFault を使用するには初めにライセンス認証が必要なため、下記コマンドを実行いただきライセンスの認証画面が出力されたら、[Agree] を選択します。

 

> NotMyfault.exe /?

 

これで、ソース : Microsoft-Windows-FailoverClustering、ID : 1230 が記録された際に NotMyFault が自動で実行され完全メモリダンプが取得されます。

 

< Windows Server 2012 以降 >

Windows Server 2012 以降では、クラスター リソースの DeadlockTimeout が検知されると自動でメモリダンプを出力させるレジストリ設定が備わっています。

そのため以下のレジストリを設定し、イベント ID 1230 が記録された際のメモリダンプを採取します。

※ レジストリの設定はクラスターを組む全ノードで行い、変更後には再起動が必要です。

 

タイムアウト発生時のメモリ ダンプ自動採取手順

--------------------------------------------------

※ 事前にメモリダンプの設定を確認します。

 

1. 管理者権限のコマンド プロンプトを起動し regedit と入力し、[OK] を選択します。

2. レジストリ エディタが起動しますので、次のレジストリ キーを見つけて選択します。

 

<対象キー Windows Server 2012>

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Failover Clusters\

※ Windows Server 2012 では下記 a) ~ d) を行い手順 3. に進みます。

a) 対象キーを [右クリック] -> [アクセス許可] -> [詳細設定] を選択します。

b) ダイアログ上部に記載されている [所有者] 欄の [変更] を選択します。

c) 変更を行うユーザーまたはグループを指定します。

d) 変更を行うユーザーまたはグループのフルコントロール権限を追加します。

 

<対象キー Windows Server 2012 R2, Windows Server 2016>

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ClusSvc\Parameters\

 

3. [編集] メニューの [新規] をポイントし、[DWORD 値] をクリックします。

4. DebugBreakOnDeadlock と入力し、Enter キーを押します。

5. [編集] メニューの [修正] をクリックします。

6. [値のデータ] に [3] を入力して [OK] を選択します。