複数のバックエンドアプリケーションサーバーの前にリバースプロキシ/HTTPロードバランサーを配置したいと考えています。問題は、バックエンドのセットが時間の経過とともに変更される可能性があり、新しいアプリケーションサーバーが動的に作成される可能性があることです(そのため、合計セットを事前に知ることはできません)。これは、次のようなことを意味します。ワニス、ヘルスチェックを実行できる知られているバックエンドのセットはオプションではありません。
私が思いついた最高の方法は、prg
RewriteMap
ApacheのサポートとプロキシRewriteRule
表現を組み合わせることです。アプリケーションサーバーがフロントエンドに自分自身を「登録」するためのシンプルなクライアント/サーバーメカニズムと、このリストからバックエンドを選択するプログラムをハックしましたRewriteMap
。これは機能しますが、臭いがします。本当にハッキー。
これはかなり一般的なシナリオのように思えます (オンデマンドで新しいサーバーを簡単に立ち上げられるクラウド サービス プロバイダーが多数あります)。他の人はこの問題をどのように解決していますか? 市販のロード バランサーを使用しているだけですか? 全員が自分で何かをまとめているのですか?
答え1
Apache の組み込み (正確には付属) mod_proxy_balancer モジュールは、個別の重み付けや、メンバー バックエンドの制御されたマージインとドロップアウトなど、この機能のほとんどを提供します。
実行時にこの動作を視覚化して制御するためのバランサー マネージャー アプリもあります。
詳細はこちらをご覧ください:Apache 2.2 の mod_proxy は、Apache 2.2 の mod_proxy と Apache 2.2 の mod_proxy の 2 つのバージョンをサポートしています。
答え2
nginxはこれをそのままではサポートしていませんが、実装するのは非常に簡単です。私はこれをやったので、以下に詳しく説明します。
1) アップストリーム専用の別の設定ファイル (upstreams.conf) を作成し、メインの nginx.conf からインクルードします。2) このファイルを手動で編集したり、スクリプトで個別に編集したりできるようになりました。このファイルを管理するために、アップストリームの説明を含むテキスト行を追加/削除する簡単な Perl スクリプトを作成しました。3) メインの nginx プロセスに HUP シグナルを送信して、正常なリロードを実行します。4) これらの操作を制御し、ヘルス チェックを提供するための Web UI が実装されていますが、これは FOSS ではありません。
ヘルスチェックと管理インターフェースを実装する3サイドモジュールがいくつかあることに異議を唱えてください。
http://wiki.nginx.org/HttpHealthcheckModule https://bitbucket.org/benjaminws/nginxmgr/ https://github.com/FRiCKLE/ngx_supervisord
よく分かりませんが、haproxy にも同じ機能があるかもしれません。
答え3
ほとんどすべての商用負荷分散ソリューション (F5、Citrix、A10 など) には、この目的に簡単に活用できる構成管理 API (REST または SOAP ベース) があります。サーバーは、起動ルーティングの一部として関連するプールに自身を追加し、シャットダウン時に自身を削除できます。サーバーがクラッシュすると、LB はヘルスチェックの失敗によりサーバーをダウンとしてマークします。