Nginx

Nginx Usage (Nginx使い方のまとめ)

もっとも単純なロードバランシングの設定例

http {
    upstream backend1 {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend1;
        }
    }
}

上の例では、 srv1-srv3 で動作している同じアプリケーションの3つのインスタンスがあります。ロードバランシングメソッドが具体的に設定されていない場合は、 デフォルトがラウンドロビンになります。全てのリクエストはサーバグループ backend に proxiedされ、nginxはリクエストを分配するためにHTTPロードバランシングを適用します。

ロードバランスの方法
* round-robin — アプリケーションへのリクエストはラウンドロビンの形式で分配されます.
* least-connected — 次のリクエストはアクティブな接続の数がもっとも少ないサーバに割り当てられます.(アクセス元が同じIPの場合、前回と同じバックエンドに振り分けたい時に使う)
* ip-hash — 次のリクエストにどのサーバが選択されるべきかを決めるためにハッシュ関数が使われる(クライアントのIPアドレスに基づく).

    upstream backend1 {
        least_conn;
        # ip_hash;
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

nginxのリバースプロキシ実装はHTTP, HTTPS, FastCGI, uwsgi, SCGIとmemcachedのロードバランシングを含んでいます。

HTTPではなくHTTPSのためのロードバランシングを設定するためには、単にプロトコルとして”https”を使います。

FastCGI, uwsgi, SCGI または memcached,のロードバランシングを設定する場合、fastcgi_pass, uwsgi_pass, scgi_pass と memcached_pass ディレクティブをそれぞれ利用します。

振り分けの重みづけしたい

    upstream backend1 {
        server srv1.example.com:8080 weight=4;
        server srv2.example.com:8080
    }

上記設定(Defaultはround-robin方式)では、例えば5回のアクセスがあったら以下の配分となる.
srv1.example.com 5回中4回のアクセス
srv2.example.com 5回中1回のアクセス

バックエンドのアクセスが失敗した時の挙動を調整したい

max_failsfail_timeout で調整

upstream backend1 {
  ip_hash;
  server srv1.example.com:8080 max_fails=3 fal_timeout=10s;
  server srv2.example.com:8080;
}

上記の場合、3回試行し、全てダメだったらダウンと判断する。1回のアクセス時のタイムアウトは10秒。

メインとなるバックエンドが落ちた時に別のサーバに振り分けたい

upstream backend1 {
  server srv1.example.com:8080;
  server srv2.example.com:8080 backup;
}

注:各パラメータ(weight、max_fails、fail_timeout)のデフォルト値以下となる。

weight=1 max_fails=1 fail_timeout=10

参考

http://mogile.web.fc2.com/nginx/http/load_balancing.html
http://og732.hatenadiary.com/entry/2013/05/08/225939

コメントを残す