2012年2月16日木曜日

ロードバランサーとして使う

nginxをロードバランサとしても動作することができます。

ロードバランサーは、個人ではとても買えません。
nginxならば性能は劣りますが、十分に実運用可能と思います。

有名所のロードバランサーは下記。
「F5 BIG-IP 1600」:299万円
「NetScaler 7000」:306万円
NetScalerは、GoogleやYahoo、Amazon、Mixiでも使用されています。

NetScalerの構築は、視覚的に簡単で便利なんですけどね。

### これが一番単純な書き方
### 2つのサーバに対してラウンドロビンで振り分けられる。
http {
  upstream backend {
    server 127.0.0.1:80;
    server 127.0.0.2:80;
  }

  server {
    listen 80;
    server_name sample.com;
    location / {
      proxy_pass http://backend;
    }
  }
}


### upstream項目に、少しオプションを使います。

### パターン1
# 以下の割合で、バランシングされるよう設定します。
# 127.0.0.1に80%
# 127.0.0.2に20%
# デフォルト:weight=1

  upstream backend {
    server 127.0.0.1:80 weight=4;
    server 127.0.0.2:80;
  }

### パターン2
# 同じIPアドレスから接続された場合
# 常に同じサーバに転送する
# そのサーバが動作不能の場合は、別のサーバに転送する

  upstream backend {
    ip_hash;
    server 127.0.0.1:80;
    server 127.0.0.2:80;
  }


### パターン3
# fail_timeoutの期間内にmax_failsの回数だけ試行します。
# デフォルト:max_fails=1 fail_timeout=10
# backupは、正常時にはバランシングされませんが
# backup以外のサーバが動作不能の場合に、転送されます。
  upstream backend {
    server 127.0.0.1:80 max_fails=3 fail_timeout=30;
    server 127.0.0.2:80 max_fails=3 fail_timeout=30;
    server 127.0.0.3:80 backup;
  }


### パターン4
#
# downを設定すると、そのサーバは除外されます
#

  upstream backend {
    server 127.0.0.1:80 down;
    server 127.0.0.2:80;
  }


ここが参考になります。
http://mickeyben.com/2009/12/30/using-nginx-as-a-load-balancer.html

【小言】
OSSのロードバランサーには、LVSというのもあります。
簡単に、L4ロードバランサーを構築できるものですが
サーバ台数をいかに減らしてインフラを整えるかと考えると
どうせならnginxとかapacheも、フロントとしても動いてもらいたいもんです。
L7ロードバランサーの設定も手軽です。

0 件のコメント:

コメントを投稿