2つのOracle Solarisゾーン間でロードバランシング機能を持つアプリケーションを設定する方法

 

Oracle SolarisゾーンとOracle Solaris 11の統合ロードバランサを使用してアプリケーションに高可用性を持たせる方法


2012年6月公開

組込みの統合ロードバランサ(ILB)とOracle Solarisゾーン、およびOracle Solaris 11の新機能であるネットワーク仮想化機能とを組み合わせて、単一システム上に仮想サーバーをセットアップする方法を紹介します。 最初にILBの概要を簡単に説明してから、Apache Tomcatの仮想サーバー・インスタンスをセットアップする例を紹介します。Oracle Solarisゾーンとネットワーク管理の基礎知識が必要です。

OTNは、オラクルのテクノロジーについて理解し、十分な情報を得た上で決断を下すために活用できる場所です。さまざまな記事、ダウンロード可能なソフトウェア、ドキュメントなどが揃っています。ご登録いただき、業務に必要なテクニカル・リソースを入手してください。

統合ロードバランサの概要

ILBは、SPARCベースおよびx86ベースのシステムにインストールされているOracle Solarisオペレーティング・システムに、レイヤー3とレイヤー4のロードバランシング機能を提供します。つまり、ILBはネットワーク(IP)レイヤーとトランスポート(TCP/UDP)レイヤーで動作します。 ILBは、クライアントからの着信要求を傍受し、要求を処理するバックエンド・サーバーを一連のロードバランシング・ルールに基づいて決定し、選択されたサーバーに要求を転送します。 ILBはオプションで健全性検査を実行し、選択されたサーバーが着信要求を処理できるかどうかを確認してロードバランシング・アルゴリズムに必要なデータを提供します。

おもな特長

  • IPv4とIPv6の両方について、ステートレスDirect Server Return(DSR)およびネットワーク・アドレス変換(NAT)の動作モードをサポートします。
  • コマンドライン・インタフェース(CLI)によるILB管理を可能にします。
  • 健全性検査によるサーバー監視機能を提供します。

: フルNATモードを使用する理由の1つは、ILBボックスの外部に特別なルートを設定する必要がないことです。 たとえば、ILBボックスは部署Aが管理しているものの、バックエンド・サーバーとネットワークは別の部署が所有している場合、部署AはフルNATモードを使用してロードバランシングを実行できます。 すべての要求はまずILBボックスに送信されます。ILBでは、要求の着信先IPアドレスをバックエンド・サーバーが所有するIPアドレスに変更し、要求の発信元IPアドレスをILBが所有するアドレスに置き換え、要求をバックエンド・サーバーに転送します。 バックエンド・サーバーは、要求が内部システムから送信されたかのように処理します。 そのため、バックエンド・サーバーに特別な設定をする必要はなく、特別なルートを設定する必要もありません。

おもなコンポーネント

  • ilbadm CLI: このインタフェースを使用して、ロードバランシング・ルールの構成、オプションの健全性検査の実行、および統計の表示が可能です。
  • libilb構成ライブラリ: ilbadmおよびほかのサード・パーティ製アプリケーションは、libilb内に実装されている機能をILBの管理に使用できます。
  • ilbdデーモン: このデーモンは、次のタスクを実行します。
    • 永続的な構成を管理します
    • 構成情報を処理し、その情報をILBカーネル・モジュールに送信して実行することによって、ILBカーネル・モジュールへの逐次アクセスを提供します
    • 負荷分散が正しく調整されるように、健全性検査を実行してその結果をILBカーネル・モジュールに通知します

ILBの詳細については、Oracle Solarisの管理: IPサービスを参照してください。

Apache Tomcat仮想サーバーの例

この例では、ハーフNATモードを使用します。つまり、トラフィックがILBに到達すると、リアル・サーバーの着信先IPアドレスはILBによって書き換えられます。発信元IPアドレスはそのままです。 このモードは通常、サーバー・ロギングに使用されます(詳細はOracle Solarisの管理:IPサービスの"ILBの動作モード"を参照してください)。

この例では、それぞれApache Tomcatサーバーを実行する2つのゾーンにまたがる仮想サーバー(IPアドレス10.0.2.20)に着信したトラフィックをロードバランシングします。 図1に示すとおり、ロードバランサ自体はマルチホーム・ゾーン(ilb-zone)として構成されます。ilb-zone(10.0.2.16/24)の1つのインタフェースは外部ネットワークに接続されています。 もう1つのインタフェース(192.168.1.21/24)は、同じシステムでホストされている仮想ネットワークに接続されています。 ILBは、ロードバランシング・ルールの仮想IPアドレス(VIP)として、アドレス10.0.2.20を参照します。

Apache Tomcat仮想サーバーの例のダイアグラム

図1. Apache Tomcat仮想サーバーの例のダイアグラム

ステップ1: 仮想ネットワーク・インタフェース(VNIC)の作成

最初のステップとして、次の各ゾーンに一連の仮想ネットワーク・インタフェース(VNIC)と仮想スイッチ(etherstub)を作成します。

root@solaris:~# dladm create-vnic -l e1000g0 ilb0
root@solaris:~# dladm create-etherstub priv_net0
root@solaris:~# dladm create-vnic -l priv_net0 ilb1
root@solaris:~# dladm create-vnic -l priv_net0 server1
root@solaris:~# dladm create-vnic -l priv_net0 server2

etherstub priv_net0は、Apache Tomcatサーバーを実行する2つのゾーンとILBゾーンとを接続するシステム内の仮想ネットワークとして動作します。 つまり、ilb-zoneを経由しなければApache Tomcatサーバーにはアクセスできません。

ステップ2: ゾーンの作成

各ゾーンにファイル・システムがない場合は、次のコマンドを実行します。

root@solaris:~# zfs create -o mountpoint=/zones rpool/zones

次に、リスト1の手順に従ってILBゾーンを作成します。

root@solaris:~# zonecfg -z ilb-zone
ilb-zone: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:ilb-zone> create
zonecfg:ilb-zone> set zonepath=/zones/ilb-zone
zonecfg:ilb-zone> add net
zonecfg:ilb-zone:net> set physical=ilb0
zonecfg:ilb-zone:net> end
zonecfg:ilb-zone> add net
zonecfg:ilb-zone:net> set physical=ilb1
zonecfg:ilb-zone:net> end
zonecfg:ilb-zone> verify
zonecfg:ilb-zone> exit

リスト1. ILBゾーンの作成

リスト2の手順に従って、2つのサーバー・ゾーン、server1-zoneserver2-zoneを作成します。

root@solaris:~# zonecfg -z server1-zone
server1-zone: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:server1-zone> create
zonecfg:server1-zone> set zonepath=/zones/server1-zone
zonecfg:server1-zone> add net
zonecfg:server1-zone:net> set physical=server1
zonecfg:server1-zone:net> end
zonecfg:server1-zone> verify
zonecfg:server1-zone> exit
root@solaris:~# zonecfg -z server2-zone
server2-zone: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:server1-zone> create
zonecfg:server1-zone> set zonepath=/zones/server2-zone
zonecfg:server1-zone> add net
zonecfg:server1-zone:net> set physical=server2
zonecfg:server1-zone:net> end
zonecfg:server1-zone> verify
zonecfg:server1-zone> exit

リスト2. サーバー・ゾーンの作成

ステップ3: ILBゾーン(ilb-zone)のインストール

ゾーンを構成し終えたら、構成済みのゾーンをインストールする必要があります。 ここではデフォルトのゾーン・システム構成を使用し、最初の起動時に対話方式でいくつかの質問に答えていきます。 1つのゾーン(この例ではilb-zone)のインストールが完了したら、ゾーンのクローンを数秒で簡単に作成できます。

root@solaris:~# zoneadm -z ilb-zone install
A ZFS file system has been created for this zone.
Progress being logged to /var/log/zones/zoneadm.20111107T101755Z.ilb-zone.install
       Image: Preparing at /zones/ilb-zone/root.

 Install Log: /system/volatile/install.9968/install_log
 AI Manifest: /tmp/manifest.xml.QBaGZe
  SC Profile: /usr/share/auto_install/sc_profiles/enable_sci.xml
    Zonename: ilb-zone
Installation: Starting ...

      Creating IPS image
      Installing packages from:
           solaris
              origin: http://pkg.oracle.com/solaris/release
...
...

	      Done: Installation completed in 605.138 seconds.

Next Steps: Boot the zone, then log into the zone console (zlogin -C) to
               complete the configuration process

Log saved in non-global zone as /zones/ilb-zone/root/var/log/zones/zoneadm.20111107T101755Z.ilb-zone.install

リスト3. ゾーンのインストール

ilb-zoneを起動し、いま作成した各ゾーンのステータスを確認します。

root@solaris:~# zoneadm -z ilb-zone boot
root@solaris:~# zoneadm list -cv
ID NAME         STATUS     PATH                          BRAND      IP
0  global       running    /                             solaris    shared
1  ilb-zone     running    /zones/ilb-zone               solaris    excl
-  server1-zone configured /zones/server1-zone           solaris    excl
-  server2-zone configured /zones/server2-zone           solaris    excl
root@solaris:~# zlogin -C ilb-zone
[Connected to zone 'ilb-zone' console]

ゾーンにログインすると、すぐにシステム構成ツールのプロンプトが表示されます。 この対話型ツールを使用して、さまざまなシステム構成タスクを順番に実行して行きます。 この例では、ilb-zoneゾーンに対して次の構成を使用します。

  • ホスト名はilb-zoneとします。
  • ネットワーク・インタフェースilb0のIPアドレスは10.0.2.16/24、デフォルト・ルートは10.0.2.2とします。
  • ネットワーク・インタフェースilb1のIPアドレスは192.168.1.21/24とします。
  • ネーム・サービスは、グローバル・ゾーンに構成されている同じネーム・サーバーを使用するDNSを使用するように構成します。

システム構成ツールを使用して構成できるのは、1つのネットワーク・インタフェースのみです。ここではilb0を構成します。 初期構成が適用されたら、ゾーンにログインし、次の手順に従ってilb1の構成を追加する必要があります。

root@ilb-zone:~# ipadm create-ip ilb1
root@ilb-zone:~# ipadm create-addr -T static -a local=192.168.1.21/24 ilb1/v4

ステップ4: 1つ目のサーバー・ゾーン(server1-zone)のインストール

1つ目のサーバー・ゾーンserver1-zoneを、ilb-zoneのクローンとして作成します。 ゾーンのクローンを作成したら、server1-zoneを構成し、server1-zoneのクローンとしてserver2-zoneを作成します。 まずilb-zoneを停止し、クローンを作成します。 次に、新たにクローンを作成したserver1-zoneにログインし、このゾーンの最終的な構成を完了します。

root@solaris:~# zoneadm -z ilb-zone shutdown
root@solaris:~# zoneadm -z server1-zone clone ilb-zone
A ZFS file system has been created for this zone.
Progress is being logged to /var/log/zones/zoneadm.20120428T004843Z.server1-zone
Log saved in non-global zone as /zones/server1-zone/var/log/zones/zoneadm.2020428T004843Z.server1-zone
root@solaris:~# zoneadm -z server1-zone boot
root@solaris:~# zlogin -C server1-zone
[Connected to zone 'server1-zone' console]

最初のゾーンのときと同様にシステム構成ツールが起動するので、次のとおりにserver1-zoneの最終的な構成を実行します。

  • ホスト名はserver1-zoneとします。
  • ネットワーク・インタフェースserver1のIPアドレスは192.168.1.50/24、デフォルト・ルートは192.168.1.21とします。
  • ネーム・サービスはnoneに設定します。

ILBは、外部ネットワーク(ilb0経由)とプライベート・ネットワーク(ilb1経由)の間のトラフィックを転送するエージェントとして動作します。 そのため、IP転送サービスが必要です。 この例ではIPv4アドレスを使用するので、リスト4に示すとおり、ilb-zone非グローバル・ゾーン(ゾーンを起動してログインする必要があります)でIPv4転送のみ有効にする必要があります。

root@ilb-zone:~# routeadm -u -e ipv4-forwarding
root@ilb-zone:~# routeadm
       Configuration     Current            Current
       Option            Configuration      System State
---------------------------------------------------------
       IPv4 routing      disabled           disabled
       IPv6 routing      disabled           disabled
       IPv4 forwarding   enabled            enabled
       IPv6 forwarding   disabled           disabled

     Routing services "route:default ripng:default"

Routing daemons:

       STATE     FMRI
       disabled  svc:/network/routing/legacy-routing:ipv4
       disabled  svc:/network/routing/legacy-routing:ipv6
       disabled  svc:/network/routing/ripng:default
       online    svc:/network/routing/ndp:default
       disabled  svc:/network/routing/route:default
       disabled  svc:/network/routing/rdisc:default

リスト4. IPv4転送の有効化

ステップ5: ILBゾーンからのインターネット・アクセスの確認

ILBゾーンilb-zoneの中から外部にpingを実行できるかどうかテストします。

root@ilb-zone:~# ping www.oracle.com
www.oracle.com is alive

ステップ6: 最初のサーバー・ゾーン(server1-zone)へのTomcatのインストール

ロードバランシングするサービスはApache Tomcatであるため、リスト5に示すとおり、パッケージ・マネージャpkgを使用してserver1-zoneにTomcatをインストールする必要があります。グローバル・ゾーンを経由するすべての接続をパッケージ・マネージャが代行するため、server1-zoneでのネットワーク接続は不要です。 別のゾーンにソフトウェアがインストールされている場合、ソフトウェアはローカルにキャッシュされます。そうでない場合は、ネットワーク上に構成されているパッケージ・リポジトリから、グローバル・ゾーン経由でソフトウェアがダウンロードされます。

root@server1-zone:~# pkg install runtime/java tomcat tomcat-examples
   Packages to install:  17
   Create boot environment:No
   Create backup boot environment:No
   Services to change:         5

DOWNLOAD         PKGS      FILES       XFER (MB)
Completed        17/17     3381/3381   56.3/56.3 

PHASE            ACTIONS
Install Phase    4269/4269 

PHASE                          ITEMS
Package State Update Phase     17/17
Image State Update Phase       2/2
Loading smf(5) service descriptions: 1/1

リスト5. Apache Tomcatサービスのインストール

Apache Tomcatのインストールが成功したら、svc:/network/http SMFサービスのtomcat6インスタンスを次の方法で有効化する必要があります。

root@server1-zone:~# svcadm enable http:tomcat6

現在のステータスの概要を把握するため、グローバル・ゾーンから各ゾーンをリストします。

root@solaris:~# zoneadm list -cv
ID NAME         STATUS     PATH                          BRAND      IP
0  global       running    /                             solaris    shared
1  ilb-zone     running    /zones/ilb-zone               solaris    excl
2  server1-zone running    /zones/server1-zone           solaris    excl
-  server2-zone configured /zones/server2-zone           solaris    excl

ステップ7: 1つ目のサーバー・ゾーン(server1-zone)へのテスト用ルートの構成

正しく実行されていることを確認するには、グローバル・ゾーンからserver1-zoneに到達できる必要があるため、新しいルートを追加します。 ネットワークを再起動してもルートが一定になるように、次のroute -pコマンドを使用してルートの変更を行います。

root@solaris:~# route -p add 192.168.1.0 10.0.2.16
add net 192.168.1.0: gateway 10.0.2.16
add persistent net 192.168.1.0: gateway 10.0.2.16

この変更により、図2に示すとおり、server1-zoneで実行中のApache Tomcatサービスに、グローバル・ゾーンからilb-zone経由で到達できるようになります。

図2. Apache TomcatのWelcome画面

図2. Apache TomcatのWelcome画面

ステップ8: Apache Tomcatインスタンスのクローニング

server1-zoneのApache Tomcatサーバーのインスタンスが正常に実行されているため、server2-zoneに別のインスタンスを簡単に作成できます。 リスト6に示すとおり、まずserver1-zoneを停止してからそのクローンを作成し、その後、両方のゾーンを起動して新しいserver2-zoneにログインします。

root@solaris:~# zoneadm -z server1-zone shutdown
root@solaris:~# zoneadm -z server2-zone clone server1-zone
root@solaris:~# zoneadm -z server1-zone boot
root@solaris:~# zoneadm -z server2-zone boot
root@solaris:~# zoneadm list -cv
ID NAME         STATUS     PATH                          BRAND      IP
0  global       running    /                             solaris    shared
1  ilb-zone     running    /zones/ilb-zone               solaris    excl
2  server1-zone running    /zones/server1-zone           solaris    excl
3  server2-zone running    /zones/server2-zone           solaris    excl
root@solaris:~# zlogin -C server2-zone
[Connected to zone 'server2-zone' console]

リスト6. 別のApache Tomcatインスタンスの作成

もう一度システム構成ツールを使用して、次のとおりにserver2-zoneの構成を完了します。

  • ホスト名はserver2-zoneとします。
  • ネットワーク・インタフェースserver2のIPアドレスは192.168.1.60/24、デフォルト・ルートは192.168.1.21ilb-zoneのインタフェースilb1)とします。
  • ネーム・サービスはnoneに設定します。

数分で新しいゾーンが完成し、Apache Tomcatはすでに起動し実行された状態になります(server2-zoneからsvcsを使用して確認します)。

root@server2-zone:~# svcs http:tomcat6
STATE    STIME    FMRI
online   9:05:44  svc:/network/http:tomcat6

図3に示すとおり、Apache Tomcatインスタンスにはグローバル・ゾーンからも到達できます。

図3. Apache Tomcatへのグローバル・ゾーンからのアクセス

図3. Apache Tomcatへのグローバル・ゾーンからのアクセス

Oracle Solaris 11にはアプリケーション・インスタンスを短時間で効率的にデプロイできる方法があり、クラウド型の環境に理想的であることがすぐにわかります。

ステップ9: Apache Tomcatサーバーのロードバランシングの構成

Apache Tomcatの2つのインスタンスがそれぞれのゾーンで実行されている状態になったので、ゾーン間のトラフィックを調整するロードバランシング機能を設定します。 まずはILBゾーンilb-zoneで、リスト7の手順に従ってパッケージ・マネージャ(pkg)を使用してILBパッケージをインストールします。

root@ilb-zone:~# pkg install ilb
           Packages to install: 1
       Create boot environment:No
Create backup boot environment:No
            Services to change: 1

DOWNLOAD            PKGS     FILES      XFER (MB)
Completed           1/1      23/23      02/0.2

PHASE                  ACTIONS
Install Phase          55/55

PHASE                             ITEMS
Package State Update Phase        1/1
Image State Update Phase          2/2
Load smf(5) service descriptions: 1/1

リスト7. ILBパッケージのインストール

ILBサービスを有効化し、server1-zoneserver2-zoneの2つのApache Tomcatインスタンスにサーバー・グループtomcatgroupを定義します。

root@ilb-zone:~# svcadm enable ilb
root@ilb-zone:~# ilbadm create-servergroup -s 
servers=192.168.1.50:8080,192.168.1.60:8080 tomcatgroup
root@ilb-zone:~# ilbadm show-servergroup
SGNAME        SERVERID        MINPORT   MAXPORT  IP_ADDRESS
tomcatgroup   _tomcatgroup.0  8080      8080     192.168.1.50
tomcatgroup   _tomcatgroup.1  8080      8080     192.168.1.60

次のステップでは、ロードバランシング方法を定義します。 通常は、一連の手順の中でこのステップがもっとも手間がかかります。 最初に、永続性を持つtomcatrule_rrという名前の単純なルールを定義して有効化します。このルールは、"ラウンドロビン"方式のロードバランシング・アルゴリズムとハーフNATネットワーク・トポロジーを使用して、着信先の仮想IPアドレスとポート番号(10.0.2.20:80)宛ての着信パケットをtomcatgroupサーバー・グループの着信先に一致させます。

root@ilb-zone:~# ilbadm create-rule -e -p -i vip=10.0.2.20,port=80 -m 
lbalg=rr,type=HALF-NAT,pmask=32 -o servergroup=tomcatgroup tomcatrule_rr
root@ilb-zone:~# ilbadm show-rule 
RULENAME         STATUS  LBALG       TYPE      PROTOCOL  VIP         PORT
tomcatrule_rr    E       roundrobin  HALF-NAT  TCP       10.0.2.20   80

リスト8に示すとおり、-fオプションを使用すると、作成した新しいルールのさらに詳細な情報を表示できます。

root@ilb-zone:~# ilbadm show-rule -f
       RULENAME: tomcatrule_rr
         STATUS:E
           PORT: 80
       PROTOCOL: tcp
          LBALG: roundrobin
           TYPE: HALF-NAT
      PROXY-SRC: --
          PMASK: /32
        HC-NAME: --
        HC-PORT: --
     CONN-DRAIN: 0
    NAT-TIMEOUT: 120
PERSIST-TIMEOUT: 0
    SERVERGROUP: tomcatgroup
            VIP: 10.0.2.20
        SERVERS: _tomcatgroup.0,_tomcatgroup.1

リスト8. 新しいルールの詳細

最後に、VIPアドレス10.0.2.20を着信先とするパケットのうち、ネットワーク・インタフェースilb0に送信する必要のあるパケットがどれかを外部に通知する必要があります。 まず、次のコマンドを使用して、ilb0のMACアドレスをilb-zoneで調べる必要があります。

root@ilb-zone:~# dladm show-vnic ilb0
LINK    OVER   SPEED   MACADDRESS       MACADDRTYPE  VID
ilb0    ?      1000    2:8:20:4e:fa:fd  random       0

MACアドレス(この例では2:8:20:4e:fa:fd)がわかったら、arpを使用してインターネットからMACアドレスへの変換(公開、永続的)を適用する必要があります。

root@ilb-zone:~# arp -s 10.0.2.20 2:8:20:4e:fa:fd pub permanent 

ステップ10: ロードバランシングの検証

2つのApache Tomcatインスタンスがロードバランシングされているかどうかを確認するには、ブラウザで仮想IPアドレス10.0.2.20を指定し、図4に示すApache TomcatのWelcomeページが表示されるかどうかを確認します。

図4. Apache TomcatのWelcomeページ

図4. Apache TomcatのWelcomeページ

表示されれば成功です。 ところが、どちらのインスタンスから表示されたのかわかりません。 これを簡単に確認する方法があります。server1-zoneserver2-zoneの両方で、Apache Tomcatのドキュメント・ルートにあるスクリプト例の1つ、/var/tomcat6/webapps/examples/jsp/snp/snoop.jspを変更します。 次の行を追加して、要求を処理したApache Tomcatインスタンスのサーバー・ホスト名を出力するようにします。

<h3>Backend server</h3>
<%@page import="java.net.InetAddress;" %>
<%String ip = "";
InetAddress ina = InetAddress.getLocalHost();
out.println("Server Host Name :: "+ina.getHostName());%>

変更を加えたら、仮想IPアドレスhttp://10.0.2.20/examples/jsp/snp/snoop.jsp上のスクリプトを起動して、図5に示しているような結果を確認できます。

図5. サーバーのホスト名の確認

図5. サーバーのホスト名の確認

ステップ11: 健全性検査の実行

簡単なILBルールにはサーバーの健全性検査を含めなかったため、有効性は限定的です。というのも、ロードバランサが停止しているサーバーに要求を転送しないようにする必要があるからです。 使用できる健全性検査オプションには、 pingプローブ、TCPプローブ、UDPプローブ、ユーザー定義のスクリプトがあります。 Apache Tomcatインスタンスの健全性を確認する必要があるため、リスト9に示す簡単な健全性検査スクリプトを記述します。

root@ilb-zone:~# mkdir /opt/ilb
root@ilb-zone:~# cat > /opt/ilb/hc-tomcat #!/usr/bin/bash result=`curl -s http://$2:8080` if [ "$result" != "" ] && [ ${result:0:5} = "<meta" ]; then     echo 0 else     echo -1 fi
root@ilb-zone:~# chmod +x /opt/ilb/hc-tomcat

リスト9. 健全性検査スクリプト

このスクリプトは、サーバーにpingを送って<meta>ヘッダーが返されるかどうかを確認するという単純なものです。 リスト9を見ると、スクリプト変数$2があることもわかります。 ILBには、スクリプトで使用できる変数が多数あります。

  • $1 — VIPアドレス(IPv4またはIPv6のリテラル・アドレス)
  • $2 — サーバーのIPアドレス(IPv4またはIPv6のリテラル・アドレス)
  • $3 — プロトコル(UDPまたはTCPのいずれか)
  • $4 — ロードバランシング・モード(DSR、NAT、ハーフNAT)
  • $5 — 数値ポート
  • $6 — 失敗を返すまでにスクリプトが待機する最長時間(秒数)

server1-zone上でスクリプトを実行し、次に示すように、成功を示す0が返されることを確認できれば、スクリプトの実行に問題ないことを簡単に再確認できます。

root@ilb-zone:~# /opt/ilb/hc-tomcat 10.0.2.20 192.168.1.50 
0

スクリプトが正常に実行できたら、次に示すようにilbadmを使用して、スクリプトと健全性検査のルールを関連付けられます。

root@ilb-zone:~# ilbadm create-healthcheck -h
hc-test=/opt/ilb/hc-tomcat,hc-timeout=2,hc-count=1,hc-interval=10 hc-tomcat
root@ilb-zone:~# ilbadm show-healthcheck
HCNAME      TIMEOUT  COUNT  INTERVAL  DEF_PING  TEST
hc-tomcat   2        1      10        Y         /opt/ilb/hc-tomcat

この例では、最長2秒間、応答を待機しながら、10秒に1回スクリプトを実行します。 この健全性検査を作成したら、既存のILBルールを変更する必要があります。 現在、ILBは既存のルールの変更をサポートしていないため、リスト10に示すように、既存のルールをまず削除してから新しいルールを作成します。

root@ilb-zone:~# ilbadm delete-rule tomcatrule_rr
root@ilb-zone:~# ilbadm create-rule -e -p -i vip=10.0.2.20,port=80 -m 
lbalg=rr,type=HALF-NAT,pmask=32 -h hc-name=hc-tomcat -o servergroup=tomcatgroup tomcatrule_rr 
root@ilb-zone:~# ilbadm show-rule -f
       RULENAME: tomcatrule_rr
         STATUS:E
           PORT: 80
       PROTOCOL: tcp
          LBALG: roundrobin
           TYPE: HALF-NAT
      PROXY-SRC: --
          PMASK: /32
        HC-NAME: hc-tomcat
        HC-PORT: ANY
     CONN-DRAIN: 0
    NAT-TIMEOUT: 120
PERSIST-TIMEOUT: 0
    SERVERGROUP: tomcatgroup
            VIP: 10.0.2.20
        SERVERS: _tomcatgroup.0,_tomcatgroup.1

リスト10. 新しいILBルールの作成

新しいルールが作成されると、健全性検査はすぐに有効になります。 健全性検査のステータスは、次に示すとおり、ilbadm show-hc-resultを使用して簡単に取得できます。

root@ilb-zone:~# ilbadm show-hc-result
RULENAME       HCNAME     SERVERID        STATUS   FAIL   LAST      NEXT      RTT
tomcatrule_rr  hc-tomcat  _tomcatgroup.0  alive    0      11:01:18  11:01:23  739
tomcatrule_rr  hc-tomcat  _tomcatgroup.1  alive    0      11:01:20  11:01:34  1111

上の結果を見てわかるとおり、すべてが正常に動作しており、サーバーは両方とも応答しています。 では、サーバーの1つが停止したらどうなるでしょうか。 server1-zoneのApache Tomcatインスタンスを無効にし、どのような現象が発生するか確認してみましょう。

root@server1-zone:~# svcadm disable http:tomcat6

もう一度、ilb-zoneからステータスを確認します。

root@ilb-zone:~# ilbadm show-hc-result
RULENAME       HCNAME     SERVERID        STATUS   FAIL   LAST      NEXT      RTT
tomcatrule_rr  hc-tomcat  _tomcatgroup.0  dead     63     11:22:43  11:22:50  941
tomcatrule_rr  hc-tomcat  _tomcatgroup.1  alive    0      11:22:30  11:22:45  952

要求はすべて、server2-zoneのApache Tomcatインスタンスに送信されています。

まとめ

Oracle Solaris 11の組込み機能である統合ロードバランサ(ILB)は、レイヤー3とレイヤー4のロードバランシング機能を備えています。 ILBは、クライアントからの着信要求を傍受して、要求を処理するバックエンド・サーバーを一連のロードバランシング・ルールに基づいて決定し、選択されたサーバーに要求を転送するため、アプリケーションの耐障害性を高める強力な方法と言えます。

参照

統合ロードバランサの製品ドキュメントを参照してください。

その他のOracle Solaris 11のリソースは次のとおりです。

リビジョン1.0、2012/06/04

オラクルのすべてのテクノロジーに関するシステム管理関連のコンテンツについては、OTN SystemsのFacebookTwitterをフォローして確認してください。

false