Home > サーバー(Debian) | サーバー技術情報 > 2台だけで負荷分散+冗長化を検証( Pound + keepalived )

2台だけで負荷分散+冗長化を検証( Pound + keepalived )

Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録 このエントリーを含むはてなブックマーク

前回のPound記事では一般的なPoundの構成を提示してみましたが、
実際に自宅サーバー等で組む場合となると「3台の構成」がミニマムとなってしまうので
なかなか敷居が高いように感じます。

ので!

今回は無理やり2台のWebサーバーのみでPoundを利用して負荷分散ができるかを検証してみました。
また、発展形として、グローバルIPが複数必要になってきますが
keepalivedで冗長化も実現してみました。

検証に使用した環境は1日にユニーク1万アクセス、100万PV(全ファイル)ほどの実稼働しているサイトを使い
muninやcactiでどれほど負荷分散がされたか確認してみました。

(今回、2台の同期方法についてはまったく考えていません。)


2台だけでPoundで負荷分散してみる

pound22

実験してみたのはこんな感じの構成です。
現在WEB1のみで運用しており、WEB1にPoundをインストールし、
これにWEB2をつける形にして、はたして負荷分散できるのかやってみました。

Poundのインストールは前回の記事を参考していただくとして・・・
設定はこんな感じです。

/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        1
 
## 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
        <span style="color: #00ffff;">Port    80</span>
 
        ## allow PUT and DELETE also (by default only GET, POST and HEAD)?:
        xHTTP           0
 
        Service
                BackEnd
                        Address 10.10.10.10
                        Port    8080
                End
 
                BackEnd
                        Address 10.10.10.11
                        Port    8080
                End
        End
 
End


ここで注意が必要なのはPoundと振り分け先(Apache)の待ち受けポートです。
Poundはポート80で待ち受け、ApacheのListen Portは8080へ設定します。

/usr/local/apach2/conf/httpd.conf

Listen 80(変更)
Listen 8080



これでApacheを再起動 → Poundを再起動
とすると無事負荷分散の準備は完了です!

しばらく放置してみて、Cactiで確認をしてみたのですが、

WEB1のロードアベレージ 1.5 → 0.7
WEB1のCPU負荷 140% → 70%


ときっちり半分になっており成功しました!
しかし、WEB1のnetstatは1台の時の4倍になっておりました。

WEB1のnetstat 40 → 160

Pound?Kernelの限界?

というわけで、今回ネックとなってくるのはnetstatの大幅な上昇がネックとなる事がわかりました。
netstatを引き換えにCPU負荷とロードアベレージを減らす…なんて事なら可能かもしれません。
Pound(Kernel?)にはTCPコネクションの限界値があるようで、
それを超えるようなサイトであった場合は負荷分散としては使えないようです。

先輩方の経験談を聞かせていただいた所
「大体netstat800が限界」との事で、
普段からnetstat200を超えるようなサイトの場合はこの方法を行う事はできないでしょう。


keepalivedも追加して冗長化してみる

無事netstatに問題がない事もわかり、イザ負荷分散!と導入したいところですが
このままでは見た感じからWEB1が単一障害点となりうるのでkeepalivedで冗長化設定をしてみました。

しかしこれを実行する為にはグローバルIPが3つ必要です。


pound23

WEB1側の設定

poundの設定に変更はありません。

keepalivedをインストール

apt-get install keepalived



設定ファイルを作成

! Configuration File for keepalived
 
global_defs {
  notification_email {
    aaaa@hogehoge.com
  }
  notification_email_from aaaa@hogehoge.com
  smtp_server localhost
  smtp_connect_timeout 30
}
 
vrrp_instance vip_test {
 state MASTER
 interface eth0
 grap_master_delay 5
 virtual_router_id 1
 priority 150
 advert_int 1
 authentication {
   auth_type PASS
   auth_pass secret
 }
 
 virtual_ipaddress {
   123.123.123.125/24 eth0
 }



WEB2側の設定

VIPが向くのはWEB1が落ちた場合なのでkeepalivedの設定のみ行います。

keepalivedをインストール

apt-get install keepalived



設定ファイルを作成

! Configuration File for keepalived
 
global_defs {
  notification_email {
    aaaa@hogehoge.com
  }
  notification_email_from aaaa@hogehoge.com
  smtp_server localhost
  smtp_connect_timeout 30
}
 
vrrp_instance vip_test {
 state BACKUP
 interface eth0
 grap_master_delay 5
 virtual_router_id 1
 priority 100
 advert_int 1
 authentication {
   auth_type PASS
   auth_pass secret
 }
 
 virtual_ipaddress {
   123.123.123.125/24 eth0
 }




後はWEB1,WEB2共にkeepalivedを起動すれば完了です

/etc/init.d/keepalived start




考察

好奇心にまかせて検証を行いましたが、
あまりいい方法ではありませんでしたね…
WEB1、WEB2共にサーバー機のスペックが低く、少ないアクセス数で問題が起きている場合には
有用かもしれませんが・・・ちょっと限定的すぎますね。

2台だけで負荷分散する方法…何かいい方法があれば教えて下さい。
(少なくとも最後のkeepalivedを入れるくらいならDNSラウンドロビンで対応したほうがよさそう…)




コメント:0

コメントフォーム
情報を保存

トラックバック:0

この記事のトラックバックURL
http://www.ahref.org/tech/server/server-tips/654.html/trackback
この記事へのリンク
エーエイチレフ linuxサーバー技術情報 からの記事 2台だけで負荷分散+冗長化を検証( Pound + keepalived )

Home > サーバー(Debian) | サーバー技術情報 > 2台だけで負荷分散+冗長化を検証( Pound + keepalived )

Return to page top

運営会社(株)シーズ WEBアプリケーション、フリーCGI配布「ahref(エーエイチレフ)」 Eビジネスに強いレンタルサーバー「ACサーバー」 大容量ファイル転送サービス「デカメール」 動画を楽しもう♪動画ポータルコミュニティ「モヴィエ」