読者です 読者をやめる 読者になる 読者になる

Carpe Diem

備忘録。https://github.com/jun06t

Apache でロードバランサ構築

Apache の proxy_balancer モジュールでロードバランサを構築します。

アプリケーションで制御しているのでL7ロードバランサですね。

 

◆環境

Ubuntu 14.04

Apache 2.4.7

 

vagrant で3台サーバを起動する

新規で Vagrantfile を作って下さい。それに以下の内容を追記します。

  config.vm.define :lb do |web|
    web.vm.network :private_network, ip: "192.168.33.10"
  end

  config.vm.define :web1 do |web|
    web.vm.network :private_network, ip: "192.168.33.11"
  end

  config.vm.define :web2 do |web|
    web.vm.network :private_network, ip: "192.168.33.12"
  end

設定ファイルからわかるように

ロードバランサ:lb

Webサーバ1:web1

Webサーバ2:web2

という設定です。

$ vagrant up

で3台とも起動します。

 

◆WebサーバにApacheを導入する

以下は web1, web2 ともにほぼ同じです。一応両方記述しておきます。

まず web1 から

$ vagrant ssh web1

で入った後で

$ sudo aptitude update
$ sudo aptitude install apache2

これでインストールは完了です。次に表示するページを分かりやすくするために index.html を上書きしておきます。

$ sudo su
# echo "web1" > /var/www/html/index.html

動作確認しましょう。

$ curl http://localhost/
web1

きちんと表示されますね。 同じように web2 もインストールします。

$ vagrant ssh web2

で入った後で

$ sudo aptitude update
$ sudo aptitude install apache2

同じくindex.html を上書きしておきます。

$ sudo su
# echo "web2" > /var/www/html/index.html

動作確認しましょう。

$ curl http://localhost/
web2

こちらもきちんと設定出来ました。

 

◆ロードバランサを構築する

$ vagrant ssh lb

でロードバランサ用サーバに入ります。 Apacheのモジュールで構築するので、これもApacheをインストールします。

$ sudo aptitude update
$ sudo aptitude install apache2

次に必要なモジュールを ON にします。

$ sudo a2enmod proxy
$ sudo a2enmod proxy_balancer
$ sudo a2enmod proxy_http
$ sudo a2enmod lbmethod_byrequests

ON にしたらロードバランサの設定を行います。 編集するファイルは /etc/apache2/mods-available/proxy_balancer.conf /etc/apache2/sites-available/000-default.conf のどちらでも大丈夫ですが、独自の編集なので site-available の方が個人的には良いと思います。 以下を追記して下さい。

ProxyPass / balancer://mycluster/

<Proxy balancer://mycluster/>
  BalancerMember http://192.168.33.11/ loadfactor=10
  BalancerMember http://192.168.33.12/ loadfactor=10
  ProxySet lbmethod=byrequests
</Proxy>

今回はルート「/」をマッピングしようとしてるので

ProxyPass / balancer://mycluster/

としています。 例えば「/test」をマッピングしたければ

ProxyPass /test balancer://mycluster

といった感じにします。この辺はApacheのディレクティブ設定を参照して下さい。 注意として最後に「/」を入れた時はどのパスにも「/」を入れて下さい。 逆に付けない時は他のパスも付けないで下さい。 このように統一しないとうまく動いてくれないです。 loadfactor は重みです。大きい方が優先されるようになります。 設定が完了したら再起動します。

$ sudo service apache2 restart

 

◆動作確認

lb の中で curl を叩くと web1, web2 を割り振って表示してくれるようになります。

$ curl http://localhost/
web1
$ curl http://localhost/
web2

以上です。

 

ソース:

mod_proxy_balancer の振り分け挙動について調べたのと failonstatus を試してみた

Apache モジュール mod_proxy_balancer