【実験環境】
- 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