- 投稿日2009-11-27 (金)
- 更新日2009-11-27 (金) 22:32
- サーバー技術情報
お手軽なのに高機能なPoundを使ってロードバランサ構成なサーバーを構築します。
構成例
今回はロードバランサの構成として、以下のような環境を作りたいと思います。
LB : Poundをインストールするサーバー。
Web1 : Poundで振り分けされるWebサーバー①
Web2 : Poundで振り分けされるWebサーバー②
LBへパウンドを導入する事によって
インターネットからのリクエストはLBサーバーによって適宜WEB1、WEB2へ振り分けられます。
また、WEB1やWEB2が障害等により停止した場合はそのサーバーへ振り分けず
正常稼働しているサーバーへのみへ自動で振り分けます。(フェイルオーバー)
Poundのインストールと設定
aptで簡単インストールapt-get install pound
自動起動を行うよう設定します
vi /etc/default/pound
startup=1 に変更
パウンドの設定ファイルを編集します。
vi /etc/pound/pound.cfg
以下のように設定します。## Minimal sample pound.cfg
##
## see pound(8) for details
######################################################################
## global options:
User "www-data"
Group "www-data"
#RootJail "/chroot/pound"
## Logging: (goes to syslog by default)
## 0 no logging
## 1 normal
## 2 extended
## 3 Apache-style (common log format)
LogLevel 0
## check backend every X secs:
Alive 30
## use hardware-accelleration card supported by openssl(1):
#SSLEngine ""
######################################################################
## listen, redirect and ... to:
## redirect all requests on port 8080 ("ListenHTTP") to the local webserver (see "Service" below):
ListenHTTP
Address 123.123.123.123
Port 80
## allow PUT and DELETE also (by default only GET, POST and HEAD)?:
xHTTP
Service
HeadRequire "Host: .*"
BackEnd
Address 10.10.10.10
port 80
priority 1
End
BackEnd
Address 10.10.10.11
port 80
priority 1
End
End
End
Service のディレクティブが重要な設定です。
HeadRequire
Apacheで言うバーチャルホストのようなもの。このホストからリクエストが来た場合は以下にロードバランスする、、といった感じのディレクティブ。HeadRequire “Host: .*”で”すべてのホスト”を示します。
BackEnd
実際にロードバランスで振り分けるサーバーのAddoressを記述。priorityは優先度の意味で、この数値によってどちらへ多く振り分けるかを設定する事が出来る。均等にする場合は二つのサーバーのpriorityを同一にする。ポートはそのまま使用するポートです。
以上で基本的な設定は終了
pound -c -v
でconfigファイルの記述ミスを確認してから、
/etc/init.d/pound stop
/etc/init.d/pound start
で起動です。Poundの確認
WEB1、WEB2がListenポート80で立ち上がっているなら、正常にロードバランスされるはずです。試しにWEB1とWEB2のドキュメントルートへtest.htmlというファイルを用意し、中の記述を替えて接続して何度も更新してみると接続の度に接続先がWEB1とWEB2で変わっていく事を確認できると思います。
この状態でWEB1を落としてみましょう。電源を落としたりApacheを停止したり、LANケーブルを抜いてもいいです。
するとPoundは自動的にフェイルオーバーし、接続はWEB2のみへ向かい、ユーザーにアクセスエラーの画面を表示する事はありません。
負荷対策としても有効なPoundですが、こういった冗長化も簡単にできるところが魅力ですね。
リバースプロキシの導入
無事にロードバランサが動いたら、WEB1,WEB2のApacheアクセスログを確認してみましょう。するとすべての接続が 10.10.10.1のようにLBからの接続となってしまってると思います。
この対策として、WEB1とWEB2のApacheへリバースプロキシを導入を行います。
※Apache 2.x系
mod_extract_forwarded2 というモジュールを使用します。
Apacheはソースよりインストールし、–enable-soとしてコンパイルしているものとします。
cd /usr/local/src
wget http://www.openinfo.co.uk/apache/extract_forwarded-2.0.2.tar.gz
tar zxvf extract_forwarded-2.0.2.tar.gz
cd extract_forwarded
コンパイル前にソースファイルを編集
vi mod_extract_forwarded.c
define USING_proxy_http_module 1
となっているところをコメントアウト
/*
#define USING_proxy_http_module 1
*/
Apacheへ組み込み
/usr/local/apache2/bin/apxs -c -i -a mod_extract_forwarded.c
Apacheの設定ファイルを編集
vi /usr/local/apache2/conf/httpd.conf
まずはLoadModule extract_forwarded_module modules/mod_extract_forwarded.so
の行が追加されている事を確認
その後、httpd.confの最後に以下のように追記。(別に最後じゃなくてもいいですが;)
MEForder refuse,accept
MEFrefuse all
MEFaccept 10.10.10.1
MEFacceptのIPアドレスはLBのIPアドレスです。
※Apache 1.x系
Apache1.x系統の場合はリバースプロクシ mod_rpafを使用するのですが、
.htaccess等でアクセス制限などをした場合でも適用されないという問題があります。
(X-Forwarded-Forという環境変数を見るため)
その為
.htaccessの記述で
allow from 123.123.123.123
allow from 123.123.123.124
となっているところを
SetEnvIf X-Forwarded-For “^123\.123\.123\.123″ access_123
allow from env=access_123
SetEnvIf X-Forwarded-For “^123\.123\.123\.124″ access_124
allow from env=access_124
という記述にすることで一応は回避することができます。
ではmod_rpufのインストールです
cd /usr/local/src
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar zxvf mod_rpaf-0.6.tar.gz
cd /usr/local/src/mod_rpaf-0.6
Makefileのソースを修正
vi Makefile
APXS=$(shell which apxs)
APXS2=$(shell which apxs2)
APXS2=/usr/local/apache/bin/apxs
/usr/local/apache/bin/apxsの項目は環境に合わせて修正して下さい。
make rpaf-2.0
make install-2.0
以上でインストール完了vi /usr/local/apache/conf/httpd.conf
(以下を追記)
LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname Off
RPAFproxy_ips 10.10.10.1
後はちゃんとApacheのアクセスログへホストが記述されているかを確認して終了です。
SSLラッパの利用
SSLラッパとは、HTTPSに対応していないWebサーバに代わり、PoundがクライアントとHTTPS通信を行う機能です。こちらもPoundの設定ファイルで簡単に設定可能です
CSRやプライベート鍵、中間CA等は予め取得している状態とします。
まずそれぞれのファイルの内容をweb.pemとでも名前を付けて記述します。
vi /etc/pound/ssl/web.pem
そのPCのCSR
↓
プライベートキー
↓
認証局の証明書(中間CA)
の順番でファイルの中身のテキストを貼り付ける。
具体的にweb.pemの内容はこんな感じです
vi /etc/pound/ssl/web.pem
-----BEGIN CERTIFICATE----
(省略)
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
(省略)
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
(省略)
-----END CERTIFICATE-----
以上のファイルが作成できたらPoundの設定ファイルでhttpsアクセスの場合の設定を記述して終了です。
パウンドの設定ファイルを編集します。
vi /etc/pound/pound.cfg
以下のように追記します。ListenHTTPS
Address 123.123.123.123
Port 443
Cert "/etc/pound/ssl/web.pem"
## allow PUT and DELETE also (by default only GET, POST and HEAD)?:
xHTTP 0
Service
HeadRequire "Host: *"
BackEnd
Address 10.10.10.10
Port 8080
priority 1
End
BackEnd
Address 10.10.10.11
Port 8080
priority 1
End
End
End
一般のアクセスの設定でポート80を使用しているのでここではポート8080としてみました。
あとは再起動をして終了です。
pound -c -v
でconfigファイルの記述ミスを確認してから、
/etc/init.d/pound stop
/etc/init.d/pound start
で起動です。ロードバランス先のApacheでのリダイレクト
少しはまった事があったので記述。PoundでHostでリダイレクトすると、URL部分が引き継げなかったので
のでApache2の設定にてリダイレクトする事にしたのだが、ループエラーが生じる…
これは飛ばし先のドキュメントルートがよまれていない為に起こるようです。
リダイレクトの前に飛ばし先のドキュメントルートを入れておきましょう。
飛ばし元:www.hoge-old.com
飛ばし先:www.hoge-new.com
www.hoge-old.comでアクセスすると移行のURL部分を引き継いで
www.hoge-new.comになるようにする。
httpd-vhosts.conf の設定
NameVirtualHost *:8080
ServerAdmin info@ahref.org
DocumentRoot /usr/local/apache2/htdocs
ServerName www.hoge-new.com
ServerName www.hoge-old.com
Redirect permanent / www.hoge-new.com
- 次の記事→ RAIDカードARC-1222でRAID6のサーバー構築
- 前の記事→ MYSQLレプリケーション設定
コメント:0
トラックバック:1
- この記事のトラックバックURL
- http://www.ahref.org/tech/server/server-tips/571.html/trackback
- この記事へのリンク
- エーエイチレフ linuxサーバー技術情報 からの記事 Poundでロードバランサを実現する
- pingback from 2台だけで負荷分散+冗長化を検証( Pound + keepalived ) - エーエイチレフ linuxサーバー技術情報 09-12-21 (月) 19:57
-
[...] 前回のPound記事では一般的なPoundの構成を提示してみましたが、 実際に自宅サーバー等で組む場合となると「3台の構成」がミニマムとなってしまうので なかなか敷居が高いように感じ [...]













関連記事