nginx負荷バランスと逆エージェント


負荷バランス
ユーザの要求を均一にしたり、あるいは一定の優先度でサーバーのセットの一つに割り当てたりして、要求されたサーバから独立した処理要求を受信して返します。負荷均衡技術は主にバックエンドサービスの性能を拡張するために用いられる。
逆プロキシ
プロキシサーバは、受信したユーザ要求を内部サーバに転送し、内部サーバから返された結果をユーザに返すと、プロキシサーバはサーバとしての役割を果たします。
実例
設定ファイルに下記のコードを記入します。
upstream backend {
    server 192.168.43.158:8086 weight=4 max_fails=2 fail_timeout=30s;  
    server 192.168.41.167 weight=4 max_fails=2 fail_timeout=30s; 
    server unix:/tmp/backends weight=4 max_fails=2 fail_timeout=30s;
}
server {
    listen 80 ;
    server_name frontend.com;
    location = / {
        proxy_pass http://backend;
        proxy_set_header Host backend.com;
        proxy_set_header Forwarded $remote_addr;
    }
}
proxyパスは逆エージェントを指定するためのuplstreamサーバクラスタで、proxy_setheaderは、指定されたヘッダ情報を追加するために、バックエンドサーバにドメイン名ベースの仮想ホストが複数ある場合、ホストは、どの仮想ホストにアクセスするべきかを指定してもよく、forwarded情報を追加して、バックエンドサービス端末ユーザにipアドレスを教えても良い。バックエンドサーバーはフロントエンドプロキシのipアドレスしか取得できません。
Upsteamモジュール
nginxは、ubstreamモジュールを利用して負荷の均衡を実現し、バックエンドサーバーの健康診断も可能です。
  • ip_hash命令
  • ip_hash命令は、あるクライアントの要求をip hashアルゴリズムによって同じバックエンドサーバに位置決めすることができ、これによって、クライアントの要求が常にバックエンドサーバに向けられていることが保証され、そうでないとランダムに異なるバックエンドサーバに向けられます。
    ip_hashの欠点は、バックエンドサーバの負荷バランスを保証できないことであり、ipの不均一によって、バックエンドサーバが受信する要求が多くなり、バックエンドサーバの重みを設定しても機能しない可能性があるからである。
    あるバックエンドサーバーがnginx負荷バランスから一時的に削除する場合は、設定ファイルから直接削除またはコメントを削除するのではなく、それを「down」と表記しなければなりません。コードは以下の通りです
    upstream backend {
        ip_hash;
        server backend1.com;
        server backend2.com;
        server backend3.com;
        server backend4.com down;
    }
    直接にbackend 4.comを配置ファイルから削除すると、inxは3台のバックエンドサーバによってshを再開します。backend 1に向けたユーザーはbackend 2に再配向する可能性があります。そうすると、backend 1上のユーザーデータは無効になります。例えば、SESSIONデータ。
  • server指令
  • このコマンドはバックエンドサーバの名前とパラメータを指定するために使用され、サーバーの名前はドメイン名、ip、ポート番号またはunix scoketとすることができます。
    パラメータは主にあります
    weightは、バックエンドサーバの重みを設定するほど、重みが高く、割り当てられたクライアント要求数が多い。重みが設定されていない場合、重み値はデフォルトでは1となります。
    max_failsは、パラメータfail_に指定します。タイムアウト時間内にバックエンドサーバが失敗した回数を要求し、バックエンドサーバが接続できないことやサーバ内部のエラーが検出された場合、フラグが失敗し、デフォルト値は1で、0に設定したらこのチェックをオフにします。
    fail_timeoutは、指定された時間内に失敗回数がmax_に達したらfailsの場合、バックエンドサーバはサービスの時間を一時停止します。
    ダウンタウンは、マークサーバが永久オフライン状態で、ip_にのみ使用されます。hashコマンド
    backupは、backupサーバー以外の全てのマシンや忙しい時だけ有効です。
  • ubstream関連変数
  • ログを使って、ubstreamサーバーの状態を記録するときは、ログを使ってもいいです。formatでは、関連する変数を使用します。例えば、
    $up stream_addr:処理要求のuplstream中のサーバーアドレスを表します。
    $up stream_status:up streamサーバーの対応状態を表示します。
    $up stream_レスポンスtime:up streamサービスの応答時間(ミリ秒);
    $up stream_http_HEADER:任意のhttpプロトコルのヘッダ情報、例えば、$http_ホスト
    実例は以下の通りです
    upstream backend {
        server 172.28.0.21:80 max_fails=3 fail_timeout=10s;
        server 172.28.0.14:80 max_fails=3 fail_timeout=10s;
    }
    server {
        listen 8360 ;
        server_name ${DOMAIN};
        location = / {
            proxy_pass http://backend;
            proxy_set_header Host ${DOMAIN};
            proxy_set_header Forwarded $remote_addr;
        }
        log_format up '$upstream_addr $upstream_status $upstream_response_time $upstream_http_host';
        access_log  access.log up;
    }
    access.logsの内容は以下の通りです。172.28.0.14:80、172.28.0.21:80、200 0.000、0.050-172.28.0.14:80、0.00.000、0.050、0.050-172.2.28.08.8.8.8.8.8.18:80、172.2.28.0.0.0.01、200 0.0.0.0.00 0、0.002、0.0.0.00 0 0 0-172.2.2.2.2.2.2.8.80、200、200、2.2.2.2.2.2.2.2.2.200、200、2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.200、200、200、200、2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.8.8.8.8.8.8.8.8.8.8.8.8.80、200、0.001、0.001、0.002、0.001、を選択します。
    ログの内容は主に3つのセクションが見られます。最初のセクションは3回の訪問があります。そのうち14マシンは502に戻り、21マシンは200に戻り、3回の訪問後14マシンはサービスを停止し、10秒後に再度訪問し、14マシンはサービスを提供し始めましたが、戻りの状態は依然として502です。