IIS 上の Application Request Routing 3.0 と比較したかったので、その準備のために Ubuntu 上に Nginx でロードバランサーを設定してみました。
思ったよりあっさりと設定が終わったので、ちょっと拍子抜けという感じです。ちなみに手順は以下の通り。
- 仮想マシン(と仮想ネットワーク)を作成
- apt-get で Nginx をインストール
- nginx.conf にロードバランサーの設定を追加
大体、数十分で終わるような作業です。
仮想マシンを作成
ロードバランサーから実際の Web サーバまでは内部 IP で分かりやすくアクセスしたかったので、とりあえず仮想ネットワークを作成して全てのインスタンスを入れておくことに。
難しく考えていましたが、割とあっさり出来ました。S2S とか P2S だと追加の設定が必要になるとか。
仮想マシンはおーみさんにおススメされたので、今回は Ubuntu 14.04 LTS を使いました。
実際にインスタンスを作る方法は特に変わらないので省略します。
こんな感じで Ubuntu 14.04 LTS なインスタンスを 4 つ用意しました。1 つをロードバランサーにするので、そのインスタンスはエンドポイントとして 80 番を開けておきます。*1
Nginx をインストール
Nginx は apt-get を使ってサクッとインストールしました。
sudo apt-get install nginx
バージョンを確認すると 1.4.6 がインストールされたようです。ちょっと古めのバージョンですね。
$ nginx -v nginx version: nginx/1.4.6 (Ubuntu)
既にサービスは起動しているので、ブラウザから URL を叩くとデフォルトのページが表示されます。
後はロードバランサーの設定を行えば終わりです。
ロードバランサーの設定を行う
nginx.conf に upstream と proxy_pass を書けば、大体設定は終わったも同然のようです。設定ファイルのパスは /etc/nginx/nginx.conf なので http ブロック内に設定を追加しました。
upstream shibayan_nginx { server 10.0.0.5:80; server 10.0.0.6:80; server 10.0.0.7:80; keepalive 128; } server { listen 80; server_name localhost; location / { proxy_pass http://shibayan_nginx; proxy_http_version 1.1; proxy_set_header Connection ""; } }
設定に関しては、あくまでも 1 つの例と捉えてください。*2
これで nginx を再起動すれば設定が反映されて、ロードバランサーとして動作するようになります。
sudo nginx -s reload
ちなみに upstream で特に指定をしなければラウンドロビンになるようです。あと HTTP Keep-Alive を使わない場合、パフォーマンスがかなり悪化したので設定を追加しました。必須の設定のようです。