しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Azure 上の Ubuntu に Nginx をインストールしてロードバランサーを構築してみた

IIS 上の Application Request Routing 3.0 と比較したかったので、その準備のために Ubuntu 上に Nginx でロードバランサーを設定してみました。

思ったよりあっさりと設定が終わったので、ちょっと拍子抜けという感じです。ちなみに手順は以下の通り。

  1. 仮想マシン(と仮想ネットワーク)を作成
  2. apt-get で Nginx をインストール
  3. nginx.conf にロードバランサーの設定を追加

大体、数十分で終わるような作業です。

仮想マシンを作成

ロードバランサーから実際の Web サーバまでは内部 IP で分かりやすくアクセスしたかったので、とりあえず仮想ネットワークを作成して全てのインスタンスを入れておくことに。

f:id:shiba-yan:20150203204509p:plain

難しく考えていましたが、割とあっさり出来ました。S2S とか P2S だと追加の設定が必要になるとか。

仮想マシンはおーみさんにおススメされたので、今回は Ubuntu 14.04 LTS を使いました。

f:id:shiba-yan:20150203205347p:plain

実際にインスタンスを作る方法は特に変わらないので省略します。

こんな感じで 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 を叩くとデフォルトのページが表示されます。

f:id:shiba-yan:20150203210043p:plain

後はロードバランサーの設定を行えば終わりです。

ロードバランサーの設定を行う

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 を使わない場合、パフォーマンスがかなり悪化したので設定を追加しました。必須の設定のようです。

*1:本当なら Nginx インストール後にイメージ作成した方が楽かも

*2:Nginx 初心者なので間違っているかもしれません