第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. keapalived.conf
ファイルの作成
Keepalived は、ロードバランサーとして設定された各システムの
keepalived.conf
ファイルで設定します。「基本的な Keepalived の設定」 の例のようなロードバランサートポロジーを作成するには、テキストエディターで、アクティブのロードバランサーとバックアップロードバランサー、LB1 と LB2 の両方で keepalived.conf
を開きます。以下に例を示します。
vi /etc/keepalived/keepalived.conf
「基本的な Keepalived の設定」 で説明されているような設定で負荷分散されている基本的なシステムには以下のコードセクションで示すような
keepalived.conf
ファイルがあります。この例では、keepalived.conf
ファイルがアクティブルーターとバックアップルーターの両方で同じものになります。ただし、「VRRP インスタンス」 で説明されている VRRP インスタンスは例外です。
4.1.1.1. グローバル定義
keepalived.conf
ファイルのグローバル定義セクションを使用すると管理者はロードバランサーに変化が生じた場合の通知詳細を指定することができます。グローバル定義は任意で、Keepalived の設定には必要ありません。keepalived.conf
ファイルのこの項は、LB1 と LB2 の両方で同じです。
global_defs { notification_email { admin@example.com } notification_email_from noreply@example.com smtp_server 127.0.0.1 smtp_connect_timeout 60 }
notification_email
はロードバランサーの管理者、notification_email_from
はロードバランサーの状態の変化を送信するアドレスです。SMTP 固有の設定で通知の送信元となるメールサーバーを指定します。
4.1.1.2. VRRP インスタンス
以下の例は、マスタールーターとバックアップルーターの
keeplalived.conf
ファイルの vrrp_sync_group
スタンザを示しています。state
と priority
値はこれら 2 つのシステム間で異なることに注意してください。
以下の例は、マスタールーター LB1 の
keepalived.conf
ファイルの vrrp_sync_group
スタンザを示しています。
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 passw123 } 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 passw123 } virtual_ipaddress { 192.168.1.1 } }
以下の例は、バックアップルーター LB2 の
keepalived.conf
ファイルの vrrp_sync_group
スタンザを示しています。
vrrp_sync_group VG1 { group { RH_EXT RH_INT } } vrrp_instance RH_EXT { state BACKUP interface eth0 virtual_router_id 50 priority 99 advert_int 1 authentication { auth_type PASS auth_pass passw123 } virtual_ipaddress { 10.0.0.1 } } vrrp_instance RH_INT { state BACKUP interface eth1 virtual_router_id 2 priority 99 advert_int 1 authentication { auth_type PASS auth_pass passw123 } virtual_ipaddress { 192.168.1.1 } }
これらの例の
vrrp_sync_group
スタンザでは、状態変化 (フェイルオーバーなど) が発生してもグループとして維持される VRRP グループが定義されています。インターネットと通信を行う外部インターフェイスに対するインスタンス (RH_EXT) の他、内部インターフェイスに対するインスタンス (RH_INT) も定義されています。
vrrp_instance
ラインでは、VRRP サービスデーモンの仮想インターフェイス設定が反映され、仮想 IP インスタンスを作成します。この state MASTER
は、アクティブなサーバーを指定します。state BACKUP
は、バックアップサーバーを指定します。
interface
パラメーターは、この仮想 IP インスタンスに物理的なインターフェイス名を割り当てます。
virtual_router_id
は Virtual Router インスタンスの数値識別子です。これは、この Virtual Router に加わっているすべての LVS Router システムで同じでなければなりません。また、同じネットワークインターフェイス上で実行している複数の keepalived
のインスタンスを区別するのに使用されます。
priority
は、割り当てられたインターフェイスがフェイルオーバーの中で引き継ぐ順序を指定します。数字が大きいほど優先度が高くなります。この優先値は 0 から 255 の範囲内である必要があり、state MASTER
として設定されたロードバランシングサーバーの優先値には、state BACKUP
として設定されたサーバーの優先値よりも大きい値を設定する必要があります。
authentication
ブロックは、フェイルオーバーの同期にサーバーを認証するために使用される認証タイプ (auth_type
) と パスワード (auth_pass
) を指定します。PASS
はパスワード認証を指定します。Keepalived は接続の整合性のために AH
または認証ヘッダーもサポートします。
最後に、
virtual_ipaddress
オプションは、インターフェイスの仮想 IP アドレスを指定します。
4.1.1.3. 仮想サーバーの定義
keepalived.conf
ファイルの Virtual Server 定義セクションは、LB1 と LB2 の両方で同じです。
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 } } }
このブロックでは、
virtual_server
は IP アドレスで最初に設定されます。次に、delay_loop
はヘルスチェックの間隔 (秒単位) を設定します。lb_algo
オプションは、可用性に使用するアルゴリズムの種類を指定します (この場合、rr
はラウンドロビンを表します。利用できる lb_algo
の値の一覧は、表4.1「仮想サーバーの lv_algo の値」 を参照してください)。lb_kind
オプションは、ネットワークアドレス変換 (または nat
) が使用されるルーティング方法を決定します。
仮想サーバーの詳細の設定後、最初に IP アドレスを指定して
real_server
オプションが設定されます。TCP_CHECK
スタンザは、TCP を使用して実際のサーバーの可用性をチェックします。connect_timeout
ではタイムアウトが発生するまでの時間を秒単位で設定します。
注記
ロードバランサーまたは実サーバーのいずれかからの仮想 IP アクセスはサポートされていません。また、実サーバーと同じマシン上でのロードバランサーの設定もサポートされていません。
アルゴリズム名 | lv_algo value |
---|---|
ラウンドロビン (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
|