Ubuntu 16.04
Sponsored Link

LVS + Keepalived
2016/06/12
 
LVS + Keepalived 構成で、LVS サーバーを冗長化します。
ここでは以下のような環境を例に設定します。
        |
--------+--------------------------------------------------------------------
        |
        +-----------------+-------------------+--------------------+
        |10.0.0.40(VIP)   |10.0.0.40(VIP)     |                    |
    eth0|10.0.0.30    eth0|10.0.0.31      eth0|10.0.0.51       eth0|10.0.0.52
 +------+-----+    +------+-----+     +-------+------+     +-------+------+
 | LVS Server |    | LVS Server |     |   Backend#1  |     |   Backend#2  |
 |      #1    |    |      #2    |     |  Web Server  |     |  Web Server  |
 +------------+    +------------+     +--------------+     +--------------+

 
LVS + Keepalived サーバーの 10.0.0.40(VIP)宛へ来た HTTP パケットを Backend#1, Backend#2 の Webサーバーへ DSR(Direct Server Return) 方式で負荷分散します。
[1] LVS サーバー全台に ipvsadm と Keepalived をインストールします。
root@dlp:~#
apt-get -y install ipvsadm keepalived
[2] Keepalived 設定です。
双方の Keepalived サーバーで 1箇所を除き、以下のように同じ設定で OK です。
「priority」の箇所のみ双方のサーバーで重複した値にならないように適当に値を変更ください。
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アドレス
        10.0.0.40 dev eth0
    }
}
virtual_server 10.0.0.40 80 {
    # 監視する間隔
    delay_loop 3
    # 負荷分散方式
    lvs_sched rr
    # パケットの転送方式
    lvs_method DR
    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 restart keepalived
[3] DSR 方式の場合、バックエンドからクライアントへの戻りパケットはダイレクトになるため、以下のような設定が必要になります。 バックエンドサーバー全台で設定します。
# IP アドレスの部分は仮想IP を指定

root@node01:~#
iptables -t nat -A PREROUTING -d 10.0.0.40 -j REDIRECT
[4]
以上で設定完了です。任意のクライアントPC から Webブラウザで設定した VIP にアクセスして動作確認してください。 また、いずれかの Keepalived サーバーや バックエンド Web サーバーをダウンさせて、サービスが正常に切り替わるかも確認してください。
 
Tweet