第4章 Keepalived を用いたロードバランサーの初期設定

Load Balancer パッケージをインストールしたら、基本手順に従って Keepalived で使用する LVS ルーターと実サーバーを設定する必要があります。本章では、最初の手順を説明します。

4.1. 基本的な Keepalived の設定

この基本的な例では、2 つのシステムがロードバランサーとして設定されます。LB1 (アクティブ) および LB2 (バックアップ) は、仮想 IP アドレス 10.0.0.1 を共有し、192.168.1.20 から 192.168.1.24 までの実際の IP アドレスで httpd を実行する 4 つの Web サーバーのプールに対する要求をルーティングします。各ロードバランサーには 2 つのインターフェースがあり (eth0 および eth1) 、その 1 つは外部インターネットを処理し、もう 1 つは要求を実サーバーへルーティングします。ロードバランシングアルゴリズムにはラウンドロビンアルゴリズムが使用され、ルーティングの方法はネットワークアドレス変換になります。

4.1.1. keeaplived.conf ファイルの作成

Keepalived は keepalived.conf ファイルで設定します。「基本的な Keepalived の設定」 の例のようなロードバランサートポロジーを作成するには、テキストエディターを使って keepalived.conf を開きます。以下に例を示します。
vi /etc/keepalived/keepalived.conf
「基本的な Keepalived の設定」 で説明されているような構成で負荷分散されている基本的なシステムには以下のコードセクションで示すような keepalived.conf ファイルがあります。

4.1.1.1. グローバル定義

keepalived.conf ファイルのグローバル定義セクションを使用すると管理者はロードバランサーに変化が生じた場合の通知詳細を指定することができます。グローバル定義は任意で、Keepalived の設定には必要ありません。
global_defs {

   notification_email {
       admin@example.com
   }
   notification_email_from noreply@example.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 60
   router_id LVS_DEVEL
}
notification_email はロードバランサーの管理者、notification_email_from はロードバランサーの状態の変化を送信するアドレスです。SMTP 固有の設定で通知の送信元となるメールサーバーを指定します。

4.1.1.2. VRRP インスタンス

vrrp_sync_group VG1 {
   group {
      RH_EXT
      RH_INT
   }
}

vrrp_instance RH_EXT {
    state MASTER
    interface eth0
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
	auth_pass password123
    }
    virtual_ipaddress {
    10.0.0.1
    }
}

vrrp_instance RH_INT {
   state MASTER
   interface eth1
   virtual_router_id 2
   priority 100
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass password123
   }
   virtual_ipaddress {
       192.168.1.1
   }
}
この例では vrrp_sync_group スタンザでは状態が変化 (フェールオーバーなど) しても VRRP グループは変化しないことが定義されています。インターネットと通信を行う外部インターフェースに対するインスタンス (RH_EXT) の他、内部インターフェースに対するインスタンス (RH_INT) も定義されています。
vrrp_instance RH1 の行は、仮想 IP インスタンスを作成する VRRP サービスデーモンの仮想インターフェース設定の詳細になります。state MASTER はアクティブなサーバーを指定します。設定内のバックアップサーバーの設定は上記と同様になりますが state BACKUP として設定されます。
interface パラメーターは物理インターフェース名をこの仮想 IP インスタンスに割り当て、virtual_router_id はインスタンスの数値識別子になります。 priority 100 は、割り当てられたインターフェースがフェイルオーバーの発生時に引き継ぐ順番を指定します。数値が小さいほど優先度が高くなります。この優先値は 0 から 255 の範囲内である必要があり、state MASTER として設定されたロードバランシングサーバーの優先値には、state BACKUP として設定されたサーバーの優先値よりも大きい値を設定する必要があります。
authentication のブロックは、サーバーをフェイルオーバーの同期に対して認証するための認証タイプ (auth_type) およびパスワード (auth_pass) を指定します。PASS はパスワード認証を指定します。Keepalived は、接続の整合性を目的とした認証ヘッダーである AH もサポートします。
最後に、virtual_ipaddress オプションではインターフェースの仮想 IP アドレスを指定します。

4.1.1.3. 仮想サーバーの定義

virtual_server 10.0.0.1 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    protocol tcp

    real_server 192.168.1.20 80 {
        TCP_CHECK {
                connect_timeout 10
        }
    }
    real_server 192.168.1.21 80 {
        TCP_CHECK {
                connect_timeout 10
        }
    }
    real_server 192.168.1.22 80 {
        TCP_CHECK {
                connect_timeout 10
        }
    }
    real_server 192.168.1.23 80 {
        TCP_CHECK {
                connect_timeout 10
        }
    }

}
最初に IP アドレスを指定して virtual_server を設定します。次に、delay_loop に健全性チェックの間隔を秒単位で設定します。lb_algo オプションには可用性に使用されるアルゴリズムの種類を指定します。この例では、ラウンドロビンである rr が指定されています。lb_algo に指定可能な値は 表4.1「仮想サーバーの lv_algo の値」 を参照してください。lb_kind オプションにはルーティングの方法を指定します。この例では、ネットワークアドレス変換 (or nat) が指定されています。
仮想サーバーの詳細を設定したら、real_server オプションを設定します。ここでもまず IP アドレスを最初に指定します。TCP_CHECK スタンザでは TCP を使って 実サーバーの可用性をチェックします。connect_timeout ではタイムアウトが発生するまでの時間を秒単位で設定します。

表4.1 仮想サーバーの lv_algo の値

アルゴリズム名lv_algo の値
ラウンドロビン (Round-Robin)
rr
加重ラウンドロビン (Weighted Round-Robin)
wrr
最小接続 (Least-Connection)
lc
加重最小接続 (Weighted Least-Connection)
wlc
ローカリティーベースの最小接続 (Locality-Based Least-Connection)
lblc
複製をともなうローカリティベースの最小接続スケジューリング (Locality-Based Least-Connection Scheduling with Replication)
lblcr
宛先ハッシュ (Destination Hash)
dh
ソースハッシュ (Source Hash)
sh
ソースの予期される遅延 (Source Expected Delay)
sed
キューに置かない (Never Queue)
nq