コンピュータサイエンスでは、ハートビートとは、正常な動作を示すため、またはコンピュータシステムの他の部分を同期するためにハードウェアまたはソフトウェアによって生成される周期的な信号です。[ 1 ] [ 2 ]ハートビートメカニズムは、ミッションクリティカルシステムでよく使われる手法の1つで、マスターサーバーによって管理されるネットワーククラスタに属するノードまたはデーモンのネットワークまたはシステムの障害を検出して、クラスタ上の残りの冗長ノードを使用して障害が発生したノードの負荷を引き受け、システムの自動適応と再バランスを行い、一定のサービスを提供するために、ネットワークサービスの高可用性と耐障害性を提供します。[ 3 ] [ 1 ]通常、ハートビートは数秒程度の一定間隔でマシン間で送信されます。ハートビートメッセージです。[ 4 ]エンドポイントが一定時間(通常は数回のハートビート間隔)ハートビートを受信しない場合、ハートビートを送信するはずだったマシンが故障したとみなされます。[ 5 ]ハートビートメッセージは通常、発信元の起動からシャットダウンまで、定期的または繰り返し、途切れることなく送信されます。宛先が、予想される到着期間中にハートビートメッセージがないことを検出すると、宛先は発信元が故障した、シャットダウンした、または一般的に利用できなくなったと判断する可能性があります。
ハートビート プロトコルは、一般的にフローティングIP アドレスなどのリソースの可用性をネゴシエートおよび監視するために使用され、その手順には、クラスタ内のすべてのノードにネットワーク パケットを送信して到達可能性を確認することが含まれます。[ 3 ]通常、マシンでハートビートが開始されると、ハートビート ネットワーク上の他のマシンと選挙プロセスを実行して、リソースを所有するマシンがあるかどうかを決定します。2 台を超えるマシンのハートビート ネットワークでは、ネットワークの 2 つの半分が機能しているが互いに通信できない可能性があるパーティショニングを考慮することが重要です。このような状況では、リソースが各パーティションの 1 台のマシンではなく、1 台のマシンによってのみ所有されることが重要です。
ハートビートはマシンの状態を示すために使用されるため、ハートビートプロトコルとその動作に使用するトランスポートは、可能な限り信頼性が高いことが重要です。リソースによっては、誤報によるフェイルオーバーが発生すると、非常に望ましくない場合があります。また、実際の障害発生時に迅速に対応することも重要であり、これはハートビートメッセージの信頼性をさらに高めます。そのため、ハートビートを複数のトランスポート(例えば、 UDP / IPを使用するイーサネットセグメントとシリアルリンク)で動作させることが望ましい場合が多くあります。
ノードの「クラスタメンバーシップ」はネットワーク到達可能性の特性です。つまり、マスターがノードと通信できるかどうかです。、それはクラスターのメンバーとみなされ、そうでなければ「死んでいる」とみなされます。[ 6 ]ハートビート プログラム全体は、さまざまなサブシステムで構成されています。[ 7 ]
ハートビート メッセージは、大規模なクラスタではブロードキャストやマルチキャストなどの技術を使用して定期的に送信されます。 [ 6 ] CM はクラスタ全体でトランザクションを行うため、最も一般的なパターンは、すべてのノードにハートビート メッセージを送信し、非ブロッキング方式で応答を「待機」することです。[ 8 ]ハートビート メッセージまたはキープアライブメッセージは、クラスタのすべてのメンバーにも送信される非アプリケーション関連のクラスタ制御メッセージの圧倒的大多数を占めるため、主要なクリティカル システムでは、ハートビートを送信するためにシリアル ポートなどの非IPプロトコルも含まれています。[ 9 ]
マスター サーバー上の各 CM は、管理する各ノードに対して、Down、Init、Alive の 3 つの状態を持つ有限状態マシンを維持します。 [ 10 ]新しいノードが参加するたびに、CM はノードの状態を Down から Init に変更し、「ブート アップ メッセージ」をブロードキャストします。ノードはこのメッセージを受信し、一連の起動手順を実行します。その後、ノードは確認応答メッセージで応答し、CM はそのノードをクラスタのメンバーとして含め、ノードの状態を Init から Alive に遷移させます。Alive 状態のすべてのノードは、HS サブシステムから定期的にブロードキャストされるハートビート メッセージを受信し、タイムアウト範囲内で確認応答メッセージが返されることを期待します。CM が確認応答ハートビート メッセージを受信しなかった場合、ノードは利用不可とみなされ、CM によってそのノードの状態が Alive から Down に遷移します。[ 11 ]実行する手順またはスクリプト、および各状態遷移の間に実行するアクションは、システムの実装の詳細です。
ハートビートネットワークは、クラスタ内のノードのみが共有するプライベートネットワークであり、クラスタ外部からはアクセスできません。クラスタノードは、各ノードの状態を監視し、クラスタの動作を維持するために必要なメッセージを相互に通信するためにハートビートネットワークを使用します。ハートビート方式は、ネットワーク全体に送信される信号のFIFO特性を利用します。すべてのメッセージが受信されたことを確認することで、システムはイベントが適切に順序付けられることを保証します。[ 12 ]
この通信プロトコルでは、各ノードは、例えばデルタと呼ばれる一定の間隔でメッセージを返信し、自分が生存していてハートビートがあることを確認します。これらのメッセージは、ネットワークに遅延メッセージが含まれていないことを判断するのに役立つ制御メッセージと見なされます。「同期」と呼ばれる受信ノードは、受信したメッセージの順序付きリストを保持します。指定されたマークされた時間よりも後のタイムスタンプを持つメッセージがすべてのノードから受信されると、FIFO特性によりメッセージが順序付けられるため、システムはすべてのメッセージが受信されたと判断します。[ 13 ]
一般的に、すべてのアプリケーションに最適なデルタを選択することは困難です。デルタが小さすぎるとオーバーヘッドが大きくなりすぎ、大きすぎるとすべてが次のハートビート信号を待つことになるためパフォーマンスが低下します。[ 14 ]