
私は数日間高可用性ソリューションを試してきましたが、これまでのところUCARPIP フェイルオーバーに非常に便利です。
非常にシンプルで、目的を果たします。
私はさらに一歩踏み込んで考えてみた
。ルーター同じIPを共有する2つのノードを接続するすべてのパケットを両方のノードに送信する(いつでも)そうすれば、私はより大きな負荷分散を実現これは、
「マスター バックアップ」ではなく「マスター マスター」ソリューションのようなものです。
ソース IP は分割可能です。
の冗長性のグループたとえば、2 つのノードが 1 つの (「仮想」) IP を共有するとします。
両方のノードが稼働中の場合、クライアントのソース IP (その単純な番号) を分割するだけで、どのように反応するかがわかります。
たとえば、Node1 は 2 で割り切れる IP を取得します
。Node2 は残りを取得します。
クライアントは TCP/IP 接続を開始します (共有 IP 経由)。
両方のノードを接続するルーターは、この要求を両方のノードに送信します。
クライアントの IP が 2 で完全に割り切れる場合、Node1 が応答します。
この時点で、Node2 は Node1 を認識しているため、無視します。
1つのノード(例えばNode1)に障害が発生すると、もう1つのノード(Node2)がそれを検出します。通常は、UCARP がそうしているように!
その時点で、Node2 は残りのクライアントへのサービス提供を開始します。
Node1 が復帰すると、Node2 は 2 で割り切れる IP からの SYN 要求 (TCP/IP 接続開始の最初のステップ) への応答を停止し、Node1 が引き続きサービスを提供します。
ルータの方向から問題が発生する可能性がある: 各着信パケットを冗長グループ内の X 個のノードに送信する必要があります。内部ネットワークの負荷が高くなります。
もう一つの考えられる問題各ノードは、実際には「必要」ではないパケットも含めて、非常に多くのパケットを受信することになります。
今日のルーターやネットワークカードでは、これはメリットに比べれば非常に小さな代償だと思います。非常に高い可用性
言うまでもなく、そのような場合には自分のリソースを100%活用する(良い意味で)「待機」以外の何も行わない 1 つ以上の「スタンバイ」サーバーを用意する代わりに。
私の正確な質問は次のとおりです:
1) そのようなソリューションはすでに存在しますか? (オープンソース、フリーウェア、Linux ベース)。
2) ルーターはそのような機能をサポートできますか? どのような標準をサポートする必要がありますか? この機能に関して DS/VPS プロバイダーに何を尋ねればよいでしょうか?
とにかく、これはこの主題に関する私の考えの一部です。リンクといくつかの言葉で裏付けられた簡潔な回答をいただければ幸いです。それ以上の回答ももちろん歓迎です :)
答え1
これは可能/実現可能だとは思いません。標準的なアプローチに比べて用途が非常に限られているため、絶対に存在しません。
私が見ている主な問題は、すべての IP パケットの送受信を追跡し、アプリケーションにとって完全に透過的な方法で両方のコンピューターの IP スタックの状態を同期することです。ノード 1 で作業は実行しているが応答しないアプリケーション、またはノード 2 の状態を魔法のように取得するアプリケーションを「シミュレート」するにはどうすればよいでしょうか。特別なプログラミングなしでは、ノード 1 アプリケーションの TCP 通信を継続することはできません。