VRRP(Virtual Router Redundancy Protocol)は、サーバやルータなどを冗長化するプロトコルで、複数台のサーバに同じIPアドレス(仮想IP:VIP)を割り当てて、一つのサーバとして扱うことができます。
KeeppalivedのVRRP機能を利用して、Webサーバがダウンしたときに、バックアップサーバに切り替えるテストをしてみました。
参考)
「Ubuntu 20.04 で Keepalived を同一筐体で用いて冗長構成/負荷分散する」
https://weseek.co.jp/tech/2989/
参考にさせていただいたサイトでは、マスターもバックアップも同じ設定ファイルで書かれており、状態によって切り替える工夫がされています。
環境) Ubuntu 22.04 x 2 / VirtualBox
インストール
sudo apt-get install keepalived
設定ファイル編集
sudo vi /etc/keepalived/keepalived.conf
sudo vi /etc/keepalived/virtualserver-backup.conf
#
空ファイル
sudo vi /etc/keepalived/virtualserver-master.conf
sudo vi /etc/keepalived/notify_master.sh
sudo vi /etc/keepalived/notify_backup.sh
スクリプト実行ユーザ追加
sudo useradd keepalived_script
sudo visudo
….下記追記
keepalived_script ALL=(ALL:ALL) NOPASSWD: ALL
パーミッションの変更
cd /etc/keepalived
sudo chmod u+x notify_backup.sh notify_master.sh
sudo chown keepalived_script:keepalived_script notify_backup.sh notify_master.sh
IPフォワード設定
sudo vi /etc/sysctl.d/98-keepalived.conf
設定更新
sudo sysctl -p
loにvip割り当て
sudo vi /etc/netplan/99_lo_config.yaml
設定更新
sudo netplan apply
確認
ip a show lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
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.1.11/32 scope global lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
再起動
sudo service keepalived status
sudo service keepalived restart
Webアプリ
index.htmlにサーバを識別できる名前を入れておく。(場所は任意。サーバ起動まで同じ場所)
生存確認用にファイル作成
touch health
サーバ起動
python3 -m http.server 8000
確認
sudo journalctl -u keepalived
設定うまくいっていれば、ログが表示されます。
WebClientは、WSLのコンソールからCurlコマンドで確認しました。
最初は、リアルサーバのIPにアクセス、次にバーチャルIPにアクセスし、ラウンドロビンでアクセスできるていることを確認後、n0cのサーバをダウンさせました。
一回は失敗しましたが、その後はn0dの方に切り替わっています。
実際に動かしてみると、理解が深まります。
まずは簡単なWebサーバでしたが、この環境を他のサーバでも使おうと思います。