web-dev-qa-db-ja.com

ARRをアクティブ/パッシブ(別名フェイルオーバー)モードで設定するにはどうすればよいですか?

問題

NLB + ARRアーキテクチャ に従って、(異なるサイト用に)いくつかのWebファームを構成しようとしています。私が6つのVMを持っているとしましょう:

  1. 2つのVMのARR + NLBクラスター。トラフィックを受信し、コンテンツサーバーに転送します。 HTTPホストヘッダー条件を使用したURL書き換えルールは、リクエストを正しいコンテンツサーバーにルーティングするために使用されます。
  2. サイト1コンテンツサーバー:2つのVM。ホスティング http://www.mysite1.com/
  3. サイト2コンテンツサーバー:2つのVM。ホスティング http://www.mysite2.com/

すべてが正常に機能します。両方の層で高可用性があることをテストしました。

ここで、理由により、サイト2はアクティブ/パッシブモードで動作する必要があるため、1 VMのみがトラフィックを受信し、もう1つはフェイルオーバー用です。ある意味で、 NLBのシングルホストモードですが、ARR用です。

これはどのように達成できますか?

回避策

私は、望ましい動作を実現するために、いくつかの間接的なアプローチを試しました。

  1. 負荷分散アルゴリズム。ラウンドロビンとロビンの重みを1/0に設定してみました。問題は、0を設定できないことです。少なくとも1でなければなりません。40億+ smth/1を設定できますが、これにより、2番目のノードにランダムな要求が送信されないことが保証されるかどうかはわかりません。
  2. Host Name to Server Affinity。Host Name Affinityの詳細設定では、サイト2に割り当てるサーバーを1つだけ構成できます。これは機能しますが、問題は、ルーティングテーブルが2つのARRVM間で同期されていないことです。そのため、ARR1はトラフィックを一方のノードにアフィニティ化し、ARR2はアクティブ/パッシブではないもう一方のノードにアフィニティ化することがあります。
  3. ホスト名アフィニティ+ NLB単一ホスト。前のアプローチの変更として、NLBを単一ホストモードに切り替えて、ルーティングテーブルの同期を解決することもできます。問題。この場合の問題は、サイト1のARR負荷分散もオフに切り替えていることです。
  4. ホスト名アフィニティ+ NLB単一ホスト+2つのIPアドレス。前のソリューションに2番目のIPアドレスを追加する場合は、異なるモードで動作する2つのNLBクラスターを作成します。 、すべてが正常に機能するはずです。問題は、2番目のパブリックIPにお金を払いたくないということです。

どのソリューションも完璧ではありません。

理想的な解決策のイメージ

NLBの場合と同じように、ARRをシングルホストモードにする方法を本当に知りたいです。そして、ノード間のルーティングを同期させます。

誰もがそれを行う方法を知っていますか?または代替アプローチを知っていますか?

3
Pavel Gatilov

完全ではありませんが、うまくいくように見える方法を1つ見つけました。説明されています ここ 。アイデアは、「サーバー変数ハッシュ」負荷分散アルゴリズムと「HTTP_Host」を変数として使用することです。このようにして、ARRのすべてのインスタンスは、特定のホストを同じコンテンツサーバーにマップします。マップされたサーバーが機能しない場合、それらが別の利用可能なサーバーにフォールバックすることをテストしました。

ただし、このソリューションの問題は、ホストがマップされるコンテンツサーバーを制御できないことです。これは、ハッシュ関数によって決定されます。それでも、ある意味では正しいです。ノードをアクティブにすることを恐れている場合、信頼できるフェイルオーバーをどのように期待できますか?すべてのコンテンツサーバーで同時に確認する必要があります。

もう1つの問題は、サイトごとに複数のホスト名を使用できないことです。これは、ホスト名が異なるサーバーにマップされる可能性があるためです。

1
Pavel Gatilov