フェンシング(コンピューティング)

NEC Nehalemクラスタ

フェンシングとは、コンピュータクラスタノードが故障していると思われる場合に、そのノードを分離したり共有リソースを保護したりするプロセスです。 [ 1 ] [ 2 ]

クラスター内のノード数が増えると、いずれか1つのノードに障害が発生する可能性が高まります。障害が発生したノードは、回収が必要な共有リソースを制御している可能性があり、そのノードが不安定な動作をしている場合は、システムの残りの部分を保護する必要があります。そのため、フェンシングはノードを無効化するか、共有ストレージへのアクセスを禁止することで、データの整合性を確保します。

基本概念

ノードフェンス(またはI/Oフェンス)は、共有リソースへのアクセスを禁止するノードと、そのリソースを分離する仮想的な「フェンス」です。アクティブノードとバックアップノードを分離することもあります。バックアップノードがフェンスを越えて、例えばプライマリノードと同じディスクアレイを制御しようとすると、データハザードが発生する可能性があります。STONITHなどのメカニズムは、このよう状況を防ぐために設計されています。

ノードを分離するということは、そのノードからのI/Oを確実に行えないようにすることを意味します。フェンシングは通常、共有ディスクファイルシステムなどのクラスタインフラストラクチャによって自動的に行われ、ノード障害発生時に他のアクティブノードによるリソースの変更からプロセスを保護します。SCSIの予約/解放メカニズムなど、フェンシングをサポートするメカニズムは少なくとも1985年から存在しています。[ 3 ]

フェンシングが必要なのは、実際の障害と一時的なハングを区別することが不可能だからです。機能不全のノードが実際にダウンしている場合、損害を与えることはないため、理論的には何もする必要はありません(通常の参加プロセスでクラスターに復帰させるだけで済みます)。しかし、機能不全のノード自身がクラスターの他のノードを機能不全と認識する可能性があるため、スプリットブレイン状態が発生し、データ破損を引き起こす可能性があります。そのため、システムは最悪のシナリオを想定し、問題が発生した場合に常にフェンシングを行う必要があります。

フェンシングへのアプローチ

フェンシング方法には2つのクラスがあり、1つはノード自体を無効にするもので、もう1つは共有ディスクなどのリソースへのアクセスを禁止するものである。[ 1 ]場合によっては、ノードが指定された時間しきい値後に応答しない場合、非稼働状態であると想定される可能性があるが、長いページングの暴走などの反例もある。[ 1 ]

STONITH方式「Shoot The Other Node In The Head(他のノードを一撃する)」の略で、疑わしいノードを無効化または電源オフにすることを意味します。例えば、パワーフェンシングでは、電源コントローラを使用して動作不能なノードの電源をオフにします。その後、ノードは自動的に再起動し、後でクラスタに参加できます。ただし、ノードを手動で再起動する必要があることをオペレータに通知するアプローチもあります。[ 1 ]

リソースフェンシングのアプローチでは、ノードの電源をオフにしない限り、リソースへのアクセスを禁止します。これには以下が含まれます。

クラスターにノードが2つしかない場合、予約/解放方式を2ノードSTONITHとして使用できます。この場合、ノードBの「障害」を検出すると、ノードAは予約を発行し、すべてのリソース(共有ディスクなど)を自身で取得します。ノードBはI/Oを実行しようとした場合(一時的にハングしている場合)、無効になります。ノードBでI/O障害が発生すると、ノードを強制終了するコードが実行されます。

永続的予約は基本的にキーの一致に基づいており、正しいキーを持つノードはI/Oを実行できますが、そうでない場合はI/Oは失敗します。したがって、障害発生時に適切な動作を確保するには、障害発生時にキーを変更すれば十分です。ただし、障害が発生したノードでキーを変更できない場合もあります。

STONITHは複数のクラスタに実装するのが簡単でシンプルな方法ですが、リソースフェンシングのさまざまなアプローチでは、クラスタの実装ごとに特定の実装アプローチが必要になります。[ 1 ]

ストニス

STONITH他のノードを撃つ、または問題のノードを撃つ)は、STOMITH他のメンバー/マシンを撃つ)とも呼ばれ、コンピュータクラスタにおけるフェンシング技術です。Googleのインクルーシブ言語開発者向けドキュメントでは、この用語の使用は推奨されておらず、「フェンス障害ノード」という用語に置き換えることが推奨されています。[ 4 ]

フェンシングとは、障害が発生したノードを隔離し、コンピュータクラスターの混乱を防ぐことです。その名の通り、STONITHは障害が発生したノードをリセットまたは電源オフにすることで、障害が発生したノードをフェンシングします。

クラスタ内の複数ノード間でエラーが発生しやすい競合は、例えば両方のノードが共有ストレージリソースへの書き込みを試みた場合など、壊滅的な結果を招く可能性があります。STONITHは、こうした問題に対して、やや強引ではあるものの効果的な保護を提供します。

シングルノードシステムでは、ウォッチドッグタイマーと呼ばれる類似のメカニズムが使用されます。ウォッチドッグタイマーは、ノードがウォッチドッグ回路に正常に動作していることを通知しない場合、ノードをリセットします。STONITHの判断は、顧客固有のプラグインなど、様々な判断に基づいて行うことができます。

参照

参考文献

  1. ^ a b c d e「Alan Robertson STONITHを使用したリソースフェンシング」(PDF)IBM Linux Research Center . 2021年1月5日時点のオリジナル(PDF)からアーカイブ。
  2. ^ Sun Cluster 環境: Sun Cluster 2.2、 Enrique Vargas、Joseph Bianco、David Deeths 著、2001 ISBN 58 ページ
  3. ^ 「小型コンピュータ標準インターフェース」 ANSI X3.131-1986
  4. ^ 「インクルーシブ言語を書く」。Google開発者向けドキュメント2025年6月11日閲覧。