Go to main content
ルーターまたはロードバランサとしての Oracle® Solaris 11.3 システムの構成

印刷ビューの終了

更新: 2016 年 11 月
 
 

ILB の管理

ILB の設定 (サーバーグループの定義、ILB の健全性検査のモニタリング、および ILB の有効化後の ILB 規則の作成) が可能です。

ILB のサーバーグループおよびバックエンドサーバーの定義

このセクションでは、ILB サーバーグループを作成して、バックエンドサーバーをサーバーグループに追加する方法について説明します。create-servergroup サブコマンドまたは add-server サブコマンドのいずれかを使用してサーバーが追加されると、サーバー ID がシステムによって生成されます。サーバー ID はサーバーグループ内で一意です。ilbadm サブコマンドの詳細は、ilbadm(1M) のマニュアルページを参照してください。

ILB サーバーグループの作成

ILB サーバーグループを作成するには、まずサーバーグループに含めるサーバーを特定します。サーバーは、ホスト名または IP アドレスと、オプションのポートによって指定できます。次に、管理者として次のコマンドを実行します。

# ilbadm create-servergroup -s servers=server1,server2,server3 servergroup 

追加されるサーバーごとに、先頭に下線 (_) が付いた一意のサーバーID が生成されます。


注 -  サーバーが複数のサーバーグループに属する場合は、複数のサーバー ID を持つことができます。

ILB サーバーグループへのバックエンドサーバーの追加

バックエンドサーバーをサーバーグループに追加するには、管理者になり次のコマンドを実行します。

# ilbadm add-server -s server=server1[,server2...] servergroup

サーバー指定にはホスト名または IP アドレスを含める必要があり、オプションのポートまたはポート範囲を含めることもできます。同一の IP アドレスを持つサーバーエントリは、1 つのサーバーグループ内で許可されません。追加されるサーバーごとに、先頭に下線 (_) が付いた一意のサーバーID が生成されます。


注 -  IPv6 アドレスは、角括弧で囲む必要があります。
使用例 9  ILB サーバーグループの作成およびバックエンドサーバーの追加

次の例では、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

ILB サーバーグループのバックエンドサーバーの有効化または無効化

最初に、再有効化または無効化するバックエンドサーバーの IP アドレス、ホスト名、またはサーバー ID を特定します。サーバーグループ内のサーバーを有効または無効化する前に、サーバーグループを規則に関連付ける必要があります。

サーバーが複数のサーバーグループに属する場合は、複数のサーバー ID を持つことができます。サーバー ID に関連付けられている特定の規則でサーバーを再有効化または無効化するには、そのサーバー ID を指定する必要があります。

  • 有効化されたサーバーを無効化するには、次のコマンドを入力します。

    # ilbadm disable-server server1

    選択されたサーバーは有効化されていますが、無効化されます。カーネルはトラフィックをこのサーバーに転送しません。

  • 無効化されたサーバーを再有効化するには、次のコマンドを入力します。

    # ilbadm enable-server server1

    選択されたサーバーは無効にされていますが、再有効化されます。

  • サーバーの状態を表示するには、次のコマンドを入力します。

    # ilbadm show-server [[-p] -o field[,field...]] [rulename]

    注 -  サーバーには、サーバーが属するサーバーグループが規則に関連付けられている場合にのみ、有効化または無効化の状態が表示されます。
使用例 10  ILB サーバーグループのバックエンドサーバーの無効化および再有効化

次の例では、サーバー ID _websg.1 のサーバーが無効化され、その後再有効化されます。

# ilbadm enable-server _websg.1
# ilbadm disable-server _websg.1

ILB サーバーグループからのバックエンドサーバーの削除

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 サーバーグループの削除

このセクションでは、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 の健全性検査のモニタリング

    ILB では、次のオプションのタイプのサーバー健全性検査が提供されています。

  • 組み込み ping プローブ

  • 組み込み TCP プローブ

  • 組み込み UDP プローブ

  • 健全性検査として実行できるユーザー指定のカスタムテスト

デフォルトでは、ILB は健全性検査を実行しません。負荷分散規則を作成するとき、サーバーグループごとに健全性検査を指定できます。1 つの負荷分散規則につき 1 つの健全性検査のみを構成できます。仮想サービスが有効であるかぎり、有効化されている仮想サービスに関連付けられたサーバーグループの健全性検査は自動的に開始され、定期的に繰り返されます。仮想サービスが無効化されると健全性検査はすぐに停止します。仮想サービスがふたたび有効化されたとき、以前の健全性検査状態は保持されていません。

健全性検査を実行するために TCP プローブ、UDP プローブ、またはカスタムテストプローブを指定した場合、ILB はデフォルトで、指定された TCP プローブ、UDP プローブ、またはカスタムテストプローブをサーバーに送信する前に、サーバーが到達可能かどうかを判別するために ping プローブを送信します。ping プローブに失敗すると、対応するサーバーは、健全性検査ステータスが unreachable になり無効化されます。ping プローブに成功しても、TCP プローブ、UDP プローブ、またはカスタムテストプローブに失敗した場合、サーバーは健全性検査ステータスが dead になり無効化されます。

UDP プローブ以外のデフォルトの ping プローブを無効化できます。ping プローブは、常に UDP 健全性検査のデフォルトのプローブになります。

健全性検査の作成

負荷分散規則を作成する場合は、健全性検査を作成してサーバーグループに割り当てることができます。次の例では、hc1hc-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-timeout

健全性検査が完了しない場合に失敗したと見なされるまでのタイムアウトを指定します。

hc-count

hc-test 健全性検査の実行を試行する回数を指定します。

hc-interval

連続する健全性検査の間隔を指定します。プローブをすべてのサーバーに同時に送信することを回避するために、実際の間隔は 0.5 * hc-interval から 1.5 * hc-interval の間でランダム化されます。

hc-test

健全性検査の種類を指定します。tcpudpping などの組み込みの健全性検査、またはフルパス名で指定する必要のある外部の健全性検査を指定できます。


注 -  hc-test のポート指定は、create-rule サブコマンドの hc-port キーワードで指定します。詳細は、ilbadm(1M) のマニュアルページを参照してください。

ユーザー指定のカスタムテストはバイナリまたはスクリプトになります。

  • テストはシステム上の任意の場所に配置できます。create-healthcheck サブコマンドを使用する場合は、絶対パスを指定する必要があります。

    create-rule サブコマンドの健全性検査指定の一部としてテスト (/var/tmp/my-script など) を指定すると、ilbd デーモンがプロセスをフォークし、次のようにテストを実行します。

    /var/tmp/my-script $1 $2 $3 $4 $5

    引数は次のとおりです。

    $1

    VIP (リテラルの IPv4 または IPv6 アドレス)

    $2

    サーバー IP (リテラルの IPv4 または IPv6 アドレス)

    $3

    プロトコル (文字列としての UDP、TCP)

    $4

    数値ポート範囲 (hc-port に対するユーザー指定の値)

    $5

    失敗を返す前にテストが待機する最大時間 (秒)。指定された時間を超えてテストが実行されると、停止される可能性があり、テストは失敗したと見なされます。この値はユーザーによって定義され、hc-timeout に指定されます。

    • ユーザー指定のテストは、すべての引数を使用しても使用しなくてもかまいませんが、次のいずれかを返す必要があります

    • マイクロ秒単位の往復時間 (RTT)

    • テストが RTT を計算しない場合は 0

    • 失敗した場合は -1

デフォルトでは、健全性検査テストは PRIV_PROC_FORKRIV_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 

注 -  show-hc-result コマンドは、関連付けられた健全性検査が規則にある場合のみ、健全性検査の結果を表示します。

出力の LAST 列は、サーバーで健全性検査が実行された時間を示します。NEXT 列は、次の健全性検査が実行される時間を示します。

健全性検査の削除

ilbadm delete-healthcheck コマンドを使用して、健全性検査を削除します。次の例では、hc1 という健全性検査を削除します。

# ilbadm delete-healthcheck hc1

ILB 規則の構成

このセクションでは、ilbadm コマンドを使用して負荷分散規則を作成、削除、および一覧表示する方法について説明します。

ILB のアルゴリズム

ILB のアルゴリズムはトラフィック分散を制御し、負荷分散およびサーバー選択のためのさまざまな特性を提供します。

    ILB は 2 つの動作モードに対して次のアルゴリズムを提供します。

  • ラウンドロビン – ラウンドロビンアルゴリズムでは、ロードバランサはサーバーグループに対してローテーションベースでリクエストを割り当てます。サーバーにリクエストが割り当てられると、そのサーバーはリストの末尾に移動します。

  • src-IP ハッシュ – 発信元 IP ハッシュ方式では、ロードバランサは受信リクエストの発信元 IP アドレスのハッシュ値に基づいてサーバーを選択します。

  • src-IP, port ハッシュ – 発信元 IP、ポートハッシュ方式では、ロードバランサは受信リクエストの発信元 IP アドレスおよび発信元ポートのハッシュ値に基づいてサーバーを選択します。

  • src-IP, VIP ハッシュ – 発信元 IP、VIP ハッシュ方式では、ロードバランサは受信リクエストの発信元 IP アドレスおよび着信先 IP アドレスのハッシュ値に基づいてサーバーを選択します。

ILB 規則の作成

    ILB では、仮想サービスは負荷分散規則によって表現され、次のパラメータで定義されます。

  • 仮想 IP アドレス

  • トランスポートプロトコル: TCP または UDP

  • ポート番号 (またはポート範囲)

  • 負荷分散アルゴリズム

  • 負荷分散モード (DSR、フル NAT、またはハーフ NAT)

  • 一連のバックエンドサーバーで構成されるサーバーグループ

  • サーバーグループ内の各サーバーに対して実行できる、オプションのサーバー健全性検査

  • 健全性検査に使用するオプションのポート


    注 -  健全性検査は、特定のポートか、ilbd デーモンがサーバーのポート範囲からランダムに選択する任意のポートを指定できます。
  • 仮想サービスを表す規則名

規則を作成する前に、次を実行する必要があります。

  • 該当するパックエンドサーバーを含むサーバーグループを作成します。詳細は、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

注 -  -e オプションでは、作成する規則を有効にします (このオプションを使用しない場合は、デフォルトでは無効になります)。
使用例 12  健全性検査セッション持続性を持つフル NAT 規則の作成

この例では、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 が実行されているシステム (仮想の場合があります) で使用されるアドレスと完全に異なる必要があります。

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

ILB 規則の削除

ilbadm delete-rule コマンドを使用して、規則を削除します。-a オプションを追加して、すべての規則を削除します。次の例では、rule1 という規則を削除します。

# ilbadm delete-rule rule1