Keepalived
Keepalived は、Virtual Router Redundancy Protocol(VRRP)を使用して高可用性機能とロードバランシングを提供する、Linux 仮想サーバー(LVS)クラスター用のフェイルオーバーおよび監視デーモンです。
目次
インストール
keepalived パッケージを インストール してください。
keepalived.service
を 有効化 してください。
設定
このサービスは /etc/keepalived/keepalived.conf
で設定されます。
マスターとバックアップのフェイルオーバー設定
以下は、仮想 IP アドレスを共有する 2 つのサーバー/ルーターで高可用性クラスターを設定する基本的な設定を提供します。両方とも keepalived を実行している必要があります。
ホスト A で:
/etc/keepalived/keepalived.conf
vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 101 priority 20 advert_int 1 authentication { auth_type PASS auth_pass pass1234 } virtual_ipaddress { 172.16.0.100 } }
ホスト B で:
/etc/keepalived/keepalived.conf
vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 101 priority 15 advert_int 1 authentication { auth_type PASS auth_pass pass1234 } virtual_ipaddress { 172.16.0.100 } }
この state は、サービスが開始され、マスターの役割を引き継ぐ最も高い優先度を持つホストを決定する前に、ホストの初期役割を設定します。この設定により、より高い優先度を持つホスト A が VIP(仮想 IP アドレス)を管理し、ホスト A が応答しなくなった場合にのみ、ホスト B が VIP を引き継ぎます。デフォルトの切り替えまでの時間は 1 秒です。
モニタリング付きのフェイルオーバーセットアップ
以下は、keepalived と同じホストで動作するサービス(sshd)のフェイルオーバークラスターを提供します。
ホスト A で:
/etc/keepalived/keepalived.conf
global_defs { notification_email { admin@example.net } notification_email_from lb1@example.net smtp_server mail.example.net smtp_connect_timeout 30 } # enter failed state when the sshd process is down vrrp_track_process track_sshd { process sshd delay 1 } vrrp_instance VI_1 { state BACKUP nopreempt interface eth0 virtual_router_id 101 priority 20 advert_int 1 authentication { auth_type AH auth_pass key12345 } virtual_ipaddress { 172.16.0.100 } track_process { track_sshd } smtp_alert }
ホスト B で:
/etc/keepalived/keepalived.conf
global_defs { notification_email { admin@example.net } notification_email_from lb2@example.net smtp_server mail.example.net smtp_connect_timeout 30 } # enter failed state when the sshd process is down vrrp_track_process track_sshd { process sshd delay 1 } vrrp_instance VI_1 { state BACKUP nopreempt interface eth0 virtual_router_id 101 priority 15 advert_int 1 authentication { auth_type AH auth_pass key12345 } virtual_ipaddress { 172.16.0.100 } track_process { track_sshd } smtp_alert }
このセットアップは、フェイルオーバーホスト自体で動作する sshd サービスに対して、より動的なクラスターを提供します。両方のサーバーはバックアップ状態で開始し、nopreempt オプションにより、優先度が高いサーバーが障害後に戻ってきた場合でも、優先度が低いサーバーがマスターの役割を保持することができます。これにより、以前のマスターサーバーが再び動作を開始した際に VIP への接続が中断されるのを防ぎます。この設定には、ターゲットサービスがクラッシュした場合にサーバーの優先度を下げるプロセスの追跡も含まれています。
ロードバランシング付きフェイルオーバー
Keepalived は、いくつかの可能なアルゴリズムを使用したロードバランシングも提供します(詳細は keepalived.conf(5) を参照)。
以下は、上記の設定に追加できる HTTP ロードバランシングの簡単な例です:
/etc/keepalived/keepalived.conf
virtual_server 172.16.0.100 80 { delay_loop 6 lb_algo rr lb_kind NAT protocol TCP real_server 172.16.1.20 80 { TCP_CHECK { connect_timeout 10 } } real_server 172.16.1.21 80 { TCP_CHECK { connect_timeout 10 } } real_server 172.16.1.22 80 { TCP_CHECK { connect_timeout 10 } } real_server 172.16.1.23 80 { TCP_CHECK { connect_timeout 10 } } }
代わりに、keepalived は HAproxy がロードバランサとして動作するフェイルオーバーにも使用できます。
セキュリティ上の考慮事項
keepalived が使用する VRRP プロトコルは、すでに同じサブネット上にいる攻撃者に対して高いセキュリティを提供していません。このサービスで認証を使用する主な利点は、既存のクラスターを混乱させるサーバーを誤って追加することを防ぐためです。auth_type PASS
を使用する場合、パスワードはすべてのマルチキャストパケットでローカルサブネット上で平文で送信されます。auth_type AH
(IP 認証ヘッダー)を使用すると、基本的な妨害や ARP スプーフィングなどの攻撃に対してややより高い耐性を提供しますが、それでも可能です。セキュリティが高い優先度である場合は、ネットワークの制限を使用して VRRP トラフィックを保護してください。例えば、クラスター用に隔離されたサブネットを使用し、ファイアウォールで他のネットワークからの VRRP トラフィックをブロックしてください。