ホーム DoRuby keepalivedとpoundでサーバ冗長化(LB編)

keepalivedとpoundでサーバ冗長化(LB編)

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。サンドリバー砂川です。

プロジェクトで冗長構成のサーバを構築する際
keepalivedとIPVSだと、kernel等のバージョンに気を配らなければならないので結構面倒です。
そこで最近は、IPVSの代わりにpoundを使って手軽に冗長化してたりします。
今回はkeepalivedとpoundを使って冗長化する方法を掲載します。

※今回はLB編なのでpoundが出てきません。
poundの方を知りたい方は、数日中に記事を書くのでもうしばらくお待ちください。
この記事で使用するソフト
keepalived

サーバIP例

  • LB01(master) 10.0.0.10
  • LB02(backup) 10.0.0.11
  • virtual IP(vip) 10.0.0.30

各サーバは2台以上でも可能ですが、今回は簡潔にするために2台で構築します。

LB01,02共通の作業

keepalivedインストール

IPVSとkeepalivedを連携させて冗長化をする場合、kernelのバージョン等に注意しなければなりません。しかし今回負荷分散部分はpoundに任せるため、単純にコンパイルするだけでOKです。

# cd /usr/local/src
# wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz
# tar zxvf keepalived-1.1.19.tar.gz
# cd keepalived-1.1.19
# ./configure
.
.
.
Use VRRP Framework       : Yes
.
.

configure結果に上が出力されていればOK。コンパイルします。

# make
# make install

keepalived設定

LB01の/etc/keepalived/keepalived.confを以下のように記述

! Configuration File for keepalived

global_defs {
   notification_email { #フェイルオーバー発生時に送るメールの宛先等を設定
     example@kbmj.com
   }
   notification_email_from example@kbmj.com
   smtp_server localhost
   smtp_connect_timeout 30
}

vrrp_instance WEB {
    state MASTER #マスターかバックアップかを設定
    interface eth0
    smtp_alert
    virtual_router_id 2 #同じidを持つサーバ間で死活監視を行うので、LB01、02共に同じ数字を設定
    priority 100 #priorityが高いサーバから順にマスター設定される
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111 #LB01、02で共通のものを設定
    }
    virtual_ipaddress {
        10.0.0.30/24 #使用するvipを設定
    }
}

LB02の/etc/keepalived/keepalived.confも、基本的にLB01と同じですが、一部をBACKUP用の設定に書き換える必要があります。

state MASTER →state BACKUP
priority 100 → priority 50

LB01、02共にkeepalived.confを設定し終えたら、試しにkeepalivedを起動してみます。
両方のサーバで以下のコマンドを入力

# /usr/sbin/keepalived start

動作チェック

# ip addr show
LB01
inet 10.0.0.10/24 brd 10.0.0.255 scope global eth0
inet 10.0.0.30/24 scope global secondary eth0

LB02
inet 10.0.0.11/24 brd 10.0.0.255 scope global eth0

LB01のeth0インタフェースにvip(10.0.0.30)が割り振られているのが分かります。
この状態で10.0.0.30にpingを打つと、LB01にパケットが届きます。
今度は冗長化をテストする為にLB01のkeepalivedを停止してみます。
LB01で

# /usr/sbin/keepalived stop

# ip addr show
LB01
inet 10.0.0.10/24 brd 10.0.0.255 scope global eth0

LB02
inet 10.0.0.11/24 brd 10.0.0.255 scope global eth0
inet 10.0.0.30/24 scope global secondary eth0

LB02のkeepalivedがマスターとなり、LB02のeth0インタフェースにvipが割り振られました。
この状態で10.0.0.30にpingを打つと、LB02にパケットが届きます。
今度は再びLB01のkeepalivedを起動してみます。

LB01で

# /usr/sbin/keepalived start

# ip addr show
LB01
inet 10.0.0.10/24 brd 10.0.0.255 scope global eth0
inet 10.0.0.30/24 scope global secondary eth0

LB02
inet 10.0.0.11/24 brd 10.0.0.255 scope global eth0

LB01の方がpriorityの設定値が高いため、再びLB01にvipが割り振られました。
これで、vipでアクセスすればLBサーバが両方ともダウンしていない限り、生きているほうにアクセスできるということになります。
LBサーバが冗長化されました。

次回はpoundを使ったwebサーバの負荷分散と冗長化、keepalivedとの連携について書く予定です。

記事を共有

最近人気な記事