LVS + KeepalivedのCentOS 7.x設定

【実験環境】

  • CentOS 7.2
  • Nginx

以下のアドレスを使用して実験を行います:

  • VIP:192.168.136.100
  • LVS-1:192.168.136.170
  • LVS-2:192.168.136.166

【インストール】

両ノードにlvs、keepalivedをインストールします(事前にnginxはインストール済みとします)

yum install ipvsadm keepalived -y

設定スクリプトを作成

vi setup_lvs.sh

#!/bin/bash

vip_address="192.168.136.100"
lo_interface="lo:0"

# ループバックインターフェースに仮想IPを追加
ip addr add ${vip_address}/32 broadcast ${vip_address} dev ${lo_interface}
ip link set ${lo_interface} up

# ARP関連の設定
echo "1" > /proc/sys/net/ipv4/conf/${lo_interface}/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/${lo_interface}/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

# 変更を反映
sysctl -p >/dev/null 2>&1

スクリプトを実行(両方のLVSホストで実行)

bash setup_lvs.sh

設定が成功しているか確認

[root@localhost /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.136.100/32 brd 192.168.136.100 scope global lo:0
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever

【Keepalivedの設定】

マスターノードの設定ファイルを空にする

vi /etc/keepalived/keepalived.conf

global_defs {
   router_id LVS_MASTER
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.136.100
    }
}

virtual_server 192.168.136.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    protocol TCP

    real_server 192.168.136.170 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.136.166 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            retry 3
            delay_before_retry 3
        }
    }
}

スレーブノードの設定ファイルを空にする

vi /etc/keepalived/keepalived.conf

global_defs {
   router_id LVS_BACKUP
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.136.100
    }
}

virtual_server 192.168.136.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    protocol TCP

    real_server 192.168.136.170 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.136.166 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            retry 3
            delay_before_retry 3
        }
    }
}

マスターとスレーブの違い

マスター:MASTER
スレーブ:BACKUP
state MASTER -> state BACKUP

マスター優先度:100
スレーブ優先度:99
priority 100 -> priority 99

また、interface ens33はネットワークインターフェース名であり、それぞれの環境に応じて変更してください。

ルーティング転送を有効化

一時的に有効化:
echo "1" > /proc/sys/net/ipv4/ip_forward

永続的に有効化:
vi /etc/sysctl.conf
# 追加
net.ipv4.ip_forward=1
保存後

# 設定を適用
sysctl -p

Keepalivedサービスを開始(マスターから順に開始)

systemctl start keepalived.service

設定が正常に動作しているか確認

[root@localhost /]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.136.100:80 rr
  -> 192.168.136.166:80           Route   1      0          0         
  -> 192.168.136.170:80           Route   1      0          0      

ブラウザでVIPアドレスにアクセスし、正常に動作していることを確認。その後、どちらか一方のサーバーを切断し、自動フェイルオーバーが発生するかテスト。

タグ: CentOS LVS Keepalived

7月3日 20:40 投稿