ILB の設定 (サーバーグループの定義、ILB の健全性検査のモニタリング、および ILB の有効化後の ILB 規則の作成) が可能です。
このセクションの内容は次のとおりです。
このセクションでは、ILB サーバーグループを作成して、バックエンドサーバーをサーバーグループに追加する方法について説明します。create-servergroup サブコマンドまたは add-server サブコマンドのいずれかを使用してサーバーが追加されると、サーバー ID がシステムによって生成されます。サーバー ID はサーバーグループ内で一意です。ilbadm サブコマンドの詳細は、ilbadm(1M) のマニュアルページを参照してください。
ILB サーバーグループを作成するには、まずサーバーグループに含めるサーバーを特定します。サーバーは、ホスト名または IP アドレスと、オプションのポートによって指定できます。次に、管理者として次のコマンドを実行します。
# ilbadm create-servergroup -s servers=server1,server2,server3 servergroup
追加されるサーバーごとに、先頭に下線 (_) が付いた一意のサーバーID が生成されます。
バックエンドサーバーをサーバーグループに追加するには、管理者になり次のコマンドを実行します。
# ilbadm add-server -s server=server1[,server2...] servergroup
サーバー指定にはホスト名または IP アドレスを含める必要があり、オプションのポートまたはポート範囲を含めることもできます。同一の IP アドレスを持つサーバーエントリは、1 つのサーバーグループ内で許可されません。追加されるサーバーごとに、先頭に下線 (_) が付いた一意のサーバーID が生成されます。
次の例では、3 つのバックエンドサーバーが含まれる webgroup というサーバーグループを作成します。
# ilbadm create-servergroup -s \ servers=192.168.89.11,192.168.89.12,192.168.89.13 webgroup # ilbadm show-servergroup SGNAME SERVERID MINPORT MAXPORT IP_ADDRESS webgroup _webgroup.0 -- -- 192.168.89.11 webgroup _webgroup.1 -- -- 192.168.89.12 webgroup _webgroup.2 -- -- 192.168.89.13
次の例では、webgroup1 というサーバーグループを作成し、3 つのバックエンドサーバーをサーバーグループに追加します。
# ilbadm create-servergroup webgroup1 # ilbadm add-server -s server=[2001:0db8:7::feed:6]:8080,\ [2001:0db8:7::feed:7]:8080,[2001:0db8:7::feed:8]:8080 webgroup1
最初に、再有効化または無効化するバックエンドサーバーの IP アドレス、ホスト名、またはサーバー ID を特定します。サーバーグループ内のサーバーを有効または無効化する前に、サーバーグループを規則に関連付ける必要があります。
サーバーが複数のサーバーグループに属する場合は、複数のサーバー ID を持つことができます。サーバー ID に関連付けられている特定の規則でサーバーを再有効化または無効化するには、そのサーバー ID を指定する必要があります。
有効化されたサーバーを無効化するには、次のコマンドを入力します。
# ilbadm disable-server server1
選択されたサーバーは有効化されていますが、無効化されます。カーネルはトラフィックをこのサーバーに転送しません。
無効化されたサーバーを再有効化するには、次のコマンドを入力します。
# ilbadm enable-server server1
選択されたサーバーは無効にされていますが、再有効化されます。
サーバーの状態を表示するには、次のコマンドを入力します。
# ilbadm show-server [[-p] -o field[,field...]] [rulename]
次の例では、サーバー ID _websg.1 のサーバーが無効化され、その後再有効化されます。
# ilbadm enable-server _websg.1 # ilbadm disable-server _websg.1
ilbadm remove-server コマンドを使用して、1 つの ILB サーバーグループまたはすべてのサーバーグループからバックエンドサーバーを削除できます。最初に、サーバーグループから削除するサーバーのサーバー ID を特定します。
ilbadm show-servergroup -o all
サーバー ID は、サーバーがサーバーグループに追加されたときにシステムに割り当てられる IP アドレスに対応する一意の名前です。
次に、サーバーを削除します。
# ilbadm remove-server -s server=server-ID server-group
サーバーが NAT またはハーフ NAT 規則によって使用されている場合は、削除の前に disable-server サブコマンドを使用してサーバーを無効にしてください。詳細は、ILB サーバーグループのバックエンドサーバーの有効化または無効化を参照してください。サーバーが無効になると、サーバーは接続排出状態に入ります。ilbadm show-nat コマンドを使用して、NAT テーブルを定期的にチェックし、サーバーにまだ接続があるかどうかを確認します。すべての接続が排出されたら (サーバーは show-nat コマンド出力に表示されません)、サーバーは remove-server コマンドを使用して削除できます。
conn-drain タイムアウト値が設定されている場合、接続排出状態はタイムアウト期間が終了した時点で完了します。conn-drain タイムアウトのデフォルト値は 0 で、つまり接続が正常にシャットダウンされるまで接続排出が待機し続けることを意味します。
使用例 11 ILB サーバーグループからのバックエンドサーバーの削除次の例では、サーバー ID _sg1.2 を持つサーバーをサーバーグループ sg1 から削除します。
# ilbadm remove-server -s server=_sg1.2 sg1
このセクションでは、ILB サーバーグループの削除方法について説明します。アクティブな規則によって使用されているサーバーグループは削除できません。
最初に、サーバーグループに関する使用可能なすべての情報を表示します。
# ilbadm show-servergroup -o all sgname serverID minport maxport IP_address specgroup _specgroup.0 7001 7001 192.168.68.18 specgroup _specgroup.1 7001 7001 192.168.68.19 test123 _test123.0 7002 7002 192.168.67.18 test123 _test123.1 7002 7002 192.168.67.19
次のコマンドを入力します。
# ilbadm delete-servergroup servergroup
サーバーグループがアクティブな規則で使用されている場合は、削除に失敗します。
次の例では、webgroup というサーバーグループを削除します。
# ilbadm delete-servergroup webgroup
ILB では、次のオプションのタイプのサーバー健全性検査が提供されています。
組み込み ping プローブ
組み込み TCP プローブ
組み込み UDP プローブ
健全性検査として実行できるユーザー指定のカスタムテスト
デフォルトでは、ILB は健全性検査を実行しません。負荷分散規則を作成するとき、サーバーグループごとに健全性検査を指定できます。1 つの負荷分散規則につき 1 つの健全性検査のみを構成できます。仮想サービスが有効であるかぎり、有効化されている仮想サービスに関連付けられたサーバーグループの健全性検査は自動的に開始され、定期的に繰り返されます。仮想サービスが無効化されると健全性検査はすぐに停止します。仮想サービスがふたたび有効化されたとき、以前の健全性検査状態は保持されていません。
健全性検査を実行するために TCP プローブ、UDP プローブ、またはカスタムテストプローブを指定した場合、ILB はデフォルトで、指定された TCP プローブ、UDP プローブ、またはカスタムテストプローブをサーバーに送信する前に、サーバーが到達可能かどうかを判別するために ping プローブを送信します。ping プローブに失敗すると、対応するサーバーは、健全性検査ステータスが unreachable になり無効化されます。ping プローブに成功しても、TCP プローブ、UDP プローブ、またはカスタムテストプローブに失敗した場合、サーバーは健全性検査ステータスが dead になり無効化されます。
UDP プローブ以外のデフォルトの ping プローブを無効化できます。ping プローブは、常に UDP 健全性検査のデフォルトのプローブになります。
負荷分散規則を作成する場合は、健全性検査を作成してサーバーグループに割り当てることができます。次の例では、hc1 と hc-myscript の 2 つの健全性検査オブジェクトが作成されます。最初の健全性検査は組み込み TCP プローブを使用します。2 番目の健全性検査はカスタムテスト /var/tmp/my-script を使用します。
# ilbadm create-healthcheck -h hc-timeout=3,\ hc-count=2,hc-interval=8,hc-test=tcp hc1 # ilbadm create-healthcheck -h hc-timeout=3,\ hc-count=2,hc-interval=8,hc-test=/var/tmp/my-script hc-myscript
引数は次のとおりです。
健全性検査が完了しない場合に失敗したと見なされるまでのタイムアウトを指定します。
hc-test 健全性検査の実行を試行する回数を指定します。
連続する健全性検査の間隔を指定します。プローブをすべてのサーバーに同時に送信することを回避するために、実際の間隔は 0.5 * hc-interval から 1.5 * hc-interval の間でランダム化されます。
健全性検査の種類を指定します。tcp、udp、ping などの組み込みの健全性検査、またはフルパス名で指定する必要のある外部の健全性検査を指定できます。
ユーザー指定のカスタムテストはバイナリまたはスクリプトになります。
テストはシステム上の任意の場所に配置できます。create-healthcheck サブコマンドを使用する場合は、絶対パスを指定する必要があります。
create-rule サブコマンドの健全性検査指定の一部としてテスト (/var/tmp/my-script など) を指定すると、ilbd デーモンがプロセスをフォークし、次のようにテストを実行します。
/var/tmp/my-script $1 $2 $3 $4 $5
引数は次のとおりです。
VIP (リテラルの IPv4 または IPv6 アドレス)
サーバー IP (リテラルの IPv4 または IPv6 アドレス)
プロトコル (文字列としての UDP、TCP)
数値ポート範囲 (hc-port に対するユーザー指定の値)
失敗を返す前にテストが待機する最大時間 (秒)。指定された時間を超えてテストが実行されると、停止される可能性があり、テストは失敗したと見なされます。この値はユーザーによって定義され、hc-timeout に指定されます。
ユーザー指定のテストは、すべての引数を使用しても使用しなくてもかまいませんが、次のいずれかを返す必要があります。
マイクロ秒単位の往復時間 (RTT)
テストが RTT を計算しない場合は 0
失敗した場合は -1
デフォルトでは、健全性検査テストは PRIV_PROC_FORK、RIV_PROC_EXEC、および RIV_NET_ICMPACCESS の特権で実行されます。
さらに広い特権セットが必要な場合、テストで setuid を実装する必要があります。特権の詳細は、privileges(5) のマニュアルページを参照してください。
構成済みの健全性検査の詳細情報を取得するには、次のコマンドを発行します。
# ilbadm show-healthcheck HCNAME TIMEOUT COUNT INTERVAL DEF_PING TEST hc1 3 2 8 Y tcp hc2 3 2 8 N /var/usr-script
ilbadm list-hc-result コマンドを使用して、健全性検査の結果を取得します。規則または健全性検査を指定しない場合、サブコマンドはすべての健全性検査を一覧表示します。
次の例では、rule1 という規則に関連付けられた健全性検査の結果を表示します。
# ilbadm show-hc-result rule1 RULENAME HCNAME SERVERID STATUS FAIL LAST NEXT RTT rule1 hc1 _sg1:0 dead 10 11:01:19 11:01:27 941 rule1 hc1 _sg1:1 alive 0 11:01:20 11:01:34 1111
出力の LAST 列は、サーバーで健全性検査が実行された時間を示します。NEXT 列は、次の健全性検査が実行される時間を示します。
ilbadm delete-healthcheck コマンドを使用して、健全性検査を削除します。次の例では、hc1 という健全性検査を削除します。
# ilbadm delete-healthcheck hc1
このセクションでは、ilbadm コマンドを使用して負荷分散規則を作成、削除、および一覧表示する方法について説明します。
ILB のアルゴリズムはトラフィック分散を制御し、負荷分散およびサーバー選択のためのさまざまな特性を提供します。
ILB は 2 つの動作モードに対して次のアルゴリズムを提供します。
ラウンドロビン – ラウンドロビンアルゴリズムでは、ロードバランサはサーバーグループに対してローテーションベースでリクエストを割り当てます。サーバーにリクエストが割り当てられると、そのサーバーはリストの末尾に移動します。
src-IP ハッシュ – 発信元 IP ハッシュ方式では、ロードバランサは受信リクエストの発信元 IP アドレスのハッシュ値に基づいてサーバーを選択します。
src-IP, port ハッシュ – 発信元 IP、ポートハッシュ方式では、ロードバランサは受信リクエストの発信元 IP アドレスおよび発信元ポートのハッシュ値に基づいてサーバーを選択します。
src-IP, VIP ハッシュ – 発信元 IP、VIP ハッシュ方式では、ロードバランサは受信リクエストの発信元 IP アドレスおよび着信先 IP アドレスのハッシュ値に基づいてサーバーを選択します。
ILB では、仮想サービスは負荷分散規則によって表現され、次のパラメータで定義されます。
仮想 IP アドレス
トランスポートプロトコル: TCP または UDP
ポート番号 (またはポート範囲)
負荷分散アルゴリズム
負荷分散モード (DSR、フル NAT、またはハーフ NAT)
一連のバックエンドサーバーで構成されるサーバーグループ
サーバーグループ内の各サーバーに対して実行できる、オプションのサーバー健全性検査
健全性検査に使用するオプションのポート
仮想サービスを表す規則名
該当するパックエンドサーバーを含むサーバーグループを作成します。詳細は、ILB のサーバーグループおよびバックエンドサーバーの定義を参照してください。
健全性検査を作成し、サーバー健全性検査と規則を関連付けます。詳細は、健全性検査の作成を参照してください。
規則に関連付ける VIP、ポート、およびオプションのプロトコルを特定します。
使用する動作 (DSR、ハーフ NAT、またはフル NAT) を特定します。
使用する負荷分散アルゴリズムを特定します。詳細は、ILB のアルゴリズムを参照してください。
ilbadm create-rule コマンドを使用して、ILB 規則を作成します。ilbadm create-rule コマンドの使用の詳細は、ilbadm(1M) のマニュアルページを参照してください。
構文は次のとおりです。
# ilbadm create-rule -e -i vip=IPaddr,port=port,protocol=protocol \ -m lbalg=lb-algorithm,type=topology-type,proxy-src=IPaddr1-IPaddr2,\ pmask=value -h hc-name=hc1-o servergroup=sg rule1
この例では、hc1 という健全性検査と、sg1 というサーバーグループを作成します。サーバーグループは、それぞれポート範囲を持つ 2 つのサーバーで構成されます。最後のコマンドは、rule1 という規則を作成して有効にし、この規則をサーバーグループおよび健全性検査に関連付けます。この規則はフル NAT 動作モードを実装します。サーバーグループおよび健全性検査の作成は、規則の作成よりも前に行う必要があります。
# ilbadm create-healthcheck -h hc-test=tcp,hc-timeout=2,\ hc-count=3,hc-interval=10 hc1 # ilbadm create-servergroup -s server=192.168.0.10:6000-6009,192.168.0.11:7000-7009 sg1 # ilbadm create-rule -e -p -i vip=10.0.0.10,port=5000-5009,\ protocol=tcp -m lbalg=rr,type=NAT,proxy-src=192.168.0.101-192.168.0.104,pmask=24 \ -h hc-name=hc1 -o servergroup=sg1 rule1
持続性マッピングを作成すると、その後に続く仮想サービスへの接続またはパケット、あるいはその両方のリクエストは、クライアントの発信元 IP アドレスが一致する場合、同一のバックエンドサーバーに転送されます。クラスレスドメイン間ルーティング (CIDR) 表記の接頭辞長は、IPv4 では 0-32、IPv6 では 0-128 の間の値です。
ハーフ NAT またはフル NAT 規則を作成する場合は、connection-drain タイムアウト値を指定します。conn-drain タイムアウトのデフォルト値は 0 で、つまり接続が正常にシャットダウンされるまで接続排出が待機し続けることを意味します。
プロキシのソース IP アドレスは、フル NAT 構成にのみ必要です。フル NAT 動作モードでは、ILB は、クライアントから受信するパケットのソース IP アドレスと宛先 IP アドレスの両方を書き換えます。宛先 IP アドレスは、バックエンドサーバーの IP アドレスの 1 つに変更されます。ソースアドレスは、ilbadm コマンド行で指定されたプロキシソースアドレスの 1 つに変更されます。
1 つのソースアドレスと、任意の時点で 1 つのサービスポートを使用している 1 つのバックエンドサーバーの間に存在できる接続は最大 65535 個のみであるため、プロキシのソースアドレスが必要です。これは、ロードバランシング時の障害になります。ILB は多数のソースアドレスを使用できるため、プロキシのソースアドレスのリストを使用すると、ILB はこの障害を解決できます。また、プロキシのソースアドレスを使用すると、ILB と、ILB が実行されているシステム (仮想の場合があります) の間でアドレスの競合の問題が回避されます。一部のネットワーク構成では、NAT で使用するソースアドレスが、ILB が実行されているシステム (仮想の場合があります) で使用されるアドレスと完全に異なる必要があります。
規則の構成の詳細を一覧表示するには、次のコマンドを発行します。規則名を指定しない場合、すべての規則の情報が提供されます。
# ilbadm show-rule RULENAME STATUS LBALG TYPE PROTOCOL VIP PORT rule-http E hash-ip-port NAT TCP 10.0.0.1 80 rule-dns D hash-ip NAT UDP 10.0.0.1 53 rule-abc D roundrobin NAT TCP 2001:db8::1 1024 rule-xyz E ip-vip NAT TCP 2001:db8::1 2048-2050
ilbadm delete-rule コマンドを使用して、規則を削除します。-a オプションを追加して、すべての規則を削除します。次の例では、rule1 という規則を削除します。
# ilbadm delete-rule rule1