Debian11 で IPVS
環境について
Debian11 に IPVS によるL4ロードバランサーを構築してみます。
リアルサーバ側設定
リアルサーバのデフォルトルートが、IPVSの仮想サービスのアドレスとなるように設定します。
# ip route add default via 10.2.1.240
# ip route show default
default via 10.2.1.240 dev ens4
IPVS 設定
パッケージの導入
必要なパッケージをインストールします。
# apt install --no-install-recommends ipvsadm
# ipvsadm --version
ipvsadm v1.31 2019/12/24 (compiled with popt and IPVS v1.2.1)
IP転送設定
カーネルパラメータ設定で、IP転送を許可します。
# grep ip_forward /etc/sysctl.conf
#net.ipv4.ip_forward=1
# sed -i.bak -e '/ip_forward/ s/^#//' /etc/sysctl.conf
# diff /etc/sysctl.conf*
28c28
< net.ipv4.ip_forward=1
---
> #net.ipv4.ip_forward=1
# sysctl -p
net.ipv4.ip_forward = 1
# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
設定
仮想サービス追加
10.2.0.240
の 80 ポート
で待ち受ける仮想サービスを追加します。
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
# ipvsadm -A -t 10.2.0.240:80 -s rr
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.2.0.240:80 rr
リアルサーバ追加
リアルサーバを1台追加してみます。
# ipvsadm -a -t 10.2.0.240:80 -r 10.2.1.242:80 -m
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.2.0.240:80 rr
-> 10.2.1.242:80 Masq 1 0 0
外部から仮想サービスのアドレスにアクセスして、リアルサーバからの応答が転送されることを確認します。
その後確認すると、下記のように ActiveConn、または InActConn の値が増えているはずです。
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.2.0.240:80 rr
-> 10.2.1.242:80 Masq 1 0 3
リアルサーバをもう一台追加してみます。
# ipvsadm -a -t 10.2.0.240:80 -r 10.2.1.243:80 -m
外部から仮想サービスのアドレスにアクセスすると
2台のリアルサーバへラウンドロビンされるようになります。
疑似障害
リアルサーバのうちの1台の Webサーバプロセスを落とした場合、
仮想サービスのアドレスにアクセスすると、プロセスを落とした側の Webサーバに対してもラウンドロビンしてしまいます。
$ curl 10.2.0.240
curl: (7) Failed to connect to 10.2.0.240 port 80: Connection refused
応答のない Webサーバに対してはラウンドロビンしないようにするためには、何らかの仕組みが必要となります。
設定削除
リアルサーバを削除してみます。
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.2.0.240:80 rr
-> 10.2.1.242:80 Masq 1 0 3
-> 10.2.1.243:80 Masq 1 0 3
# ipvsadm -d -t 10.2.0.240:80 -r 10.2.1.242:80
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.2.0.240:80 rr
-> 10.2.1.243:80 Masq 1 0 0
# ipvsadm -d -t 10.2.0.240:80 -r 10.2.1.243:80
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.2.0.240:80 rr
仮想サービスを削除してみます。
# ipvsadm -D -t 10.2.0.240:80
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
なお、 ipvsadm -C
により、全削除が可能です。
# ipvsadm -C
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
ldirectord
リアルサーバを監視して、Webサーバが落ちたリアルサーバに対するラウンドロビンをしないようにします。
インストール
# apt install --no-install-recommends ldirectord
/usr/share/doc/ldirectord/examples/ldirectord.cf
を参考に /etc/ha.d/ldirectord.cf
を編集します。
checktimeout=3
checkinterval=1
autoreload=yes
quiescent=no
virtual=10.2.0.240:80
servicename=Web Site
comment=Test load balanced web site
real=10.2.1.242:80 masq
real=10.2.1.243:80 masq
fallback=127.0.0.1:80 masq
service=http
scheduler=rr
protocol=tcp
checktype=negotiate
checkport=80
request="index.html"
receive="debian11"
設定ファイルを更新すると、ログに下記のような内容が出力されます。 (元の設定が autoreload=yes
)
[Sat Feb 18 19:02:27 2023|ldirectord|3519] Configuration file '/etc/ha.d/ldirectord.cf' has changed on disk
[Sat Feb 18 19:02:27 2023|ldirectord|3519] - reread new configuration
[Sat Feb 18 19:02:27 2023|ldirectord|3519] Changed virtual server: 10.2.0.240:80
autoreload=no
の場合、デーモンをリスタートします。
# systemctl restart ldirectord
IPVS の状態を確認すると、設定ファイルに記載した仮想サービス、リアルサーバが登録されているはずです。
仮想サービスへアクセスすると、設定したリアルサーバに対してラウンドロビンします。
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.2.0.240:80 rr
-> 10.2.1.242:80 Masq 1 0 0
-> 10.2.1.243:80 Masq 1 0 0
疑似障害
request
で指定したファイルの内容から receive
で指定した文字列を削除してみます。
# echo debian10 > /var/www/html/index.html
ログには下記のメッセージが出力されます。
[Sat Feb 18 19:04:57 2023|ldirectord|3519] Deleted real server: 10.2.1.242:80 (10.2.0.240:80)
疑似障害を発生させたリアルサーバが、ロードバランサーから切り離されています。
この状態で仮想サービスにアクセスすると、ロードバランサーに登録されているリアルサーバのみにアクセスします。
疑似障害によるクライアント影響はありません。
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.2.0.240:80 rr
-> 10.2.1.243:80 Masq 1 0 2
疑似障害から復旧させます。
# hostname > /var/www/html/index.html
ログには下記が出力されます。
[Sat Feb 18 19:06:35 2023|ldirectord|3519] Added real server: 10.2.1.242:80 (10.2.0.240:80) (Weight set to 1)
リアルサーバが切り戻されました。
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.2.0.240:80 rr
-> 10.2.1.242:80 Masq 1 0 0
-> 10.2.1.243:80 Masq 1 0 0
ldirectord
を停止すると、IPVS の内容は削除されます。
# systemctl stop ldirectord
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
OS起動時に IPVS が起動するのは困る場合には、下記で自動起動を停止しておきます。
# systemctl disable ldirectord
Synchronizing state of ldirectord.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable ldirectord
Removed /etc/systemd/system/multi-user.target.wants/ldirectord.service.
keepalived
keepalived により、リアルサーバの死活監視と合わせて、IPVSの冗長化を実現することができます。
apt パッケージを利用してインストールします。
# apt install --no-install-recommends keepalived
リアルサーバ死活監視
設定ファイルを記載します。
virtual_server 10.2.0.240 80 {
delay_loop 5
lvs_sched rr
lvs_method NAT
protocol TCP
real_server 10.2.1.242 80 {
weight 1
inhibit_on_failure
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 5
delay_before_retry 3
}
}
real_server 10.2.1.243 80 {
weight 1
inhibit_on_failure
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 5
delay_before_retry 3
}
}
}
設定ファイルに異常がないか確認し、デーモンを再起動します。
# keepalived --config-test
# echo $?
0
# systemctl restart keepalived
ログには以下のような内容が出力されます。
Feb 19 01:59:33 debian11 Keepalived_healthcheckers[4026]: Activating healthchecker for service [10.2.1.242]:tcp:80 for VS [10.2.0.240]:tcp:80
Feb 19 01:59:33 debian11 Keepalived_healthcheckers[4026]: Activating healthchecker for service [10.2.1.243]:tcp:80 for VS [10.2.0.240]:tcp:80
Feb 19 01:59:33 debian11 Keepalived_healthcheckers[4026]: Activating BFD healthchecker
Feb 19 01:59:34 debian11 Keepalived_healthcheckers[4026]: Remote Web server [10.2.1.243]:tcp:80 succeed on service.
Feb 19 01:59:38 debian11 Keepalived_healthcheckers[4026]: Remote Web server [10.2.1.242]:tcp:80 succeed on service.
IPVS の状態を確認します。
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.2.0.240:80 rr
-> 10.2.1.242:80 Masq 1 0 1
-> 10.2.1.243:80 Masq 1 0 2
疑似障害
リアルサーバの一台で nginx を停止すると、ログには以下のような内容が出力されます。
Feb 19 02:02:21 debian11 Keepalived_healthcheckers[4026]: HTTP_CHECK on service [10.2.1.242]:tcp:80 failed after 1 retry.
Feb 19 02:02:21 debian11 Keepalived_healthcheckers[4026]: Disabling service [10.2.1.242]:tcp:80 to VS [10.2.0.240]:tcp:80
IPVS の状態を確認します。
nginx を停止したほうの Weight の値が0になっています。
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.2.0.240:80 rr
-> 10.2.1.242:80 Masq 0 0 0
-> 10.2.1.243:80 Masq 1 0 3
切り戻し
停止した nginx を再度起動すると、ログには以下のような内容が出力されます。
Feb 19 02:04:26 debian11 Keepalived_healthcheckers[4026]: HTTP status code success to [10.2.1.242]:tcp:80 url(/)
Feb 19 02:04:31 debian11 Keepalived_healthcheckers[4026]: HTTP status code success to [10.2.1.242]:tcp:80 url(/)
Feb 19 02:04:31 debian11 Keepalived_healthcheckers[4026]: Remote Web server [10.2.1.242]:tcp:80 succeed on service.
Feb 19 02:04:31 debian11 Keepalived_healthcheckers[4026]: Enabling service [10.2.1.242]:tcp:80 to VS [10.2.0.240]:tcp:80
IPVS の状態を確認します。
Weight の値が1に戻っています。
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.2.0.240:80 rr
-> 10.2.1.242:80 Masq 1 0 2
-> 10.2.1.243:80 Masq 1 0 1
IPVSの冗長化
IPVSの冗長化では、VRRP の仕組みを利用しています。
設定ファイルを準備します。
global_defs {
#notification_email {
# snmp@example.com
#}
#notification_email_from debian11-0@eexample.com
#smtp_server 10.2.0.1
#smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_sync_group VG1 {
group {
VI_EXT
VI_INT
}
}
vrrp_instance VI_EXT {
state MASTER
interface ens3
virtual_router_id 1
priority 105
advert_int 1
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {
10.2.0.254
}
}
vrrp_instance VI_INT {
state MASTER
interface ens4
virtual_router_id 2
priority 105
advert_int 1
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {
10.2.1.254
}
}
virtual_server 10.2.0.254 80 {
delay_loop 5
lvs_sched rr
lvs_method NAT
protocol TCP
real_server 10.2.1.242 80 {
weight 1
inhibit_on_failure
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 5
delay_before_retry 3
}
}
real_server 10.2.1.243 80 {
weight 1
inhibit_on_failure
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 5
delay_before_retry 3
}
}
}
設定ファイルに異常がないか確認し、デーモンを再起動します。
# keepalived --config-test
# echo $?
0
# systemctl restart keepalived
ログには以下のような内容が出力されます。
Feb 19 02:34:33 debian11 Keepalived_vrrp[4088]: (VI_INT) Entering BACKUP STATE (init)
Feb 19 02:34:36 debian11 Keepalived_vrrp[4088]: (VI_INT) Entering MASTER STATE
Feb 19 02:34:36 debian11 Keepalived_vrrp[4088]: VRRP_Group(VG1) Syncing instances to MASTER state
Feb 19 02:34:36 debian11 Keepalived_vrrp[4088]: (VI_EXT) Entering MASTER STATE
IPVS の状態を確認します。
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.2.0.254:80 rr
-> 10.2.1.242:80 Masq 1 0 0
-> 10.2.1.243:80 Masq 1 0 0
仮想アドレスを確認します。
# ip a show ens3
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:00:00:01 brd ff:ff:ff:ff:ff:ff
altname enp0s3
inet 10.2.0.240/24 brd 10.2.0.255 scope global ens3
valid_lft forever preferred_lft forever
inet 10.2.0.254/32 scope global ens3
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe00:1/64 scope link
valid_lft forever preferred_lft forever
# ip a show ens4
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:00:04:01 brd ff:ff:ff:ff:ff:ff
altname enp0s4
inet 10.2.1.240/24 brd 10.2.1.255 scope global ens4
valid_lft forever preferred_lft forever
inet 10.2.1.254/32 scope global ens4
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe00:401/64 scope link
valid_lft forever preferred_lft forever
冗長構成
冗長構成とするため、ロードバランサーとなるサーバをもう一台準備します。
カーネルパラメータで、IPv4 のパケット転送を許可します。
# grep ip_forward /etc/sysctl.conf
#net.ipv4.ip_forward=1
# sed -i.bak -e '/ip_forward/ s/^#//' /etc/sysctl.conf
# diff /etc/sysctl.conf*
28c28
< net.ipv4.ip_forward=1
---
> #net.ipv4.ip_forward=1
# sysctl -p
net.ipv4.ip_forward = 1
# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
必要なパッケージをインストールします。
# apt install --no-install-recommends keepalived ipvsadm
設定ファイルを用意します。 ( state
priority
以外は先ほどと同じ内容となります。)
global_defs {
#notification_email {
# snmp@example.com
#}
#notification_email_from debian11-0@eexample.com
#smtp_server 10.2.0.1
#smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_sync_group VG1 {
group {
VI_EXT
VI_INT
}
}
vrrp_instance VI_EXT {
state BACKUP
interface ens3
virtual_router_id 1
priority 95
advert_int 1
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {
10.2.0.254
}
}
vrrp_instance VI_INT {
state BACKUP
interface ens4
virtual_router_id 2
priority 95
advert_int 1
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {
10.2.1.254
}
}
virtual_server 10.2.0.254 80 {
delay_loop 5
lvs_sched rr
lvs_method NAT
protocol TCP
real_server 10.2.1.242 80 {
weight 1
inhibit_on_failure
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 5
delay_before_retry 3
}
}
real_server 10.2.1.243 80 {
weight 1
inhibit_on_failure
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 5
delay_before_retry 3
}
}
}
コンフィグテストをし、デーモンを再起動します。
# keepalived --config-test
# echo $?
0
# systemctl restart keepalived
ログには以下のような内容が出力されます。
Feb 19 02:36:33 debian11-1 Keepalived_vrrp[763]: (VI_EXT) Entering BACKUP STATE (init)
Feb 19 02:36:33 debian11-1 Keepalived_vrrp[763]: (VI_INT) Entering BACKUP STATE (init)
IPVS の状態を確認します。
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.2.0.254:80 rr
-> 10.2.1.242:80 Masq 1 0 0
-> 10.2.1.243:80 Masq 1 0 0
仮想アドレスを確認します。
# ip a show ens3
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:00:01:01 brd ff:ff:ff:ff:ff:ff
altname enp0s3
inet 10.2.0.241/24 brd 10.2.0.255 scope global ens3
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe00:101/64 scope link
valid_lft forever preferred_lft forever
# ip a show ens4
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:00:05:01 brd ff:ff:ff:ff:ff:ff
altname enp0s4
inet 10.2.1.241/24 scope global ens4
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe00:501/64 scope link
valid_lft forever preferred_lft forever
系切り替え
マスター側で keepalived を停止します。
# systemctl stop keepalived
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
ログには以下のような内容が出力されます。
Feb 19 02:38:38 debian11-1 Keepalived_vrrp[763]: (VI_EXT) Backup received priority 0 advertisement
Feb 19 02:38:38 debian11-1 Keepalived_vrrp[763]: (VI_INT) Backup received priority 0 advertisement
Feb 19 02:38:39 debian11-1 Keepalived_vrrp[763]: (VI_INT) Entering MASTER STATE
Feb 19 02:38:39 debian11-1 Keepalived_vrrp[763]: VRRP_Group(VG1) Syncing instances to MASTER state
Feb 19 02:38:39 debian11-1 Keepalived_vrrp[763]: (VI_EXT) Entering MASTER STATE
スタンバイ系で確認すると仮想アドレスが割り当てられています。
# ip a show ens3
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:00:01:01 brd ff:ff:ff:ff:ff:ff
altname enp0s3
inet 10.2.0.241/24 brd 10.2.0.255 scope global ens3
valid_lft forever preferred_lft forever
inet 10.2.0.254/32 scope global ens3
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe00:101/64 scope link
valid_lft forever preferred_lft forever
# ip a show ens4
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:00:05:01 brd ff:ff:ff:ff:ff:ff
altname enp0s4
inet 10.2.1.241/24 scope global ens4
valid_lft forever preferred_lft forever
inet 10.2.1.254/32 scope global ens4
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe00:501/64 scope link
valid_lft forever preferred_lft forever
IPVS の状態を確認します。
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.2.0.254:80 rr
-> 10.2.1.242:80 Masq 1 0 2
-> 10.2.1.243:80 Masq 1 0 2
切り戻し
先ほど停止した keepalived を起動します。
# systemctl start keepalived
ログには以下のような内容が出力されます。
Feb 19 02:44:46 debian11 Keepalived_vrrp[4108]: (VI_INT) received lower priority (95) advert from 10.2.1.241 - discarding
Feb 19 02:44:46 debian11 Keepalived_vrrp[4108]: (VI_EXT) received lower priority (95) advert from 10.2.0.241 - discarding
Feb 19 02:44:47 debian11 Keepalived_vrrp[4108]: (VI_INT) Entering MASTER STATE
Feb 19 02:44:47 debian11 Keepalived_vrrp[4108]: VRRP_Group(VG1) Syncing instances to MASTER state
Feb 19 02:44:47 debian11 Keepalived_vrrp[4108]: (VI_EXT) Entering MASTER STATE
IPVS の状態を確認します。
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.2.0.254:80 rr
-> 10.2.1.242:80 Masq 1 0 0
-> 10.2.1.243:80 Masq 1 0 0
仮想アドレスを確認します。
# ip a show ens3
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:00:00:01 brd ff:ff:ff:ff:ff:ff
altname enp0s3
inet 10.2.0.240/24 brd 10.2.0.255 scope global ens3
valid_lft forever preferred_lft forever
inet 10.2.0.254/32 scope global ens3
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe00:1/64 scope link
valid_lft forever preferred_lft forever
# ip a show ens4
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:00:04:01 brd ff:ff:ff:ff:ff:ff
altname enp0s4
inet 10.2.1.240/24 brd 10.2.1.255 scope global ens4
valid_lft forever preferred_lft forever
inet 10.2.1.254/32 scope global ens4
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe00:401/64 scope link
valid_lft forever preferred_lft forever
この時、スタンバイ系の IPVS と仮想アドレスは下記のようになっています。
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.2.0.254:80 rr
-> 10.2.1.242:80 Masq 1 0 0
-> 10.2.1.243:80 Masq 1 0 0
# ip a show ens3
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:00:01:01 brd ff:ff:ff:ff:ff:ff
altname enp0s3
inet 10.2.0.241/24 brd 10.2.0.255 scope global ens3
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe00:101/64 scope link
valid_lft forever preferred_lft forever
# ip a show ens4
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:00:05:01 brd ff:ff:ff:ff:ff:ff
altname enp0s4
inet 10.2.1.241/24 scope global ens4
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe00:501/64 scope link
valid_lft forever preferred_lft forever
OS起動時に IPVS、keepalived が起動するのが困る場合には、下記で自動起動を停止しておきます。
# systemctl disable keepalived
Synchronizing state of keepalived.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable keepalived
Removed /etc/systemd/system/multi-user.target.wants/keepalived.service.
Discussion