CentOS 7
Sponsored Link

LVS + Keepalived
2015/06/10
 
LVS + Keepalived 構成で、LVS + Keepalived サーバーを冗長化します。
ここでは以下のような環境を例に設定します。
                              |
             +----------------+-----------------+
             |                                  |
 192.168.0.30|eth0 --- VIP:192.168.0.29 --- eth0|192.168.0.31
     +-------+--------+                +--------+-------+
     | LVS+Keepalived |                | LVS+Keepalived |
     +-------+--------+                +--------+-------+
    10.0.0.30|eth1 ----- VIP:10.0.0.29 ---- eth1|10.0.0.31
             |                                  |
             +----------------+-----------------+
                              |
    +------------+            |             +------------+
    |  Backend01 |10.0.0.51   |    10.0.0.52|  Backend02 |
    | Web Server +------------+-------------+ Web Server |
    |            |eth0                  eth0|            |
    +------------+                          +------------+


 
LVS + Keepalived サーバーの eth0, eth1 双方へ VIP を設定し、eth0 側の VIP宛へ来た HTTP パケットを Backend01, Backend02 の Webサーバーへ NAT 方式で負荷分散します。
事前にバックエンド Webサーバーのデフォルトゲートウェイを LVS の内側 VIP (例では「10.0.0.29」) に設定しておきます。
[1] ipvsadm および keepalived をインストールします。
[root@dlp ~]#
yum -y install ipvsadm keepalived
# IP フォワードを有効にする

[root@dlp ~]#
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf

[root@dlp ~]#
sysctl -p
[root@dlp ~]#
touch /etc/sysconfig/ipvsadm

[root@dlp ~]#
systemctl start ipvsadm

[root@dlp ~]#
systemctl enable ipvsadm

[2] Keepalived 設定です。
双方の Keepalived サーバーで 1箇所を除き、以下のように同じ設定で OK です。 「priority」の箇所のみ双方のサーバーで重複した値にならないように適当に値を変更ください。
[root@dlp ~]#
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.org

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

global_defs {
    notification_email {
        root@dlp.srv.world
    }
    notification_email_from root@dlp.srv.world
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id LVS_Server
}
vrrp_instance VI_1 {
    # 両方でバックアップとする(プライオリティで制御する)
    state BACKUP
    # 監視させるインターフェース
    interface eth0
    # 仮想ルータのID
    virtual_router_id 51
    # プライオリティ (双方のサーバーで値を変更)
    # (値の大きい方が優先度が高くなる)
    priority 100
    # プライオリティが高い方へ復帰しない
    nopreempt
    # VRRP送信間隔
    advert_int 1
    # VRRPをやり取りする際の認証情報
    authentication {
        auth_type PASS
        auth_pass password
    }

    virtual_ipaddress {
        # 仮想IPアドレス
        192.168.0.29 dev eth0
        10.0.0.29/24 dev eth1
    }
}
virtual_server 192.168.0.29 80 {
    # 監視する間隔
    delay_loop 3
    # 負荷分散方式
    lvs_sched rr
    # パケットの転送方式
    lvs_method NAT
    protocol TCP

    # バックエンドサーバー#1
    real_server 10.0.0.51 80 {
        weight 1
        HTTP_GET {
            url {
                # 監視先URL
                path /
                # 正常な場合のステータスコード
                status_code 200
            }
            # タイムアウト時間(秒)
            connect_timeout 3
        }
    }
    # バックエンドサーバー#2
    real_server 10.0.0.52 80 {
        weight 1
        HTTP_GET {
            url {
                path /
                status_code 200
            }
            connect_timeout 3
        }
    }
}

[root@dlp ~]#
systemctl start keepalived

[root@dlp ~]#
systemctl enable keepalived

[3]
以上で設定完了です。任意のクライアントPC から Webブラウザで設定した VIP にアクセスして動作確認してください。 また、いずれかの Keepalived サーバーや バックエンド Web サーバーをダウンさせて、サービスが正常に切り替わるかも確認してください。
 
Tweet