hana_shinのLinux技術ブログ

Linuxの技術情報を掲載しています。特にネットワークをメインに掲載していきます。

keepalivedの環境構築手順



1 keepalivedとは?

冗長構成のシステムを構築するためのツールです。ここでは、keepalivedを使って、サーバ2台の冗長構成を作成してみます。

2 検証環境

2.1 ネットワーク構成

KVMホストに仮想マシン2台構成です。仮想IPアドレスは192.168.122.100です。また、各サーバの実IPアドレスは以下のとおりです。
・サーバ1の実IPアドレス:192.168.122.216
・サーバ2の実IPアドレス:192.168.122.181

                  仮想IP=192.168.122.100

+--- server1 ---+                     +--- server2 ---+
|  (CentOS7.9)  |                     |  (CentOS7.9)  |
|               |                     |               |
|               |                     |               |
+----- eth0 ----+                     +----- eth0 ----+
        | .216                                |.181
        |                                     |
-------------------------------------------------------
                    192.168.122.0/24

2.2 版数

CentOS版数は、サーバ1、サーバ2ともに下記版数です。

[root@server1 ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

カーネル版数は以下のとおりです。

[root@server1 ~]# uname  -r
3.10.0-1160.el7.x86_64

3 パッケージのインストール

サーバ1、サーバ2でkeepalivedパッケージをインストールします。

[root@server1 ~]# yum -y install keepalived
[root@server2 ~]# yum -y install keepalived

keepalivedの版数を確認します。

[root@server1 ~]# keepalived --version
Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2
-snip-

サーバの切り替えをhttpdを使って確認するため、httpdパッケージをインストールします。サーバ1、サーバ2でhttpdパッケージをインストールします。

[root@server1 ~]# yum -y install httpd
[root@server2 ~]# yum -y install httpd

4 Netfilterの設定

各サーバのkeepalivedは、お互いが生きているかどうかをマルチキャストパケットを送信しあって監視します。そのため、それぞれのサーバでマルチキャストパケットを送受信できるようにする必要があります。なお、Netfilterの位置づけは、firewall-cmdの使い方 - hana_shinのLinux技術ブログを参照してください。

4.1 サーバ1の設定

224.0.0.18宛てのマルチキャストパケットの受信を許可します。なお、firewall-cmdコマンドの使い方は、firewall-cmdの使い方 - hana_shinのLinux技術ブログを参照してください。

[root@server1 ~]# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -i eth0 -d 224.0.0.18 -p vrrp -j ACCEPT
success

224.0.0.18宛てのマルチキャストパケットの送信を許可します。

[root@server1 ~]# firewall-cmd --direct --add-rule ipv4 filter OUTPUT 1 -o eth0 -d 224.0.0.18 -p vrrp -j ACCEPT
success

サーバが再起動すると設定が消えるので、設定をパーマネントルールとして保存します。

[root@server1 ~]# firewall-cmd --runtime-to-permanent
success

設定内容を確認します。マルチキャストパケットの送受信を許可するルールが設定されていることがわかります。

[root@server1 ~]# firewall-cmd --direct --get-all-rules
ipv4 filter OUTPUT 1 -o eth0 -d 224.0.0.18 -p vrrp -j ACCEPT
ipv4 filter INPUT 1 -i eth0 -d 224.0.0.18 -p vrrp -j ACCEPT

4.2 サーバ2の設定

224.0.0.18宛てのマルチキャストパケットの受信を許可します。

[root@server2 ~]# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -i eth0 -d 224.0.0.18 -p vrrp -j ACCEPT
success

224.0.0.18宛てのマルチキャストパケットの送信を許可します。

[root@server2 ~]# firewall-cmd --direct --add-rule ipv4 filter OUTPUT 1 -o eth0 -d 224.0.0.18 -p vrrp -j ACCEPT
success

サーバが再起動すると設定が消えるので、設定をパーマネントルールとして保存します。

[root@server2 ~]# firewall-cmd --runtime-to-permanent
success

設定したルールを確認します。マルチキャストパケットの送受信を許可するルールが設定されていることがわかります。

[root@server2 ~]# firewall-cmd --direct --get-all-rules
ipv4 filter OUTPUT 1 -o eth0 -d 224.0.0.18 -p vrrp -j ACCEPT
ipv4 filter INPUT 1 -i eth0 -d 224.0.0.18 -p vrrp -j ACCEPT

5 httpdサーバの設定

5.1 サーバ1の設定

index.htmlを編集します。

[root@server1 ~]# echo "Server1" > /var/www/html/index.html

index.htmlの中身を確認します。

[root@server1 ~]# cat /var/www/html/index.html
Server1

httpdサービスを再起動します。

[root@server1 ~]# systemctl restart httpd

httpdがListenしているポート番号を確認します。httpdが80番ポートでListenしていることがわかります。なお、lsofコマンドの使い方は、lsofコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。

[root@server1 ~]# lsof -i:80
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   1641   root    4u  IPv6  58389      0t0  TCP *:http (LISTEN)
httpd   1642 apache    4u  IPv6  58389      0t0  TCP *:http (LISTEN)
httpd   1643 apache    4u  IPv6  58389      0t0  TCP *:http (LISTEN)
httpd   1644 apache    4u  IPv6  58389      0t0  TCP *:http (LISTEN)
httpd   1645 apache    4u  IPv6  58389      0t0  TCP *:http (LISTEN)
httpd   1646 apache    4u  IPv6  58389      0t0  TCP *:http (LISTEN)

httpdがListenしている80番ポートを解放します。

[root@server1 ~]# firewall-cmd --permanent --add-port=80/tcp
success
[root@server1 ~]# firewall-cmd --reload
success

kvmホストでcurlコマンドを実行します。このとき、IPアドレスはサーバ1の実IPアドレスを指定します。

[root@kvm ~]# curl http://192.168.122.216:80
Server1

5.2 サーバ2の設定

index.htmlを編集します。

[root@server2 ~]# echo "Server2" > /var/www/html/index.html

index.htmlの中身を確認します。

[root@server2 ~]# cat /var/www/html/index.html
Server2

httpdサービスを再起動します。

[root@server2 ~]# systemctl restart httpd

httpdがListenしているポート番号を確認します。httpdが80番ポートでListenしていることがわかります。

[root@server2 ~]# lsof -i:80
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   1456   root    4u  IPv6  58374      0t0  TCP *:http (LISTEN)
httpd   1457 apache    4u  IPv6  58374      0t0  TCP *:http (LISTEN)
httpd   1458 apache    4u  IPv6  58374      0t0  TCP *:http (LISTEN)
httpd   1459 apache    4u  IPv6  58374      0t0  TCP *:http (LISTEN)
httpd   1460 apache    4u  IPv6  58374      0t0  TCP *:http (LISTEN)
httpd   1461 apache    4u  IPv6  58374      0t0  TCP *:http (LISTEN)

httpdがListenしている80番ポートを解放します。

[root@server2 ~]# firewall-cmd --permanent --add-port=80/tcp
success
[root@server2 ~]# firewall-cmd --reload
success

kvmホストでcurlコマンドを実行します。このとき、IPアドレスはサーバ2の実IPアドレスを指定します。

[root@kvm ~]# curl http://192.168.122.181:80
Server2

6 SELinuxの設定

SELinuxが有効になっていると、vrrp_script(後述)が実行できませんでした。本来、vrrp_scriptを実行できるようにルールを作成する必要があるのですが、今現在ルールの作成方法がわからないのでSELinuxの設定をPermissiveに変更します。

サーバ1のSELinux設定をPermissiveに変更します。

[root@server1 ~]# setenforce 0
[root@server1 ~]# getenforce
Permissive

サーバ2のSELinux設定をPermissiveに変更します。

[root@server2 ~]# setenforce 0
[root@server2 ~]# getenforce
Permissive

なお、サーバを再起動するとSELinuxの設定内容が消えてしまうので、再起動しても設定を維持したい場合は設定ファイル(/etc/sysconfig/selinux)を編集してください。

7 動作確認(その1)

keepalivedをサーバ1、サーバ2の順で起動すると、サーバ1がMASTER、サーバ2がBACKUPになります。このとき、サーバ1のNICに仮想IPアドレスが設定されます。そして、サーバ1のkeepalivedを停止すると、サーバ1の仮想IPアドレスが削除され、サーバ2のNICに設定されることを確認してみます。

7.1 設定ファイル編集

オリジナルの設定ファイルをバックアップします。

[root@server1 ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.org

サーバ1とサーバ2で、同じ内容の設定ファイルを作成します。

[root@server1 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    virtual_ipaddress {
        192.168.122.100/24
    }
}
[root@server1 ~]#

7.2 サーバ1の初期状態確認

keepalived起動前のIPアドレスを確認します。eth0に実IPアドレスが設定されていることがわかります。

[root@server1 ~]# ip a show dev eth0|grep -w inet
    inet 192.168.122.216/24 brd 192.168.122.255 scope global noprefixroute dynamic eth0

keepalivedを起動します。

[root@server1 ~]# systemctl start keepalived

keepalivedの状態を確認します。keepalivedがactiveになったことがわかります。

[root@server1 ~]# systemctl is-active keepalived
active

keepalived起動後のIPアドレスを確認します。eth0に仮想IPアドレスが設定されたことがわかります(期待値)。

[root@server1 ~]# ip a show dev eth0|grep -w inet
    inet 192.168.122.216/24 brd 192.168.122.255 scope global noprefixroute dynamic eth0
    inet 192.168.122.100/24 scope global secondary eth0

7.3 サーバ2の初期状態確認

keepalived起動前のIPアドレスを確認します。eth0に実IPアドレスが設定されていることがわかります。

[root@server2 ~]# ip a show dev eth0|grep -w inet
    inet 192.168.122.181/24 brd 192.168.122.255 scope global noprefixroute dynamic eth0

keepalivedを起動します。

[root@server2 ~]# systemctl start keepalived

keepalivedの状態を確認します。keepalivedがactiveになったことがわかります。

[root@server2 ~]# systemctl is-active keepalived
active

keepalived起動後のIPアドレスを確認します。サーバ2のeth0には実IPしか設定されていないことがわかります(期待値)。

[root@server2 ~]# ip a show dev eth0|grep -w inet
    inet 192.168.122.181/24 brd 192.168.122.255 scope global noprefixroute dynamic eth0

7.4 動作確認

kvmホストでcurlコマンドを実行します。このとき、仮想IPアドレスを宛先に指定します。この時点で仮想IPアドレスは、サーバ1に割り当てられているので、サーバ1のindex.htmlの内容が表示されていることがわかります。

[root@kvm ~]# curl http://192.168.122.100:80
Server1

サーバ1のkeepalivedを停止します。

[root@server1 ~]# systemctl stop keepalived.service

サーバ1のIPアドレスを確認します。仮想IPアドレスが削除されたことがわかります。

[root@server1 ~]# ip a show dev eth0|grep -w inet
    inet 192.168.122.216/24 brd 192.168.122.255 scope global noprefixroute dynamic eth0

次にサーバ2のIPアドレスを確認します。仮想IPアドレスが設定されたことがわかります。

[root@server2 ~]# ip a show dev eth0|grep -w inet
    inet 192.168.122.181/24 brd 192.168.122.255 scope global noprefixroute dynamic eth0
    inet 192.168.122.100/24 scope global secondary eth0

kvmホストでcurlコマンドを実行します。このとき、仮想IPアドレスを宛先に指定します。この時点で仮想IPアドレスは、サーバ2に割り当てられているので、サーバ2のindex.htmlの内容が表示されていることがわかります。

[root@kvm ~]# curl http://192.168.122.100:80
Server2

8 動作確認(その2)

httpdプロセスの終了を検出したら、サーバ1からサーバ2にMASTERが切り替わることを確認します。

8.1 vrrp_scriptとは?

設定ファイルから、シェルスクリプトを実行する機能です。シェルスクリプトでプロセスの状態をチェックして、もしプロセスが終了したらMASTERを切り替える、といったことができます。

8.2 シェルスクリプトの作成

サーバ1とサーバ2で、同じ内容のシェルスクリプトを作成します。

[root@server1 ~]# vi /etc/keepalived/chk_httpd.sh
[root@server1 ~]# cat /etc/keepalived/chk_httpd.sh
#!/usr/bin/bash
systemctl is-active httpd

シェルスクリプトの実行権を変更します。

[root@server1 ~]# chmod 744 /etc/keepalived/chk_httpd.sh

8.3 設定ファイルの作成

サーバ1とサーバ2で、同じ内容の設定ファイルを作成します。設定内容は、2秒間隔(interval)でシェルスクリプトを実行し、2回続けてhttpdの状態が異常(fall)だったら、FAULTを返す内容になっています。

[root@server1 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
}

vrrp_script chk_httpd {
    script "/etc/keepalived/chk_httpd.sh"
    interval 2
    fall 2
    rise 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    virtual_ipaddress {
        192.168.122.100/24 dev eth0
    }
    track_script {
      chk_httpd
    }
}
[root@server1 ~]#

設定ファイルを作成したら、サーバ1とサーバ2でkeepalivedを再起動します。

[root@server1 ~]# systemctl restart keepalived.service

8.4 動作確認

サーバ1のIPアドレスを確認します。

[root@server1 ~]#  ip a show dev eth0|grep -w inet
    inet 192.168.122.216/24 brd 192.168.122.255 scope global noprefixroute dynamic eth0
    inet 192.168.122.100/24 scope global eth0

kvmホストでcurlコマンドを実行します。この時点で仮想IPアドレスは、サーバ1に割り当てられているので、サーバ1のindex.htmlの内容が表示されていることがわかります。

[root@kvm ~]# curl http://192.168.122.100:80
Server1

サーバ1のhttpdの状態を確認します。httpdの状態がactiveであることがわかります。

[root@server1 ~]# systemctl is-active httpd.service
active

httpdを停止します。

[root@server1 ~]# systemctl stop httpd.service

サーバ1のIPアドレスを確認します。仮想IPアドレスが削除されたことがわかります。

[root@server1 ~]#  ip a show dev eth0|grep -w inet
    inet 192.168.122.216/24 brd 192.168.122.255 scope global noprefixroute dynamic eth0

サーバ2のIPアドレスを確認します。仮想IPアドレスが設定されたことがわかります。

[root@server2 ~]# ip a show dev eth0|grep -w inet
    inet 192.168.122.181/24 brd 192.168.122.255 scope global noprefixroute dynamic eth0
    inet 192.168.122.100/24 scope global eth0

kvmホストでcurlコマンドを実行します。この時点で仮想IPアドレスは、サーバ2に割り当てられているので、サーバ2のindex.htmlの内容が表示されていることがわかります。

[root@kvm ~]# curl http://192.168.122.100:80
Server2

サーバ1でjournalctlコマンドを実行してみます。仮想IPアドレスが削除され、FAULTに遷移している旨のログが出力されていることがわかります。なお、journalctlコマンドの使い方は、journalctlコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。

[root@server1 ~]# journalctl -f
-snip-
 4月 23 21:47:54 server1 Keepalived_vrrp[2150]: /etc/keepalived/chk_httpd.sh exited with status 3
 4月 23 21:47:54 server1 Keepalived_vrrp[2150]: VRRP_Script(chk_httpd) failed
 4月 23 21:47:54 server1 Keepalived_vrrp[2150]: VRRP_Instance(VI_1) Entering FAULT STATE
 4月 23 21:47:54 server1 Keepalived_vrrp[2150]: VRRP_Instance(VI_1) removing protocol VIPs.
 4月 23 21:47:54 server1 Keepalived_vrrp[2150]: VRRP_Instance(VI_1) Now in FAULT state
 4月 23 21:47:56 server1 Keepalived_vrrp[2150]: /etc/keepalived/chk_httpd.sh exited with s

サーバ2でjournalctlコマンドを実行してみます。仮想IPアドレスが設定され、MASTERに遷移している旨のログが出力されていることがわかります。

[root@server2 ~]# journalctl -f
-snip-
 4月 23 21:51:00 server2 Keepalived_vrrp[2513]: VRRP_Instance(VI_1) Transition to MASTER STATE
 4月 23 21:51:01 server2 Keepalived_vrrp[2513]: VRRP_Instance(VI_1) Entering MASTER STATE
 4月 23 21:51:01 server2 Keepalived_vrrp[2513]: VRRP_Instance(VI_1) setting protocol VIPs.
 4月 23 21:51:01 server2 Keepalived_vrrp[2513]: Sending gratuitous ARP on eth0 for 192.168.122.100
 4月 23 21:51:01 server2 Keepalived_vrrp[2513]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eth0 for 192.168.122.100

9 動作確認(その3)

httpdプロセスのハングアップを検出したら、MASTERがサーバ1からサーバ2に切り替わることを確認します。

9.1 シェルスクリプトの作成

サーバ1とサーバ2で、同じ内容のシェルスクリプトを作成します。

[root@server1 ~]# vi /etc/keepalived/check_hungup.sh
[root@server1 ~]# cat /etc/keepalived/check_hungup.sh
#!/usr/bin/bash

timeout 3 curl http://localhost:80
status=$?

if [ $status -eq 0 ]; then
  logger "All processes are alive."
  exit 0
elif [ $status -eq 124 ]; then
  logger "There is a process that is hanging up."
  exit 1
else
  logger "Something is wrong."
  exit 1
fi

シェルスクリプトの実行権を変更します。

[root@server1 ~]# chmod 744 /etc/keepalived/check_hungup.sh

9.2 設定ファイルの作成

サーバ1とサーバ2で、同じ内容の設定ファイルを作成します。

[root@server1 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
}

vrrp_script chk_httpd {
    script "/etc/keepalived/check_hungup.sh"
    interval 2
    fall 2
    rise 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    virtual_ipaddress {
        192.168.122.100/24 dev eth0
    }
    track_script {
      chk_httpd
    }
}
[root@server1 ~]#

設定ファイルを作成したら、keepalivedを再起動します。

[root@server1 ~]# systemctl restart keepalived.service

9.3 動作確認

httpdプロセスの状態を確認します。

[root@server1 ~]# ps -C httpd -o comm,command,pid,state
COMMAND         COMMAND                       PID S
httpd           /usr/sbin/httpd -DFOREGROUN  7727 S
httpd           /usr/sbin/httpd -DFOREGROUN  7728 S
httpd           /usr/sbin/httpd -DFOREGROUN  7729 S
httpd           /usr/sbin/httpd -DFOREGROUN  7730 S
httpd           /usr/sbin/httpd -DFOREGROUN  7731 S
httpd           /usr/sbin/httpd -DFOREGROUN  7732 S

kvmホストでcurlコマンドを実行します。このとき、仮想IPアドレスを宛先に指定します。この時点で仮想IPアドレスは、サーバ1に割り当てられているので、サーバ1のindex.htmlの内容が表示されていることがわかります。

[root@kvm ~]# curl http://192.168.122.100:80
Server1

httpdプロセスにSIGSTOPシグナルを送信します。

[root@server1 ~]# pkill -SIGSTOP httpd

httpdプロセスの状態を確認します。httpdプロセスが停止状態になったことがわかります。

[root@server1 ~]# ps -C httpd -o comm,command,pid,state
COMMAND         COMMAND                       PID S
httpd           /usr/sbin/httpd -DFOREGROUN  7727 T
httpd           /usr/sbin/httpd -DFOREGROUN  7728 T
httpd           /usr/sbin/httpd -DFOREGROUN  7729 T
httpd           /usr/sbin/httpd -DFOREGROUN  7730 T
httpd           /usr/sbin/httpd -DFOREGROUN  7731 T
httpd           /usr/sbin/httpd -DFOREGROUN  7732 T

kvmホストでcurlコマンドを実行します。このとき、仮想IPアドレスを宛先に指定します。この時点で仮想IPアドレスは、サーバ2に割り当てられているので、サーバ2のindex.htmlの内容が表示されていることがわかります。

[root@kvm ~]# curl http://192.168.122.100:80
Server2

10 動作確認(その4)

keepalivedがSIGKILLを受信して異常終了すると、仮想IPアドレスがMASTERとBACKUPの両方に設定される事象が発生します。このような状態にならないようにするため、keepalived自動起動するようなユニット定義ファイルを作成します。

10.1 発生事象の確認

実際にkeepalivedにSIGKILLを送信して、どのような事象が発生するのか確認をしてみます。現時点でサーバ1がMASTER、サーバ2がBACKUPです。

[root@server1 ~]# ip a show dev eth0|grep -w inet
    inet 192.168.122.216/24 brd 192.168.122.255 scope global noprefixroute dynamic eth0
    inet 192.168.122.100/24 scope global secondary eth0
[root@server2 ~]# ip a show dev eth0|grep -w inet
    inet 192.168.122.181/24 brd 192.168.122.255 scope global noprefixroute dynamic eth0

keepalivedの状態を確認します。

[root@server1 ~]# ps -C keepalived
  PID TTY          TIME CMD
 4835 ?        00:00:00 keepalived
 4836 ?        00:00:00 keepalived
 4837 ?        00:00:00 keepalived

keepalivedにSIGKILLを送信します。

[root@server1 ~]# pkill -9 keepalived
[root@server1 ~]#

サーバ1のIPアドレスを確認します。実IPアドレスと仮想IPアドレスが設定されていることがわかります。

[root@server1 ~]# ip a show dev eth0|grep -w inet
    inet 192.168.122.216/24 brd 192.168.122.255 scope global noprefixroute dynamic eth0
    inet 192.168.122.100/24 scope global secondary eth0

サーバ2のIPアドレスを確認します。こちらも、実IPアドレスと仮想IPアドレスが設定されていることがわかります。

[root@server2 ~]# ip a show dev eth0|grep -w inet
    inet 192.168.122.181/24 brd 192.168.122.255 scope global noprefixroute dynamic eth0
    inet 192.168.122.100/24 scope global secondary eth0

10.2 対処内容

サーバ1とサーバ2で、同じ内容の設定ファイルを作成します。

[root@server1 ~]# vi /etc/systemd/system/keepalived.service
[root@server1 ~]# cat /etc/systemd/system/keepalived.service
[Unit]
Description=LVS and VRRP High Availability Monitor
After=syslog.target network.target

[Service]
Type=forking
Restart=on-failure
PIDFile=/var/run/keepalived.pid
KillMode=process
EnvironmentFile=-/etc/sysconfig/keepalived
ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

systemdに定義ファイルの変更を読み込ませます。

[root@server1 ~]# systemctl daemon-reload

keepalivedを再起動します。

[root@server1 ~]# systemctl restart keepalived

10.3 対処後の動作確認

サーバ1のIPアドレスを確認します。実IPアドレスと仮想IPアドレスが設定されていることがわかります。

[root@server1 ~]# ip a show dev eth0|grep -w inet
    inet 192.168.122.216/24 brd 192.168.122.255 scope global noprefixroute dynamic eth0
    inet 192.168.122.100/24 scope global secondary eth0

サーバ2のIPアドレスを確認します。実IPアドレスが設定されていることがわかります。

[root@server2 ~]# ip a show dev eth0|grep -w inet
    inet 192.168.122.181/24 brd 192.168.122.255 scope global noprefixroute dynamic eth0

keepalivedの状態を確認します。

[root@server1 ~]# ps -C keepalived
  PID TTY          TIME CMD
 8951 ?        00:00:00 keepalived
 8952 ?        00:00:00 keepalived
 8953 ?        00:00:00 keepalived

keepalivedにSIGKILLを送信します。

[root@server1 ~]# pkill -9 keepalived

サーバ1のIPアドレスを確認します。実IPアドレスと仮想IPアドレスが設定されていることがわかります。

[root@server1 ~]# ip a show dev eth0|grep -w inet
    inet 192.168.122.216/24 brd 192.168.122.255 scope global noprefixroute dynamic eth0
    inet 192.168.122.100/24 scope global secondary eth0

サーバ2のIPアドレスを確認します。対処前は、サーバ2にも仮想IPアドレスが設定されていましたが、対処後は、実IPアドレスだけが設定されるようになりました。

[root@server2 ~]# ip a show dev eth0|grep -w inet
    inet 192.168.122.181/24 brd 192.168.122.255 scope global noprefixroute dynamic eth0

Z 参考情報

私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ