53
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Dockerを使ってロードバランシング環境構築

Last updated at Posted at 2015-12-14

この記事は Docker Advent Calendar 2015 15日目の記事です。

目的

Dockerを利用して、2台のサーバーに対してロードバランシングする環境を作成する。

ではさっそく構築に取り掛かります。

最終的な構成としては以下にになります。

  • ロードバランサー
    • 1台
  • Webサーバー
    • 2台

今回はNginxの機能を使用してロードバランシングを実現します。

別の方法としてはhaproxyを使う方法があります。
dockerfile/haproxy
Dockerで簡易的にロードバランシングを行いたい場合はこちらで充分でしょう。

前提知識

Nginxでのロードバランシング設定
Using nginx as HTTP load balancer
Nginxを使用してのロードバランシング

上記設定を用います。
今回はデフォルトのラウンドロビンにします。

docker-compose.yml

nginx_server:
  image: nginx
  links:
   - web
  volumes:
   - ./loadbalancer:/etc/nginx/conf.d
  ports:
   - "80:80"

web:
  image: kitematic/hello-world-nginx
loadbalancer/nginx.conf
upstream web {
    server loadbalance_web_1;
    server loadbalance_web_2;
}

server {

    listen       80;
    location / {
           proxy_pass http://web;
    }
}

設定は以上です。

構築していきます。

mkdir loadbalance
cd loadbalance

docker-composeは使用できるものとします。

docker-compose up -d

このタイミングでは、nginx_serverのコンテナでloadbalance_web_2のhostが見つからないとエラーになると思います。

webサーバーを2台に増やします。

docker-compose scale web=2

このコマンドを実行することでwebコンテナが2台に増えます。
nginx_serverのコンテナをリスタートします。

docker-compose restart nginx_server

これで完成です。

docker-machine ip default

で、IPを確認し、アクセスしてみます。


http:192.168.99.100

docker-log等で2台のwebサーバーのログを確認しつつアクセスしてみましょう。
ロードバランシングされていることが確認できます。

解説

docker-composeではlinkしたコンテナがhostsに設定されます。

172.17.0.33	loadbalance_web_2
172.17.0.33	loadbalance_web_2.bridge
172.17.0.34	loadbalance_web_1
172.17.0.34	loadbalance_web_1.bridge

scaleコマンドを発行する前はweb_2のhosts設定がなかったためエラーとなり起動ができませんでした。
scale後は再起動することでhostsに反映されます。

53
55
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
53
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?