NginxのTCP Load BalancingがOSS版でも使えるらしいので試す

NginxのTCP Load Balancing(ngx_stream_core_module)

もともとNginx+で利用できたTCP Load Balancing機能というものがある
http://nginx.com/products/application-load-balancing/


HTTPにかぎらずTCPレイヤでロードバランシグ機能を提供する。つまりMySQLMemcachedのロードバランサとしても使用することができるようになる。


OSS版でも使用できるようになったらしいhttp://hg.nginx.org/nginx/rev/61d7ae76647d


試しにMemcachedのロードバランサを構築してみた(環境はubuntu14.04)

nginxビルド

ざっと適当にインストール

sudo apt-get install libpcre3 libpcre3-dev build-essential


http://hg.nginx.org/nginx/ より最新リビジョンをダウンロードしてビルドする。

wget http://hg.nginx.org/nginx/archive/61d7ae76647d.tar.gz
tar zxvf ./61d7ae76647d.tar.gz
cd nginx-61d7ae76647d

./auto/configure  --with-stream
make
sudo make install

どうやら、--with-stream_ssl_module なんてのもあるぽい

conf

nginx.confに以下の設定をする。
バックエンドとして、memcachedを立てたサーバを別途用意した。


ココらへんを参考に
http://nginx.org/en/docs/stream/ngx_stream_core_module.html

stream {
    upstream backend {
        server 192.168.0.2:11211 weight=5 max_fails=3 fail_timeout=30s;
        server 192.168.0.3:11211 weight=5 max_fails=3 fail_timeout=30s;
    }

    server {
        listen 11211;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        proxy_pass backend;
    }
}

接続してみる

nginxを起動し、nginxを立てたサーバよりtelnetをする。
数回statsを見ると、別のpidであり別々のサーバに繋がっている事が確認できる。

vagrant@dev:~$ telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
stats
STAT pid 3556
...
vagrant@dev:~$ telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
stats
STAT pid 11249
...