nginxのを使用して、負荷分散のための四つ

導入列または列がソートされる有するリレーショナルデータベースにおいて、インデックスは、データベースのテーブルから単一の物理的な値の記憶構造であり、それは、テーブルまたは列の値と対応する複数の点に設定されていますこれらの値の物理的識別データのリストに論理ページテーブルポインタ。

HTTP負荷は、我々は通常、すべての七層での作業「7負荷分散」され、バランスをとる「アプリケーション層」を TCP負荷分散、我々は通常、「ネットワーク層」の「4負荷分散」仕事と呼んで、「トランスポート層を。」例えば、LVS(Linux仮想サーバ、Linuxの仮想サービス)とF5(デバイスのハードウェア負荷分散)、また属し、「4層のロード・バランシング」へ

このモジュールは、バージョン1.90の後に有効になっているngx_stream_core_moduleのnginx-1.9.0リリースでは、このバージョンでは、TCPプロキシと負荷分散の一般的な流れのためにモジュールを追加します。しかし、デフォルトではインストールされません、

このモジュールは、コンパイル時に指定されたアクティブ--with-ストリーム・パラメータに必要です。

1)nginxの設定ファイルのパラメータをコンパイル

./configure --with-http_stub_status_module --with-ストリーム

-------------------------------------------------- ----------------

2)コンパイル、インストールには、make installを&&作ります

-------------------------------------------------- ----------------

3)設定ファイルnginx.conf

ストリーム{

上流ケビン{

サーバー192.168.10.10:8080;#ここでは、アドレスをアクセスできるように構成されました

サーバー192.168.10.20:8081;

サーバー192.168.10.30:8081;#は、プロキシポート、私のエージェント11ケビン・モジュールのインターフェース8081を必要と

}

サーバー{

8081を聞く;#必要なリスニングポート

proxy_timeout 20S;

proxy_passケビン;

}

}

(HTTPと同じレベル)ストリームの最高レベルを作成、グループ名の定義上流ケビン、ロード・バランシングが(のような:ポート8081)TCP接続をリッスンするサービスを定義達成するために、複数のサービスで作られました、

ケビンそれらのエージェントと上流、負荷分散方法、各サーバの構成パラメータのグループ等のようないくつかの構成:接続の数、重みなどが挙げられます。

まず、TCP負荷分散グループとして使用するサーバグループを作成します。流れの上流側ブロックは、このブロックがサーバコマンド定義されたサーバによって追加されたコンテキストを定義し、IPアドレスが指定された彼の

ホスト名(ホスト名は、マルチアドレスに解決することができます)とポート番号。次の例は、2つのリスニングポートサーバ1395は、サーバ8080のリスニングポートケビンと呼ばれるグループの設立です。

上流ケビン{

サーバー192.168.10.10:8080;#ここでは、アドレスをアクセスできるように構成されました

サーバー192.168.10.20:8081;

サーバー192.168.10.30:8081;#は、プロキシポート、私のエージェント11ケビン・モジュールのインターフェース8081を必要と

}

特に注目すべきは、次のとおりです。

コマンドは、サーバ全体のプロトコルとしてTCPストリームを確立するので、あなたは、各サーバのプロトコルを定義することはできません。

nginxのは、負荷分散グループ(:ケビン・グループなど)に、クライアントからの要求を転送することができ、リバースプロキシTCPを有効な構成。各ブロック内のサーバーやサーバーの設定により、各仮想サーバの構成情報

リスニング各サーバーで定義されたポート(例えばプラグフローとクライアントのニーズのプロキシ・ポート番号は、Iケビン・プロトコル、ポート番号:8081)proxy_passsコマンド設定情報とTCPへの通信を送信します

どのサーバー上流に行くために。我々はどこへ行くのケビン・セットへのTCPトラフィックをお送りします。

サーバー{

8081を聞く;#必要なリスニングポート

proxy_timeout 20S;

proxy_passケビン;

}

もちろん、我々はまた、単一のプロキシモードを使用することができます。

サーバー{

8081を聞く;#必要なリスニングポート

proxy_timeout 20S;

proxy_pass 192.168.10.30:8081;#は、プロキシポート、私のエージェント11ケビン・モジュールのインターフェース8081を必要と

}

-------------------------------------------------- ----------------

4)負荷分散方式に変更されます。

デフォルトnginxの負荷分散は、ポーリング通信アルゴリズムによって行われます。要求サイクリングガイドは、ポートグループサーバまでの上流に配置されています。彼はデフォルトの方法ですので、何のポーリングコマンドはありません、

単にここでの設定グループ上流の渓流テキストを作成し、サーバーを追加します。

a)少なくとも接続:プロセスの各要求、nginxのプラス接続の最小数、現在選択されているサーバの場合:

上流ケビン{

least_conn;

サーバー192.168.10.10:8080;#ここでは、アドレスをアクセスできるように構成されました

サーバー192.168.10.20:8081;

サーバー192.168.10.30:8081;#は、プロキシポート、私のエージェント11ケビン・モジュールのインターフェース8081を必要と

}

b)少なくとも時間:各リンクについて、サーバによって選択されたnginxのpluns点:最も低い平均遅延:least_timeで指定されたコマンドパラメータを含むことによって計算:

接続:接続費やしたサーバの時刻に

first_byte:時間の最初のバイトを受信

last_byte:アクティブの最小時間にわたって受信すべての接続:

上流ケビン{

least_time first_byte;

サーバー192.168.10.10:8080;#ここでは、アドレスをアクセスできるように構成されました

サーバー192.168.10.20:8081;

サーバー192.168.10.30:8081;#は、プロキシポート、私のエージェント11ケビン・モジュールのインターフェース8081を必要と

}

C)通常のハッシュアルゴリズム:nginxのプラスUSER_DEFINEDキーワードを介してサーバを選択するには、IPアドレスです:REMOTE_ADDR $;

上流ケビン{

ハッシュはREMOTE_ADDR一貫$;

サーバー192.168.10.10:8080重量= 5;ここで#アドレスを設定するためには、アクセスされます

サーバー192.168.10.20:8081 max_fails = 2 fail_timeout = 1930;

サーバー192.168.10.30:8081 MAX_CONNS = 3;#は、プロキシポート、私のエージェント11ケビン・モジュールのインターフェース8081を必要と

}

TCP負荷分散の原則のnginxの実装

nginxのポートは、モニターからの新しいクライアントのリンクを受信すると、すぐにサービスへのアクセスは、IP接続を指定するために必要な、ルーティングスケジューリングアルゴリズムを実行し、新しい上流の接続を作成し、指定されたサーバに接続します。

TCP負荷分散のサポートnginxのようにラウンドロビン(デフォルト、ラウンドロビンスケジューリング)、ハッシュ(満場一致選択)とを含むスケジューリングアルゴリズムを、既存の。一方、スケジューリング情報データもロバスト検出モジュールであり、各ターゲットアップストリームサーバのための適切な接続を選択し、一緒に協働します。あなたがスケジューリング方法を分散ハッシュ・ロードを使用する場合は、あなたが簡単な永続セッションを達成するための$ REMOTE_ADDR(クライアントIP)を使用することができます(同じクライアントIP接続を、サービスは常に同じサーバー上に落ちます)。

他の上流のモジュールのような、TCPストリームモジュールは、カスタム負荷分散および転送量(設定「重量= 2」)をサポートし、ダウンならびに上流の失敗のバックアップパラメータは、サーバをキックオフ。MAX_CONNSパラメータは、過負荷保護の目的を達成することができ、特に高同時シナリオでは、適切な設定値を設定するには、サーバーの容量に応じて、サーバーのTCP接続の数を制限することができます。

nginxの上流のクライアント接続と接続を監視するためには、データの受信時に、nginxのを読み、すぐ上流接続にプッシュされ、データはTCPコネクション内で検出されません。nginxのは、クライアントとアップストリームデータを書き込むためのメモリバッファを維持します。クライアントまたはサーバが大量のデータを転送した場合、バッファメモリのサイズを大きくすることが適切であろう。

接続はどちらか一方を閉じ、またはTCP接続は、時間proxy_timeoutの設定よりもアイドル状態になっているとき、nginxの通知を受け、接続が閉じられます。TCP長い接続のために、我々は適切な時間を選択する必要があり、同じ時間をproxy_timeout、注意SO_KEEPALIVEパラメータモニタが早まって切断防ぐsocke。

よりproxy_connect_timeout構成よりも、失敗したとみなされる場合にはTCP負荷分散モジュールのサポートは、堅牢な検出を建て、上流のサーバTCP接続が拒否されます。この場合、nginxのは、すぐにグループ内の上流に接続された別の通常のサーバを試してみてください。接続障害情報は、nginxのだエラーログに記録されます。

一方のサーバーが繰り返し失敗する(または設定fail_timeoutパラメータmax_failsを超える)場合は、nginxのは、このサーバをキックオフします。サーバが60秒で蹴られた後、nginxのは時折、それが正常に戻ったかどうかを検出するためにそれを再接続しようとします。サーバが正常に戻っている場合は、nginxのは、ゆっくりと、接続要求の割合を増加させ、上流のグループに戻ってそれを追加します。

言うことですサービス「ホットデータ」は、通常があるので、「遅い増加」のうち、80%またはそれ以上の要求は、要求の処理が唯一の真行われ、実際の「ホット・データ・キャッシュ」にブロックされますごく一部。マシンがちょうど始まったときに、実際には「ホット・データ・キャッシュは、」今回前方に爆発が多数来て要求、確立されていない、機械が「余裕」と再びハングアップすることができない可能性が高いです。MySQLへの例として、私たちのクエリーをMySQLや通常のすべての95%以上は、クエリを実行しないくらい、本当に、キャッシュメモリに落ちます。

実際には、それが単一のマシンまたはクラスタであるかどうか、高い同時要求、再起動またはスイッチでのシーンは、危険性があり、解決するには、2つの主な方法があります。

1)要求は徐々にそれ以上に少ないから増加し、ホット・データの漸進的な蓄積は、最終的には通常のサービス状態に達します。

2)は、「ウォームアップ」、ウォームアップが完了した後、その後、オープンアクセス・サーバを行うには、事前に「一般的な」データサービスイニシアチブを用意しました。

など、原則とLVSに均衡TCP負荷は、性能の下で同じ、より多くの仕事は、元のHTTPロードバランシングの多くよりも高くなります。しかし、ないより良いLVS、LVSカーネルモジュールよりもnginxの比較的重い、ユーザーモードでnginxの作品ながら、配置、およびされています。もう一つのポイントは、それは非常に残念だった、このモジュールは、有料の機能であることが判明しました。

オリジナルの記事は、0を発表 ウォンの賞賛0 ビュー531

おすすめ

転載: blog.csdn.net/qingdao666666/article/details/104767624