NginxのTCP Load Balancing(ngx_stream_core_module)
もともとNginx+で利用できたTCP Load Balancing機能というものがある
http://nginx.com/products/application-load-balancing/
HTTPにかぎらずTCPレイヤでロードバランシグ機能を提供する。つまりMySQLやMemcachedのロードバランサとしても使用することができるようになる。
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 ...