CentOS 6
Sponsored Link

LVS + Keepalived #12013/08/20

 
LVS の設定のみでは、負荷分散先として設定したサーバーのどれかがダウンしても、 コネクションをダウンサーバーへ振り分ける可能性があります。 Keepalived を使って転送先サービスの死活監視をすると、そのような状態を回避して、 サービスの冗長化をすることができます。
ここでは以下のような環境を例に設定してみます。
                          |
                       VIP|192.168.0.99
                      eth0|192.168.0.100
                    +----------+
--------------------|    LVS   |----------------------
                    +----------+
                      eth1|10.0.0.100
                          |
+----------+              |               +----------+
|          |10.0.0.30     |      10.0.0.31|          |
| Backend1 |------------------------------| Backend2 |
|   Web    | eth0                     eth0|    Web   |
+----------+                              +----------+

 
LVS + Keepalived サーバーの eth0 側へ VIP を設定し、VIP宛へ来た HTTP パケットを Backend1, Backend2 の WebサーバーへNAT転送してみます。
なお、バックエンドWebサーバーの両方で、デフォルトゲートウェイを LVS の内側アドレスに設定しておく必要があります。 (例では「10.0.0.100」)
[1] LVS の設定は Keepalived で制御されるので、まずは LVSの設定をクリアしておきます。
[root@gw ~]#
ipvsadm -C

[root@gw ~]#
/etc/rc.d/init.d/ipvsadm save

ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
[2] Keepalived インストール
[root@gw ~]#
yum -y install keepalived
[3] Keepalived 設定
[root@gw ~]#
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bk

[root@gw ~]#
vi /etc/keepalived/keepalived.conf
# 新規作成

global_defs {
    notification_email {
   
# フェイルオーバー時の通知先

        cent@srv.world
    }
   
# 通知メールの送信元

    notification_email_from root@srv.world
   
# 使用するメールサーバ

    smtp_server 127.0.0.1
    smtp_connect_timeout 30
   
# 任意の名前

    router_id LVS_Server
}
vrrp_instance VI_1 {
   
# マスターサーバーとする

    state MASTER
   
# 監視させるインターフェース

    interface eth0
   
# 仮想ルータのID

    virtual_router_id 51

    virtual_ipaddress {
   
# 仮想IPアドレス

        192.168.0.99
    }
}
virtual_server 192.168.0.99 80 {
   
# 監視する間隔

    delay_loop 3
   
# 負荷分散方式

    lvs_sched rr
   
# パケットの転送方式

    lvs_method NAT
    protocol TCP
   
# バックエンドサーバー#1

    real_server 10.0.0.30 80 {
        weight 1
        HTTP_GET {
            url {
   
# 監視先URL

                path /
   
# 正常な場合のステータスコード

                status_code 200
            }
   
# タイムアウト時間(秒)

            connect_timeout 3
        }
    }
   
# バックエンドサーバー#2

    real_server 10.0.0.31 80 {
        weight 1
        HTTP_GET {
            url {
                path /
                status_code 200
            }
            connect_timeout 3
        }
    }
}

[root@gw ~]#
/etc/rc.d/init.d/keepalived start

Starting keepalived: [ OK ]
[root@gw ~]#
chkconfig keepalived on
# Keepalived で振られたVIPは ifconfig では出ないので、以下で確認

[root@gw ~]#
ip addr show eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:16:36:92:b5:dd brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.100/24 brd 192.168.0.255 scope global eth0
    inet 192.168.0.99/32 scope global eth0
    inet6 fe80::216:36ff:fe92:b5dd/64 scope link
       valid_lft forever preferred_lft forever
[4]
以上で設定完了です。クライアントからWebブラウザで設定したVIPにアクセスして動作確認してください。
関連コンテンツ