Keepalivedの概要と設定方法

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サーバーやデータベースの冗長化に適しています。

タグ: Keepalived VRRP high-availability linux nginx

5月31日 05:21 投稿