負荷バランス-inx基本構成と配布戦略

5666 ワード

[TOC]
1何でインバースエージェントですか?
インバースエージェントと順方向エージェントの概念については、上記の回答を貼り付けましたが、個人的にはまだイメージが強いと思います。https://www.zhihu.com/question/24723688 。
順方向プロキシは、プロキシオブジェクトがクライアントであり、クライアントが誰であるかを知らず、プロキシオブジェクトしか知らない。
リバースプロキシは、プロキシオブジェクトがサービスエンドであり、クライアントはサービスエンドが誰かを知らず、プロキシオブジェクトだけを知っています。
2 NFinxはどのように要求を処理しますか?
2.1ドメイン名に基づく仮想ホスト
server {
    listen      80;
    server_name example.org www.example.org;
    ...
}

server {
    listen      80;
    server_name example.net www.example.net;
    ...
}

server {
    listen      80;
    server_name example.com www.example.com;
    ...
}
上の構成のように、ドメイン名ベースの構成を使用して、要求はserver_に対応します。nameの本体の上に、マッチングしていないホストがあれば、このときinxはデフォルトで第一をデフォルトの処理ホストとして扱います。もちろん、以下のような構成を使ってデフォルトの処理ホストを指定することもできます。
server {
    listen      80 default_server;
    server_name example.net www.example.net;
    ...
}
2.2ドメイン名とIPに基づく仮想ホスト
次は違うホストのlisten onの異なるIPアドレスを見てみます。
server {
    listen      192.168.1.1:80;
    server_name example.org www.example.org;
    ...
}

server {
    listen      192.168.1.1:80;
    server_name example.net www.example.net;
    ...
}

server {
    listen      192.168.1.2:80;
    server_name example.com www.example.com;
    ...
}
この場合、NgixはまずIPとポートを検出して、server_を検出します。nameがマッチングしているかどうかは、IPがマッチングしたら、server_nameにマッチしていないのは、現在のip+portを使ったdefault_です。server,もし配置がないならdefault_serverはデフォルトで初めてdefault_として使用します。server.
server_についてnameのいくつかの形
  • 文字列またはIPアドレス
  • ワイルドカード、*
  • 正規表現
  • 個以上を組み合わせて構成されています。
  • いくつかの特殊文字、例えば、「」、「-」、「--」などの

  • 3負荷バランス(load balance)
    3.1負荷均衡アルゴリズム(Load balancing methods)
    http負荷の均衡としてNgixを用いて実現した。Nginx負荷均衡アルゴリズムには以下のような種類があります。
  • Round-Robinは、設定が指定されていない場合、デフォルトはポーリングアルゴリズム
  • である。
  • least-connectedは、次のリンクはアクティブリンクが最も少ないマシンにリンクされます。
  • ip-hashは、IPアドレス・ハッシュを用いて割り当てられた
  • である。
  • weight-balancingは、重みに応じて
  • を割り当てる。
    説明が必要なのは、weight-balancingはleast-connectedまたはip-hashアルゴリズムと一緒に使用されていますが、公式文書では彼をload balancing methodsの一つとしてカウントしていません。
    3.2一般的な構成例
  • の最も一般的な構成、デフォルトポーリングアルゴリズム
  • http {
        upstream myapp1 {
            server srv1.example.com;
            server srv2.example.com;
            server srv3.example.com;
        }
    
        server {
            listen 80;
    
            location / {
                proxy_pass http://myapp1;
            }
        }
    }
    
  • least-connected
  • を使用します。
    upstream myapp1 {
        least_conn;
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }
    
  • ip-hashアルゴリズムを使用する
  • upstream myapp1 {
        ip_hash;
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }
    
  • 重み分配
  • upstream myapp1 {
            server srv1.example.com weight=3;
            server srv2.example.com;
            server srv3.example.com;
        }
    
    このような構成は、srv 1が3/5を占め、srv 2、srv 3がそれぞれ1/5を占めている。
    4健康診断について
    簡単なサービスの例健康診断は、serverを使って上のfailuを配置します。timeout配置、設定失敗時間、設定時間内に応答しないと、Nginnxは継続的に試行します。可能であれば、サービスをライブとしてマークします。クライアントがエラーを返すと、Nginxはこのノードがfailedであるとマークし、転送要求をこのノードに回避する。
    健康モニタリングについては、今後のまとめの中で専門的な分析が行われます。
    5 ngx_http_アップストリームmodule
    もっと多い時、私達の配置はこのモジュールのいくつかの構成です。このモジュールの配置説明を簡単にまとめます。
    まず例を提供します。
    upstream backend {
        server backend1.example.com       weight=5;
        server backend2.example.com:8080;
        server unix:/tmp/backend3;
    
        server backup1.example.com:8080   backup;
        server backup2.example.com:8080   backup;
    }
    
    server {
        location / {
            proxy_pass http://backend;
        }
    }
    
    httpモジュールの中で重要ないくつかのノード
    ubstream name{…}
    アップストリームでよく見られるノードにserver,ip_があります。hash、keepalive、least_conn,least_時間
    それぞれこのいくつかのノードを紹介します。
    5.1アップストリーム-->server
    Syntax: server address [parameters];
    Default:    —
    Context:    upstream
    
    serverのコンテキストはup streamで、後のserverアドレスと構成パラメータは、例えば:server 192.168.0.100 weight=10 max_fails=3 fail_timeout=5選択したいくつかのパラメータの意味をそれぞれ紹介します。
  • weight=number:前に述べたように、ホストの重みを配置し、負荷均衡アルゴリズム
  • を組み合わせる。
  • max_conns=number:同時に有効になるリンク数はオンラインして、デフォルトは0で、制限しないことを表しています。server groupが共有メモリに存在しない場合、サブ値は各worker processに従って動作する。
  • fail_timeout=number:1.指定時間内にタイムアウトし、タスクサービスが間に合わない時はタイムアウトを試みます。2.サービスが利用できないと判断する時間。デフォルト時間は10 sです。
  • です。
  • max_fails=number:fail_に協力するtimeoutは、大きな試行回数を行い、デフォルト値は1、0に設定して試行回数を統計しないことを示します。
  • backup:現在のserverをバックアップマシンとして設定し、メインマシンが到達できない場合は、
  • に転送してください。
  • down:現在のノードあたご
  • をマークします。
  • resove:解析のIPを指定して、resoveを使って、http何時以下にresoverを配置する必要があります。例えば、
  • http {
        resolver 10.0.0.1;
    
        upstream u {
            zone ...;
            ...
            server example.com resolve;
        }
    }
    
  • route:サービスルーティング名
  • を設定する。
  • service:DNS解析SRVを有効にし、service名
  • を設定する。
  • slow_start:設定してからどれぐらいの時間が経ったら、Serverは自分の重み付け値を回復します。Serverは健康に達するまではどれぐらい使えますか?今回の配置はアップストリームではhashやip_には使えません。hashのアルゴリズムの中で。server Groupの中に一つのserverしかない時、max_fails、failutimeout、slow_startは無視されます。
  • 5.2 up stream-->hash/ip_sh
    hash key[consistent]key値を使用してhash負荷の均衡を行います。削除マシンを追加すると、hashをやり直す必要があります。負荷後の経路は変更できます。
    ip_hash;up streamでは、IPによるhashの割り当てを有効にします。
    5.3アップストリーム-->keepalive
    keepaliveはサーバをup streamのキャッシュにアクティブにし、上限を設定すると、リンクキャッシュの最大数を設定し、数を超えると、少なくとも使用するリンクは閉じられます。
    たとえば:
    upstream memcached_backend {
        server 127.0.0.1:11211;
        server 10.0.0.2:11211;
    
        keepalive 32;
    }
    
    5.4 up stream-->least_conn/least_時間
    least_conn:least_を使うconnの負荷バランス方式は、リンクが最も少ないマシン処理を見つけ、重みを合わせて処理します。複数の候補機器がある場合はポーリング方式を使います。
    least_タイム:平均応答時間が最も少なく、接続数が最も少ないマシンを見つけて、重みを合わせて、どのように複数の候補機器があるかを確認すると、ポーリングの方式を使います。