nginxのロードバランシング:upstream、方式、ヘルスチェック

nginxのロードバランシング

nginxロードバランサー:upstream、方式、重み、ヘルス | We.Inc

nginxをロードバランサーとして設定します。upstreamブロック、ラウンドロビン、least_conn、ip_hash、hash、重み、max_failsとfail_timeout、バックアップを解説し、設定ビルダーも用意しました。

nginxで負荷分散するには、アプリサーバーをupstreamブロックに列挙し、proxy_passをその名前に向けます。least_conn、ip_hash、hash、randomを追加しない限り、リクエストはラウンドロビンで順番に振り分けられます。各サーバー行には、重み、受動的ヘルスチェック用のmax_failsとfail_timeout、そしてバックアップやダウンのフラグを付けられます。

nginxの負荷分散方式

アプリの複数のコピーにトラフィックを分散するのは、nginxの最も古い役割のひとつで、設定全体も十数行に収まります。下のビルダーは、サーバーの一覧からupstreamブロックを書き出し、受け付けられない組み合わせを警告し、重みを使う場合は各サーバーが受け持つリクエストの割合を表示します。その後のリファレンスでは、サーバーのすべてのパラメーターをデフォルト値とともに解説します。

よくある質問

オープンソース版のnginxに能動的ヘルスチェックはありますか?

ありません。health_checkディレクティブは商用のNGINX Plusの機能です。オープンソース版は受動的なチェックに頼ります。あるサーバーへのリクエストがfail_timeoutの間にmax_fails回失敗すると、そのサーバーはfail_timeoutの間スキップされ、その後、実際のトラフィックで再び試されます。

max_failsとfail_timeoutのデフォルト値は何ですか?

max_failsのデフォルトは1、fail_timeoutは10秒です。つまり、1回失敗するとサーバーは10秒間外されます。max_fails=0にすると、そのサーバーの失敗カウントが無効になります。

セッションを固定(スティッキー)にするには?

各クライアントアドレスを1台のサーバーに固定するにはip_hashを使います。より細かく制御したい場合は、$cookie_session のようなCookie変数とハッシュを組み合わせます。Cookieベースのスティッキー用ディレクティブは商用版にしかありません。

重みのパラメーターは何をしますか?

そのサーバーが他と比べてどれだけのリクエストを受け取るかを変えます。重みが3、1、1なら、ラウンドロビンでは最初のサーバーが5件のリクエストのうち約3件を受け取ります。デフォルトの重みは1です。

WebSocket接続も負荷分散できますか?

できます。proxy_passをupstreamに向け、UpgradeヘッダーとConnectionヘッダーを転送します。長時間続くソケットには、ラウンドロビンよりleast_connのほうが適しています。各サーバーがすでに保持している接続数を数えるからです。

各部品の置き場所

受動的ヘルスチェックの流れ

サーバーのパラメーターとデフォルト値

upstream内のサーバー行に付けるパラメーター

完全な設定例

予備サーバー付きのラウンドロビン

2台のプライマリが負荷を分け合い、3台目は両方が落ちたときだけ応答します。

接続を再利用するleast_conn

キープアライブがバックエンドへのアイドル接続をキャッシュし、2行のプロキシ設定がそれを機能させます。

URLによるキャッシュの親和性

同じURLは常に同じキャッシュサーバーに届きます。consistentを付けると、サーバーの追加や削除のときにも大半の割り当てが保たれます。

upstreamの名前

方式

ラウンドロビン(デフォルト)

ハッシュキー

アイドル状態のキープアライブ接続(0でなし)

サーバー

アドレスとポート

重み

fail_timeout(秒)

割合

サーバー{n}を削除

サーバーを追加

hash、ip_hash、randomではバックアップサーバーを使えません。バックアップのフラグを外すか、方式を変更してください。

すべてのプライマリサーバーがダウンに設定されているため、どこもトラフィックを受け取れません。

設定

無料で始める · クレジットカード不要

関連: ガイド|Webマーケティングと集客を学ぶ

製品

ご利用いただける方

機能

リソース

会社情報

サイトマップを見る