Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第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 スタンザを示しています。statepriority 値はこれら 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 アクセスはサポートされていません。また、実サーバーと同じマシン上でのロードバランサーの設定もサポートされていません。

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

アルゴリズム名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