会社の同僚が「引っ越しをしたーい!」と言うので、物件(楽○市場で犬小屋を物色)を探しつつLBの設定を行っていきます。
GMOクラウドでは仮想IPが利用できないため、LVSの構築がほぼ不可能なための打開策(?)です。
もともと用意されているロードバランサーを利用すればイイと言う声も聞こえそうですが、外向きのIPを2個も使われてしまってはコストがどんどん上がってしまう一方で、収入がない・・・死亡となってしまいます。
そこで、ロードバランサーとしてpoundを利用して行きます。
早速、設定を行っていきます。
まず、poundは入っていないはずなのでyumを利用してインストールを行います。
[shell]
yum install -y pound
[/shell]
インストールが完了したら、設定ファイルを編集します。
[shell]
vi /etc/pound.cfg
[/shell]
実際に設定する内容としては、下記の内容となります。(さらに下へ続きます)
[shell]
# Execute User
User “user”
# Execute Group
Group “group”
# Check Alive Time
Alive 30
# Proccess Type
Daemon 1
# Logging Level
LogLevel 0
# Logging Facitilty
LogFacility local5
# MaxClientTimeOut
Client 200
# Timeout
TimeOut 100
[/shell]
上記の内容について、解説して行きます。
User
実行ユーザー
Group
実行グループ
Alive
バックエンドサーバの生存確認を行う間隔
Daemon
daemonとして稼働させるかの設定
- 0:フォアグラウンド
- 1:バックグラウンド
LogLevel
ログレベル(0 ~ 5を指定)
ただし、poundのdaemon設定を”0″のフォアグラウンドにしている場合には無効
- 0:no logging
- 1:normal log
- 2:full log
- 3:Apache combined log format
- 4:Apache combined log format without virtual host
LogFacility
ログの出力方法の設定(local0 ~ 7の空いている個所を利用)
- local1:syslogへ出力
Client
poundとブラウザ間のタイムアウト秒数
TimeOut
poundとapacheのタイムアウト秒数
下記、/etc/pound.cfgの設定の続きとなります。(続きです)
[shell]
ListenHTTP
Address xxx.xxx.xxx.xxx
Port 80
xHTTP 0
Service
HeadRequire “Host: *example.com”
Redirect “http://www.example.com”
End
Service
HeadRequire “Host: .*www.example.com”
BackEnd
Address zzz.zzz.zzz.zzz
Port 80
Priority 5
End
End
End
[/shell]
ListenHTTPの中には、それぞれの設定を追加していきますが、内容としては下記の通りになっています。
ListenHTTP
- Address:アクセスを待ち受けるIPアドレス
- Port:アクセスを待ち受けるポート番号
xHTTP
- 0:GET、POST、HEAD
- 1:PUT、DELETE
- 2:WebDAV
(LOCK、UNLOCK、PROPFIND、PROPPATCH、SEARCH、MKCOL、MOVE、COPY、OPTIONS、TRACE、MKACTIVITY、CHECKOUT、MERGE、REPORT) - 3:MS extensions WebDAV
(SUBSCRIBE、UNSUBSCRIBE、NOTIFY、BPROPFIND、BPROPPATCH、POLL、BMOVE、BCOPY、BDELETE、CONNECT) - 4:MS RPC extensions
(RPC_IN_DATA、RPC_OUT_DATA)
次に、Serviceの設定を行います。
内容としては下記の通りになります。
Service
- HeadRequire:パターンを指定
- Redirect:上記のパターンに一致した場合のリダイレクト先
最後に設定するものは、BackEndとなります。
内容としては下記の通りになります。
BackEnd
- Address:バックエンドのサーバIP
- Port:バックエンドのサーバポート番号
Priority
Priorityには、1~9までの数値を設定
数値が大きいほど優先度が高く、小さいほど優先度が低くなる
ここまで設定が完了したら、一度設定に問題ないかを確認しましょう。
[shell]
pound -c
[/shell]
エラーが出た場合には、pound.cfgのどこに問題があるかを行数とエラー内容が出力されます。
ここで、エラーが出ず「OK」と表示されたら起動してみましょう。
[shell]
/etc/init.d/pound start
[/shell]
最後に起動できたかを、下記の方法で確認していきます。
まずは、サービスが起動しているかを確認します。
[shell]
/etc/init.d/pound status
[/shell]
バックエンドのサーバ(Web)が存在する場合には、ブラウザから対象URLへアクセスしページが表示されることを確認することで、稼働の確認を行うことも可能です。
まだまだ細かい設定などが可能となっており、Webサーバへのアクセスを画像などの静的ファイルの場合と、PHPなどの処理を含む動的の場合でサーバを分ける(nginxとapache)などの負荷分散も行うことができます。
使い方次第ですが、abやjmeterなどで高アクセス状態の負荷を掛けてもほぼpoundには影響せず、BackEndに指定したサーバへ分散してくれます。
ただし、負荷分散してくれるのですが・・・均一ではないためアクセスが集中しているサーバへさらに割り振られることもあり、負荷を掛けている際に、「うほっ!やべっ!!」となることもあったので、そのあたりの解決策があれば知りたいところです。
コメント
[…] らできる?←それなら理屈上オートフェイルオーバーもできるはずだが。。。 http://blog.code4u.org/archives/444 http://gmo1973.blogspot.jp/2013/01/blog-post_21.html もしかしたら、ローカル側のパケット […]