シナリオは次のようになります。互いにバックアップとなっている 2 つのアプリケーション サーバーの前に nginx リバース プロキシ サーバーを配置し、まず nginx がすべてのユーザー リクエストを最初のアプリケーション サーバーに転送するようにします。最初のアプリケーション サーバーがダウンしている場合は、それ以降は nginx がすべてのユーザー リクエストを 2 番目のアプリケーション サーバーに転送するようにします。2 番目のアプリケーション サーバーがダウンした場合は、nginx がすべてのユーザー リクエストを最初のアプリケーション サーバーに転送するように元に戻す、などと繰り返します。もちろん、両方のアプリケーション サーバーがダウンしている場合は、nginx はエラーを返します。
アップストリーム ロード バランシングや proxy_next_upstream 設定などの設定を調べましたが、探しているものではないようです。私のシナリオに合わせて nginx を構成する方法をご存知ですか? ありがとうございます。
答え1
upstream
これを実現するには、nginx 構成を使用する必要があります。
upstream mybackend {
# first app server
server 192.168.0.1;
# second app server
server 192.168.0.2 backup;
}
server {
...
location / {
proxy_pass http://mybackend;
}
}
ここで重要なのは、プライマリ ノード (つまり、タグが付いていないノード) が利用できないbackup
場合にのみそのノードを使用するように nginx に指示するパラメータです。backup
満杯ドキュメントはこちら。
答え2
さらにいろいろ調べた結果、OpenRestyを使うことにしました(https://openresty.org/)、特にLuaUpstreamNginxModuleが私のニーズに合っていると思います。lua-upstream-nginx-module は、以下の URL からダウンロードできます。いくつかのカスタム Lua スクリプトを使用すると、私のシナリオでは完璧に動作するようです。