Windows Server 2008 R2: フェールオーバー クラスタリングのトラブルシューティング シナリオ

Windows Server でフェールオーバー クラスターを構成すると、100% に近い稼働率を実現するのに役立ちます。この記事では、いくつかのトラブルシューティング シナリオを紹介します。

John Marlin

先月の記事では、Windows Server 2008 R2 のフェールオーバー クラスタリングに関する一般的な問題を取り上げて、問題の的確なトラブルシューティングを行う方法を紹介しました。

現在のサポート ポリシーでは、Windows Server 2008 または Windows Server 2008 R2 のフェールオーバー クラスタリング ソリューションが、マイクロソフト カスタマー サポート サービス (CSS) で正式にサポートされているソリューションだと見なされるためには、次の条件を満たしている必要があると紹介しました。

  • すべてのハードウェア コンポーネントおよびソフトウェア コンポーネントが、"Certified for Windows Server 2008 R2" ロゴを取得するための条件を満たしている必要があります。
  • 構成された完全なソリューションは、フェールオーバー クラスター管理スナップインの検証ウィザードで、すべてのテストに合格する必要があります。

今月の記事では、今後のトラブルシューティングに役立つシナリオを紹介します。今月紹介するシナリオは、サポートされている Windows Server 2008 R2 フェールオーバー クラスターでよく見られる問題です。また、このような問題を解決するのに必要な手順も併せて紹介します。

シナリオ 1: Active Directory オブジェクトの月例処理をしているときに、誤ってクラスター名オブジェクトを削除してしまいました。新しいオブジェクトを作成しましたが、オンラインにすることができません。

クラスター名オブジェクト (CNO) は、クラスターの共通 ID なので非常に重要です。

このオブジェクトは、クラスターの作成ウィザードで自動的に作成されるもので、クラスターと同じ名前が付けられています。クラスターで新しいサービスやアプリケーションを構成すると、このアカウントによって、他のクラスター仮想コンピューター オブジェクト (VCO) が作成されます。CNO を削除したり、アクセス許可を剥奪すると、CNO が復元されるか、適切なアクセス許可が付与されるまで、クラスターで必要な他のオブジェクトを作成できません。

Active Directory の他のオブジェクトと同じように、CNO には objectGUID が関連付けられています。この値によって、フェールオーバー クラスターでは、ユーザーが適切なオブジェクトを操作していることを認識します。単に新しいオブジェクトを作成しただけで、新しい objectGUID が作成されます。必要な作業は、適切なオブジェクトを復元して、フェールオーバー クラスターで通常の処理を実行できるようにすることです。

この問題のトラブルシューティングでは、クラスター リソースから 2 つのことを特定する必要があります。Windows PowerShell で、次のコマンドを実行します。

Get-ClusterResource "<クラスター名>" | Get-ClusterParameter CreatingDC, <objectGUID の値>

このコマンドを実行すると必要な値を取得できます。1 つ目のパラメーターは CreatingDC です。フェールオーバー クラスターで CNO が作成されると、CNO の作成先ドメイン コントローラー (DC) が表示されます。クラスターに対して実行する必要がある操作 (VCO の作成、名前をオンラインにするなど) については、この DC にアクセスして、オブジェクトとセキュリティを確保する必要があります。オブジェクトが、当該 DC 上にないか、当該 DC が利用できない場合、応答する他の DC を検索しますが、最初にオブジェクトの作成先 DC を確認します。

2 つ目のパラメーターは、objectGUID の値です。これは、適切なオブジェクトを確実に処理するために指定しています。たとえば、クラスター名が CLUSTER1、作成先 DC が DC1、objectGUID が 1a3cf049cf79614ebd94670560da6f04 の場合、結果は、次のようになります。

Object     Name     Value
------     ----      -----
Cluster Name  CreatingDC  \\DC1.domain.com
Cluster Name  ObjectGUID1a3cf049cf79614ebd94670560da6f04

DC1 コンピューターにログオンして、Active Directory ユーザーとコンピューターを起動する必要があります。CLUSTER1 オブジェクトが存在する場合、このオブジェクトに適切な属性が設定されているかどうかを確認します。注意事項は、このオブジェクトの属性値として表示される内容です。既定では、Active Directory の属性エディターでは、値が 16 進数で表示されないので、上記の GUID は表示されません。

属性エディターで最初に表示される値は、49f03c1a-79cf-4e61-bd94-670560da6f04 です。16 進数では、変換が行われ、値がペアになっているため、少し複雑です。最初の 8 桁を変換すると、49f03c1a は 1a3cf049 になります。その後の 2 つの値のペアを変換すると、79cf が cf79 になり、その後の 2 つの値のペアを変換すると、4e61 が 614e になります。それ以降の値のペアについては、そのままです。

フェールオーバー クラスターで認識される 16 進数の形式で objectGUID のプロパティを確認するには、属性エディターを使用する必要があります。これは正式なオブジェクトではないので、適切なオブジェクトを復元するためには、このオブジェクトを削除して関連性をなくす必要があります。

オブジェクトを復元する方法は、いくつかあります。Active Directory の復元機能を使用することができます。たとえば、ADRESTORE や新しい Active Directory のごみ箱 (更新されたスキーマを使用して Windows Server 2008 R2 DC を実行している場合) を使用することができます。Active Directory のごみ箱を使用すると、処理が簡単になり、削除した Active Directory オブジェクトを復元する処理を最もシームレスに行えます。

Active Directory のごみ箱を使用すると、次の Windows PowerShell のコマンドを使用して復元するオブジェクトを検出できます。

Get-ADObject –filter 'isdeleted –eq $true –and samAccountName –eq "CLUSTER1$"' –includeDelectedObjects –property * | FormatListsamAccountName,objectGUID

このコマンドを実行すると、Active Directory のごみ箱にある CLUTER1 という名前の削除されたオブジェクトが検出されます。また、その際、アカウント名と objectGUID の値が提供されます。複数のオブジェクトがある場合は、該当するオブジェクトがすべて表示されます。復元する必要があるオブジェクトが検出されると、次のような情報が表示されます。

samAccountName : CLUSTER1$
objectGUID:49f03c1a-79cf-4e61-bd94-670560da6f04

今度は、このオブジェクトを復元する必要があります。不適切なオブジェクトを削除したら、次の Windows PowerShell のコマンドを実行してオブジェクトを復元します。

Restore-ADObject –identity 49f03c1a-79cf-4e61-bd94-670560da6f04

このコマンドを実行すると、オブジェクトは同じ場所 (組織単位、OU) に復元され、Active Directory で把握しているアクセス許可とコンピューター アカウントのパスワードが維持されます。

これは ADRESTORE などのユーティリティにはない Active Directory のごみ箱を使用した場合に享受できるメリットです。ADRESTORE を使用すると、パスワードをリセットし、オブジェクトを適切な OU に移動し、フェールオーバー クラスタリングでオブジェクトを修復するなどの処理が必要になります。

Active Directory のごみ箱を使用すると、簡単にクラスター名リソースをオンラインにすることができます。これは、Active Directory を復元するよりも適切な選択肢です。特に、新しいコンピューター オブジェクトやユーザー オブジェクトが作成されたり、現時点で存在しない古いオブジェクトがあって、復元後に再度削除しなければならない場合などには、ごみ箱を使用するのが適切です。

シナリオ 2: フェールオーバー クラスター管理で、クラスター共有ボリュームの状態が "リダイレクトされたアクセス" と表示されます。これはどのように修正できますか。

まず、クラスター共有ボリューム (CSV) の定義を簡単におさらいしましょう。CSV を使用すると、フェールオーバー クラスターで簡単に Hyper-V 仮想マシン (VM) を構成および管理できます。Hyper-V を実行するフェールオーバー クラスターで CSV を使用すると、複数の VM で同じ LUN (ディスク) を使用しながら、相互に独立した状態を維持して、フェールオーバー (つまり、ノード間でプロセスを移動) することができます。CSV は、クラスター化されたストレージで高い柔軟性を実現します。たとえば、システム ファイルとデータが仮想ハード ディスク (VHD) ファイルに含まれている場合でも、システム ファイルをデータから分離して、ディスクのパフォーマンスを最適化することができます。

クラスター通信に対応するネットワーク アダプターのプロパティでは、サーバー メッセージ ブロック (SMB) をサポートするため、"Microsoft ネットワーク用クライアント" と "Microsoft ネットワーク用ファイルとプリンター共有" を有効にする必要があります。これは CSV で必要な設定です。サーバーでは Windows Server 2008 R2 が実行されているので、CSV で必要なバージョンの SMB (SMB2) が自動的に提供されます。優先する CSV 通信ネットワークは 1 つしかありませんが、これらの設定を複数のネットワークで有効にすることで、クラスターでは障害に対応する復元性を得ることができます。

"リダイレクトされたアクセス" という設定になっていると、すべての I/O 操作が、ネットワーク経由でドライブにアクセスできる別のノードにリダイレクトされます。ディスクが "リダイレクトされたアクセス モード" に設定されている理由は、基本的に次の 3 つです。

  1. 手動で "リダイレクトされたアクセス モード" に設定した
  2. バックアップが実行中である
  3. ハードウェアの問題が発生していて、ノードがドライブに直接アクセスできない

このシナリオでは、オプション 1 と 2 を除外し、オプション 3 についてのみ取り上げます。システム イベント ログでは、ソースが "Failover Clustering" で、イベント ID が 5121 のイベントを確認できます。

また、このイベント エントリの説明は次のとおりです。"クラスターの共有ボリューム 'Cluster Disk x' はこのクラスター ノードから直接アクセスできなくなりました。I/O アクセスは、ボリュームを所有するノードを介してネットワーク経由で記憶装置にリダイレクトされます。これが原因でパフォーマンスが低下する可能性があります。リダイレクトされたアクセスがこのボリュームに対して有効になっている場合は無効にしてください。リダイレクトされたアクセスが無効にされている場合は、このノードから記憶装置への接続のトラブルシューティングを実施してください。記憶装置への接続が再確立されたら、I/O は正常な状態に戻ります。"

これを踏まえて、このイベントが発生する直前にハードウェア関連のイベントが発生していないかどうかも確認しました。ハードウェアや通信に関する問題を示唆するイベント ID 9、11、または 15 を探しました。ディスク管理にアクセスして、物理的にディスクの状態を表示できることを確認します。多くの場合、他にもエラーが確認できます。背後に潜んでいる問題を修正したら、ディスクに設定されている "リダイレクトされたアクセス" モードを解除します。

いずれかのノードがストレージがアタッチされたネットワークと通信できる間は、CSV は実行され続けることを覚えておいてください。そのため、ディスクが "リダイレクトされたアクセス" モードに設定されます。ディスクへのすべての書き込み操作は、通信可能なノードに送信され、Hyper-V の VM は引き続き実行されます。VM でパフォーマンスの問題が生じることはありますが、引き続き実行されます。そのため、運用環境が完全に停止することがないというメリットがあります。

シナリオ 3: 高可用性の VM で使用するために新たに Windows Server 2008 R2 フェールオーバー クラスターを作成したところです。CSV 用のドライブを設定しましたが、ドライブにアクセスしようとすると、エクスプローラーとディスクの管理がどちらもハングし、VHD をドライブにコピーして、高可用性の VM を使用することができません。

ドライブを所有しているノードは 1 つだけです。このドライブの所有者は調整役と呼ばれます。ドライブにメタデータを書き込めるのは、このノードだけです。

エクスプローラーまたはディスクの管理を起動すると、ドライブにアクセスして、(必要がある場合は) メタデータの書き込みを試行します。そのため、所有者ではないノードからの書き込みは、ネットワーク経由で調整役のノードにリダイレクトされます。これは、ドライブが "リダイレクトされたアクセス" モードに設定されている場合とは異なります。

この問題をトラブルシューティングするときには、フェールオーバー クラスター管理では、ドライブの状態はオンラインとして表示されます。そのため、まず、ログに記録されているイベントを確認する必要があります。システム イベント ログでは、次のようなソースが "Failover Clustering" のイベントを確認できます。

イベント ID: 5120

クラスターの共有ボリューム 'Cluster Disk x' は、'STATUS_BAD_NETWORK_PATH(c00000be)' が原因でこのノード上で使用できなくなりました。ボリュームへのパスが再確立されるまで、すべての I/O は一時的にキューに登録されます。

イベント ID: 5142

エラー 'ERROR_TIMEOUT(1460)' が発生したため、クラスターの共有ボリューム 'Cluster Disk x' にこのクラスター ノードからアクセスできなくなりました。このノードから記憶装置への接続およびネットワーク接続のトラブルシューティングを行ってください。

これらのイベントは、調整役のノードにネットワーク経由でアクセスするときにタイム アウトが発生した結果、記録されたものです。そのため、システム イベント ログで、ノード間のネットワーク接続に関する問題を示唆するイベントを確認します。そのようなイベントが記録されている場合は、その問題を解決する必要があります。このような問題の原因としては、ネットワーク カードの誤動作または無効化などが考えられます。

次に、ノード間の基本的なネットワーク接続を確認します。まず、CSV トラフィックで使用するネットワークを確認する必要があります。フェールオーバー クラスターでは、メトリック値に基づいて CSV で使用するネットワークを選択します (メトリック値が最も高いものを選択します)。これは Windows でネットワークを認識する方法とは異なります。

Network Fault Tolerance (NETFT) アダプターでは、内部で独自のメトリック システムを使用しています。NETFT アダプターで検出されるネットワークのうち、デフォルト ゲートウェイがあるものには、10000、10100 のようにメトリックが順次付与されます。また、デフォルト ゲートウェイがないネットワークには、1000、1100 のようにメトリックが順次付与されます。Windows PowerShell を使用すると、「Get-ClusterNetwork | FT Name, Metric, Role」というコマンドを使用して、NETFT アダプターで、ネットワークが定義されている方法を確認できます。このコマンドを実行すると、次のような結果が返されます。

Name     Metric
-------------------
Management  10100
CSV Traffic  1000
LAN-WAN   10000
Private    1100

この 4 つのネットワークのうち、CSV として特定したネットワークには CSV Traffic という名前が付けられています。Node 1 で使用している IP アドレスは 1.1.1.1 で、Node2 で使用している IP アドレスは 1.1.1.2 です。この IP アドレス間で PING を使用して基本的なネットワーク接続を確認します。

今度は、これらの IP アドレスを使用して SMB 接続を試行します。これは、フェールオーバー クラスタリングで行われる処理です。「NET VIEW \\1.1.1.1」という単純なコマンドを実行すると、応答があるかどうかを確認できます。このコマンドを実行すると、共有の一覧または "一覧にエントリが存在しません" というメッセージが表示されます。

これらの現象は、その共有に対して接続を確立できることを意味します。ただし、"システム エラー 53 が発生しました。ネットワーク パスが見つかりませんでした" というメッセージが表示された場合は、TCP/IP の構成に関する問題がネットワーク カードにあることを示唆します。

CSV を使用するには、ネットワーク カードで "Microsoft ネットワーク用クライアント" と "Microsoft ネットワーク用ファイルとプリンター共有" が有効になっている必要があります。これらが有効になっていないと、エクスプローラーがハングするという問題が発生します。これらの設定を有効にすれば、問題は解決します。

Windows Server 2003 以前のクラスターでは、これらのオプションを無効にすることが推奨されていました。これは新しいバージョンには適用されません。このシナリオでは、過去の推奨事項により、問題が発生することを説明しました。

その他の要因

他にも考慮しなければならない要素がいくつかあります。クラスター ノードで、リソース ホスト サブシステム (RHS) の障害が発生している場合は、まず RHS の性質と役割を考慮する必要があります。RHS は、すべてが問題なく機能するようにするために、多くのリソースの正常性を確認するフェールオーバー クラスターのコンポーネントです。IP アドレスについては、ネットワーク スタックにあることと、応答していることを確認します。ディスクについては、ドライブに接続して、DIR コマンドを実行します。

RHS がクラッシュすると、システム イベント ログに ID が 1230 と 1146 のイベントが記録されます。イベント 1230 では、RHS で使用するリソースとリソース DLL が特定されます。クラッシュした場合、リソースが期待どおりに応答しておらず、デッドロックが発生しているおそれがあります。ディスク リソースでクラッシュが発生した場合、ディスク関連のエラーやディスクの待ち時間に関するイベントを調査します。その場合は、まず、パフォーマンス モニターを実行することをお勧めします。ネットワーク カードまたはバックエンドのドライバーやファームウェアの更新についても検討します。

ユーザー モードの検出も実行します。フェールオーバー クラスタリングでは、カーネル モードのプロセスからユーザー モードのプロセスを監視して、ユーザー モードが応答しなくなった (ハングした) ことを検出します。この状況から回復するために、フェールオーバー クラスタリングでは、コンピューターのバグチェックを実行します。バグが検出されると、ストップ エラー 0x0000009E が発生します。このエラーをトラブルシューティングするには、作成されたダンプ ファイルを確認して、ハングの原因を特定します。また、パフォーマンス モニターを実行して、ハングやメモリ リークの兆候を探します。

フェールオーバー クラスタリングでは、Windows Management Instrumentation (WMI) を使用しています。WMI で問題が発生している場合は、フェールオーバー クラスタリングでも問題が発生します (ノードの作成と追加、移行などで問題が発生します)。WBEMTEST.EXE またはリモートで WMI スクリプトを使用して、WMI をチェックします。

Windows PowerShell から実行できるスクリプトを 1 つ紹介します (NODE1 は、実際のノード名に変更してください)。

get-wmiobjectmscluster_resourcegroup -computer NODE1 -namespace "ROOT\MSCluster"

このコマンドを実行すると、指定したクラスターに対して WMI 接続を確立し、グループに関する情報を入手できます。

このコマンドでエラーが発生する場合は、WMI で問題が発生しています。WMI サービスが停止している可能性があり、その場合には、サービスを再開する必要があります。また、WMI リポジトリが破損しているおそれもあります (リポジトリの整合性を確認するには、「winmgmt /salvagerepository」という Windows PowerShell コマンドを実行します)。

覚えておくと便利なトラブルシューティングのポイントは、次のとおりです。

  • とにかく検証する。トラブルシューティングには、クラスター検証を使用します。その結果をベスト プラクティスとして使用し、システムを変更したときに使用します。
  • すべてのものが Windows PowerShell にシフトしています。Windows PowerShell になじみがない場合は、今すぐ試してみてください。
  • Active Directory オブジェクトに依存しているので、自己防衛が大切です。Active Directory のごみ箱を有効にして、誤ってオブジェクトを削除してしまうことを回避します。
  • CSV のトラブルシューティングを行うときには、ハードウェアに問題があるとは限らないと心得てください。
  • トラブルシューティングを行うときには、問題から 1 歩離れて、影響があると思われるすべてのものを考慮します。それから焦点を絞ります。

フェールオーバー クラスタリングは、問題を検出して、その状況から回復し、問題を報告するようにデザインされています。クラスターから問題が報告されても、その問題の原因がクラスターにあるとは限りません。「問題を報告した人を罰してはいけない」という言い伝えがありますよね。

John Marlin

John Marlin は、マイクロソフトの Commercial Technical Support Group でシニア サポート エスカレーション エンジニアとして働いています。勤続 19 年で、14 年前からクラスター サーバーを担当しています。

関連コンテンツ