Keepalivedとは
KeepalivedはVRRPプロトコルを利用してLVS(Linux Virtual Server)の高可用性を実現するソフトウェアです。これにより、単一障害点を回避し、システムの信頼性を向上させます。通常、2台のサーバーで構成され、一方はマスター(MASTER)、もう一方はバックアップ(BACKUP)として動作します。外部には1つの仮想IPアドレス(VIP)として提供され、マスターがダウンした場合、バックアップがVIPを引き継いでサービスを継続します。
VRRPプロトコルの概要
VRRP(Virtual Router Redundancy Protocol)は、ネットワークのデフォルトゲートウェイに冗長性を提供するプロトコルです。複数のルータが仮想ルータとして動作し、その中で1台がマスターとして選出されます。マスターがダウンすると、バックアップのうち優先度が高いルータが新たなマスターになります。
VRRPの仕組み
VRRPでは、複数のルータが1つの仮想ルータとして振る舞います。マスターのみが定期的にVRRPアドバタイズメントを送信し、バックアップはそれを監視します。マスターが一定時間内にアドバタイズメントを送らなければ、バックアップが新しいマスターに昇格します。
- VRID(仮想ルータ識別子):0~255の範囲で設定。
- 優先度(priority):0~255。0はマスターが一時的に降格することを示し、255はバックアップが強制的に昇格することを意味します。
- アドバタイズメント間隔(advert_int):マスターがアドバタイズメントを送信する間隔。
Keepalivedのインストール
以下のコマンドでKeepalivedをインストールし、サービスを起動します。
yum install -y keepalived
systemctl start keepalived
Keepalivedの設定ファイル構成
Keepalivedの設定ファイルは以下の3つのセクションで構成されます:
- グローバル設定:全体の設定。
- VRRP設定:VIPと冗長構成の設定。
- LVS設定:LVSに関する設定(今回は使用しません)。
マスターサーバーの設定例
! Configuration File for keepalived
global_defs {
notification_email {
admin@example.com
}
notification_email_from keepalived@example.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id lb01
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass securekey
}
virtual_ipaddress {
192.168.100.100
}
}
バックアップサーバーの設定例
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass securekey
}
virtual_ipaddress {
192.168.100.100
}
}
VIPの確認
設定完了後、以下のコマンドでVIPが正しく割り当てられているか確認します。
ip a show eth0
非抢占モードの設定
マスターが復帰してもVIPを再取得しないようにするには、両方のサーバーをBACKUP状態に設定し、片方にnopreemptオプションを追加します。
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 150
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass securekey
}
virtual_ipaddress {
192.168.100.100
}
}
サービス状態の監視スクリプト
Keepalivedでサービスの状態を監視するには、vrrp_scriptを使用します。
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 10
weight 2
}
track_script {
chk_nginx
}
監視スクリプトの例
#!/bin/bash
if ! systemctl is-active --quiet nginx; then
systemctl restart nginx
sleep 2
if ! systemctl is-active --quiet nginx; then
systemctl stop keepalived
fi
fi
ネットワーク分離(Split-Brain)の防止
HA構成において、ネットワーク障害により両サーバーが互いの状態を把握できなくなる現象を「Split-Brain」と呼びます。これを防ぐには:
- 複数のハートビート経路を用意する。
- Fencing(例:Stonith)を使用して、片方のノードを強制停止する。
- 監視アラートを設定し、人手で対応する。
まとめ
Keepalivedは、VRRPをベースにしたシンプルで強力な高可用性ソリューションです。VIP管理、サービス監視、Split-Brainの防止など、さまざまな機能を備えており、Webサーバーやデータベースの冗長化に適しています。