⚖️

Debian11 で IPVS

2023/02/25に公開

環境について

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.24080 ポート で待ち受ける仮想サービスを追加します。

# 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

https://projects.horms.net/projects/ldirectord/

リアルサーバを監視して、Webサーバが落ちたリアルサーバに対するラウンドロビンをしないようにします。

インストール

# apt install --no-install-recommends ldirectord

/usr/share/doc/ldirectord/examples/ldirectord.cf を参考に /etc/ha.d/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

リアルサーバ死活監視

設定ファイルを記載します。

/etc/keepalived/keepalived.conf
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 の仕組みを利用しています。

設定ファイルを準備します。

/etc/keepalived/keepalived.conf
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 以外は先ほどと同じ内容となります。)

/etc/keepalived/keepalived.conf
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.
GitHubで編集を提案

Discussion