2013年3月31日日曜日

keepalivedで負荷分散 -3.keepalivedの冗長化

keepalived で負荷分散 - 2. keepalivedの設定の続きです。
以下は、keepalived自体を冗長化する例です。

1.想定するネットワーク図

keepalivedを運用するサーバには、eth0に192.168.1.99、eth1に10.1.1.1の仮想IPを割り当てます。
192.168.1.99のHTTP 80ポートへのアクセスを、リアルサーバの10.1.1.10のHTTP 80ポート、10.1.1.11のHTTP 80ポートに振り分けます。

2. リアルサーバ1,2のdefault gatewayの設定

リアルサーバ1,2のdefault gatewayをkeepalivedサーバにするための設定。ここは、前回のkeepalived で負荷分散 - 2. keepalivedの設定と同じ。
$ sudo /sbin/route add default gw 10.1.1.1

3. keepalived.confの作成

前回のkeepaliced.confにVRRPの設定を追加。このconfは、2台のkeepalivedサーバで全く同じものを記述します。state BACKUP とすることで、さきにkeepalivedを起動した方がMASTERとなり他方がBACKUPとなります。

■ keepalived.confの編集


vrrp_sync_group VG {
        group {
                VE_1
                VI_1
        }
}


vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    garp_master_delay 10
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.99
    }
}

vrrp_instance VE_1 {
    state BACKUP
    interface eth1
    garp_master_delay 10
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.1.1.1
    }
}

virtual_server 192.168.1.99 80 {
    delay_loop 6
    lb_algo lc
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    sorry_server 192.168.1.98 80

    real_server 10.1.1.10 80 {
        weight 1
        HTTP_GET {
            url {
              path /index.html
              #digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 10.1.1.11 80 {
        weight 1
        HTTP_GET {
            url {
              path /index.html
              #digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

4. keepalivedの起動

サービスの起動
# /etc/init.d/keepalived start

■ 起動状況の確認

起動後、ipコマンドを実行すると仮想IPアドレスが確認できます。仮想IPアドレスが表示されたサーバがMASTERであり、表示されなければBACKUPとして起動していることを示します。
$ sudo /sbin/ip addr show eth0

2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:b3:b3:b0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.58/24 brd 192.168.1.255 scope global eth0
    inet 192.168.1.99/32 scope global eth0
    inet6 fe80::20c:29ff:feb3:b3b0/64 scope link
       valid_lft forever preferred_lft forever
$ sudo /sbin/ip addr show eth1

3: eth1:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:b3:b3:ba brd ff:ff:ff:ff:ff:ff
    inet 10.1.1.100/24 brd 10.1.1.255 scope global eth1
    inet 10.1.1.1/32 scope global eth1
    inet6 fe80::20c:29ff:feb3:b3ba/64 scope link
       valid_lft forever preferred_lft forever

5. keepalivedの設定

keepalived.confに設定するパラメータ名と意味
state BACKUPkeepalivedの起動時に、MASTERとして起動するかBACKUPとして起動するかを指定する。2台のロードバランサー共にBACKUPと指定し起動する。priority の高いほうがMASTERとして起動する。
interface eth0VRRPパケットを送出したり受け取ったりするインターフェイスを指定する。
garp_master_delay 10マスター状態に遷移してから、gratuitous ARPを再送するまでの待ち時間[秒]。各機器のMACアドレスのキャッシュを更新する。
virtual_router_id 200仮想ルータID。vrrp_instanceごとにユニークな値を指定する。指定できる範囲は0~255。
priority 100VRRPのプライオリティ値。マスターを選出する際は、この値が大きいものが優先される。
advert_int 1VRRPパケットの送出間隔[秒]
virtual_ipaddress仮想IPアドレス。