この付録では、F5 BIG-IP Local Traffic Manager(LTM)のハードウェア型ロード・バランサを使用して、Coherence*Extendクライアント接続の負荷を分散させる方法について説明します。BIG-IPシステムを使用してSSL処理の負荷を軽減するための指示も含まれています。
この指示はCoherence*Extend設定に関係するので、BIG-IP構成ユーティリティを使用する場合に特有です。使用方法に関する指示を実行する方法の詳細は、ユーティリティに付属しているヘルプを参照してください。さらに、指示はBIG-IP LTM 10.2.1に基づいて作成されており、将来リリースされるBIG-IP LTMでは正確でなくなる場合があります。
この章の内容は次のとおりです。
F5 BIG-IP LTMとは、Coherence*Extendクライアント(クライアント層)を実行している1台以上のコンピュータとCoherence*Extendプロキシ・サーバー(プロキシ層)を実行している1台以上のコンピュータとの間にあるハードウェア・デバイスのことです。アプリケーション・トラフィックの保護、最適化およびロード・バランシングに関して多様なテクニックを使用して、LTMによりクライアント接続を複数のクラスタ化プロキシ・サーバーにおいて分散させます。
図B-1は、外部ネットワーク・クライアントと内部ネットワーク・サーバーとの間において設定されているBIG-IPシステムの概念図を示します。
ノードとは、ネットワーク上にある物理リソースのIPアドレスを識別するBIG-IPシステム上の論理オブジェクトのことです。Coherence*Extendの場合、内部ネットワークで1台以上のプロキシ・サーバーをホストする各コンピュータに対してノードを構成します。
ノードを作成するには、次の手順を実行します。
BIG-IP構成ユーティリティにログインします。
ナビゲーション・ペインの「Main」タブで、「Local Traffic」を展開してから「Nodes」をクリックします。
画面の右上隅にある「Create」をクリックします。「New Node」画面が表示されます。
「Address」設定で、ノードのIPアドレスを入力します。
その他の設定のそれぞれに関して値を指定するか、そのままにするか、変更します。
「Finished」をクリックします。
図B-2に、ノード構成例を示します。
ロード・バランシング・プールは、トラフィックを受信および処理する論理デバイス(プロキシ・サーバーなど)のグループです。クライアントのリクエストで指定された送信先IPアドレスにクライアントのトラフィックを送信するのではなく、BIG-IPシステムではそのプールのメンバーであるサーバーにリクエストを送信します。これによって、サーバーのリソースに関して負荷が効率的に分散されます。
プールを作成する際、プール・メンバーをプールに割り当てます。プール・メンバーとは、サーバー・エンドポイントをネットワーク上で示す論理オブジェクトのことです。Coherence*Extendの場合、プロキシ層コンピュータ上で実行している各JVMプロキシ・サーバーに対してプール・メンバーを作成します。
BIG-IPシステムがリクエストの送信先に選択した特定プール・メンバーは、そのプールに割り当てたロード・バランシング方法により判別されます。ロード・バランシング方法とは、リクエストを処理するプール・メンバーを選択するためにBIG-IPシステムで使用するアルゴリズムのことです。たとえば、デフォルトのロード・バランシング方法はラウンド・ロビンで、これによってBIG-IPシステムで各入力リクエストを次に利用可能なプール・メンバーに送信し、プールにあるサーバーにおいてリクエストが均等に分散されます。
この項の内容は次のとおりです。
ロード・バランシング・プールを作成するには、次の手順を実行します。
BIG-IP構成ユーティリティにログインします。
ナビゲーション・ペインの「Main」タブで、「Local Traffic」を展開してから「Pools」をクリックします。「Pools」画面が表示されます。
画面の右上隅にある「Create」をクリックします。「New Pool」画面が表示されます。
「Configuration」リストで、「Advanced」を選択します。
「Name」設定で、プールの名前を入力します。
その他の設定のそれぞれに関して値を指定するか、そのままにするか、変更します。
「Finished」をクリックします。
図B-3は、プール構成例を示します。
プールのメンバーをロード・バランシング・プールに追加するには、次の手順を実行します。
「Members」タブで、表示されている番号をクリックします。これによって、プールの既存メンバーが一覧表示されます。
画面の右にある「Add」をクリックします。「New Pool Member」画面が表示されます。
「Address」ボックスで、「Node List」を選択してからIPアドレスを選択します。
「Service Port」ボックスで、対応プロキシ・サーバーがリスニングするポート番号を入力します。
その他の設定のそれぞれに関してそのままにするか変更します。
「Finished」をクリックします。
図B-4は、プール構成例を示します。以前に作成したノード上で2つのプロキシ・サーバー用プール・メンバーが稼動し、ポートの9099と9100をそれぞれリスニングしていることが示されています。さらに、接続数最小型ロード・バランシング・ポリシーを使用するようにプールが構成されます。
仮想サーバーとは、BIG-IPシステム上でIPアドレスとポートで示されるトラフィック管理オブジェクトのことです。外部ネットワークにあるクライアントは、アプリケーション・トラフィックを仮想サーバーに送信できます。それから、構成指示に応じてそのトラフィックが転送されます。仮想サーバーの主な目的は、内部ネットワークにあるサーバーのプールにおいてトラフィックの負荷を分散させることにある場合が多いです。仮想サーバーを使用することで、クライアント・リクエストを処理するためのリソースの可用性が向上します。Coherence*Extendの場合、以前に構成したプロキシ・サーバーのプールにトラフィックを転送するように仮想サーバーを構成する必要があります。
仮想サーバーを作成するには、次の手順を実行します。
BIG-IP構成ユーティリティにログインします。
ナビゲーション画面の「Main」タブで、「Local Traffic」を展開してから「Virtual Servers」をクリックします。「Virtual Servers」画面が表示されます。
画面の右上にある「Create」をクリックします。「New Virtual Server」画面が表示されます。
「Name」設定で、仮想サーバーの名前を入力します。
「Destination」ボックスで、BIG-IPデバイスの外部IPアドレスを割り当て、「Service Port」ボックスでリスニング・ポートを指定します。これは、Coherence*Extendクライアントの接続先となるIPアドレスとポートです。
以前に作成したプールを「Default Pool」ドロップダウン・ボックスで選択します。
その他の設定のそれぞれに関してそのままにするか変更します。
「Finished」をクリックします。
図B-5は、10.196.21.3:9099
上でTCP/IP接続においてリスニングする仮想構成例を示します。
さらに、図B-6に示すように、構成されたプールにトラフィックがこの仮想サーバーにより転送されます。
BIG-IP LTM仮想サーバーを使用するようにCoherence*Extendを構成する必要があります。クラスタ側とクライアント側のキャッシュ構成ファイルの両方で構成が行われている必要があります。
BIG-IP LTMを使用するようにCoherence*Extendを構成するには、次の手順を実行します。
プロキシ・サーバーのキャッシュ構成ファイルを開きます。
プロキシ・スキーム定義を編集して、client
を<load-balancer>
要素内で入力することで、クライアント用ロード・バランシング方針を指定します。次に例を示します。
<proxy-scheme> <service-name>ExtendTcpProxyService</service-name> <acceptor-config> <tcp-acceptor> <local-address> <address>192.168.1.2</address> <port>9099</port> </local-address> </tcp-acceptor> </acceptor-config> <load-balancer>client</load-balancer> <autostart>true</autostart> </proxy-scheme>
プロキシ・サーバーのキャッシュ構成ファイルを保存してから閉じます。追加プロキシ・サーバーに対して手順2を繰り返します。
クライアントのキャッシュ構成ファイルを開きます。
<remote-cache-scheme>
要素で、BIG-IP仮想サーバーのIPアドレスとポートを一覧表示します。「仮想サーバーの構成」を参照してください。さらに、<heartbeat-interval>
要素を<outgoing-message-handler>
要素内で指定します。これによって、構成されている時間間隔でTCP/IP接続上にクライアントが定期的にハートビート・メッセージを送信します。アイドル状態のクライアントからBIG-IPデバイスが接続を切断するのを防止するには、これが必要です。次に例を示します。
<remote-cache-scheme> <scheme-name>extend-direct</scheme-name> <service-name>ExtendTcpCacheService</service-name> <initiator-config> <tcp-initiator> <remote-addresses> <socket-address> <address>10.196.21.3</address> <port>9099</port> </socket-address> </remote-addresses> </tcp-initiator> <outgoing-message-handler> <heartbeat-interval>5s</heartbeat-interval> </outgoing-message-handler> </initiator-config> </remote-cache-scheme>
クライアントのキャッシュ構成ファイルを保存してから閉じます。
サーバーが稼働状態にありトラフィックを受信できることを状態モニターにより確認できます。監視するトラフィックのタイプに応じて、プールに関連付けることができる多様な事前定義済状態モニターがBIG-IPシステムにはあります。
Coherence*Extendの場合、TCP状態モニターを使用して、プロキシ・サーバーのプールを監視できます。BIG-IPデバイスがプロキシ・サーバーとTCP/IP接続を確立できる場合に、このタイプのモニターでプロキシ・サーバーがマークアップされます。プロキシ・サーバーが機能していることが示されているとしても、プロキシ・サーバーで実際にクライアントのトラフィックを処理できることは保証されません。より詳細に監視するには、BIG-IPでカスタム状態モニターを作成し。Coherence*Extendのpingリクエストをプロキシ・サーバーに送信して適切なレスポンスが返されることを確認できます。これによって、プロキシ・サーバーが稼働してクライアントのトラフィックを処理できます。
この項の内容は次のとおりです。
Coherence*Extendのpingリクエストをプロキシ・サーバーに送信して稼働していることを確認するカスタムCoherence*Extend状態モニターを作成する手順は次のとおりです。
BIG-IP構成ユーティリティにログインします。
ナビゲーション・ペインの「Main」タブで、「Local Traffic」を展開してから「Monitors」をクリックします。「Monitors」画面が表示されます。
画面の右上隅にある「Create」をクリックします。「New Monitor」画面が表示されます。
モニターの名前を「Name」ボックスに入力します。
「TCP」を「Type」ドロップダウン・ボックスで選択します。
次を「Send String」ボックスで入力します。
\x07\x00\x03\x00\x00\x42\x00\x40
次を「Receive String」ボックスで入力します。
\x09\x00\x04\x02\x00\x42\x00\x03\x64\x40
「Finished」をクリックします。
図B-7は、カスタムCoherence*Extend状態モニター構成例を示します。
前述の手法は、BIG-IPバージョン10.2.1以降でのみ動作します。それより古いバージョンのBIG-IPの場合、手動で外部状態モニターを構成する必要があります。このためには、実行可能ファイルのシェル・スクリプトをextend_ping
の名前でBIG-IPデバイスの/usr/bin/monitors
ディレクトリに作成します。スクリプトの内容は次のようにします。
#! /bin/bash ############################################################################### ### EXTERNAL MONITOR FOR COHERENCE*EXTEND ### INPUTS: ### $1 The IPV6 formatted IP address of the pool member to test ### $2 The port number of the pool member to test ### $3+ White space delimited parms as listed in the monitor "args" ### OUTPUTS: ### If null is returned, the member is "down" ### If any string of one or more characters is returned, the member is "up" ############################################################################### IP=${1:-"127.0.0.1"} IP=${IP##*:} # This removes the leading ::ffff: PORT=${2:-"80"} TIMEOUT=${3:-1} SLEEP=${4:-1} PID_FILE="/var/run/extend_ping.$IP.$PORT.pid" HEX_REQUEST="0700030000420040" HEX_RESPONSE="09000402004200036440" ### ### Terminate existing process, if any ### if [ -f $PID_FILE ] then kill -9 `cat $PID_FILE` > /dev/null 2>&1 fi echo "$$" > $PID_FILE ### ### Ping the server and return a user friendly result ### RESULT=`/bin/echo "$HEX_REQUEST" | /usr/bin/xxd -r -p | /usr/bin/nc -i \ $SLEEP -w $TIMEOUT $IP $PORT | /usr/bin/xxd -p | /bin/grep \ "$HEX_RESPONSE" 2> /dev/null` if [ "$RESULT" != "" ] ; then /bin/echo "$IP:$PORT is \"UP\"" fi rm -f $PID_FILE
extend_ping
スクリプトを使用するようにBIG-IPを構成する手順は次のとおりです。
ナビゲーション・ペインの「Main」タブで、「Local Traffic」を展開してから「Monitors」をクリックします。「Monitors」画面が表示されます。
画面の右上隅にある「Create」をクリックします。「New Monitor」画面が表示されます。
モニターの名前を「Name」ボックスに入力します。
「External」を「Type」ドロップダウン・ボックスで選択します。
次を「External Program」ボックスで入力します。
/usr/bin/monitors/extend_ping
「Finished」をクリックします。
図B-8は、外部Coherence*Extend状態モニター構成例を示します。
カスタム状態モニターはロード・バランシング・プールと関連付ける必要があります。カスタムCoherence*Extendモニターを作成したら、それをCoherence*Extendロード・バランシング・プールと関連付けます。
カスタム状態モニターをロード・バランシング・プールと関連付けるには、次の手順を実行します。
BIG-IP構成ユーティリティにログインします。
ナビゲーション・ペインの「Main」タブで、「Local Traffic」を展開してから「Pools」をクリックします。「Pools」画面が表示されます。
Coherence*Extendプールの名前をクリックします。「Pool」画面が表示されます。
カスタムCoherence*Extend状態モニターの名前を「Health Monitors」ボックスで選択します。
「Update」をクリックします。
図B-9は、カスタム状態モニターを使用するCoherence*Extendプールを示します。
SSLを使用するようにCoherence*Extendを構成して、クライアントとプロキシ・サーバーのプロセスとの間における通信を保護できます。ただし、これには代償があります。特に、SSLを有効にすると、プロキシ層のCPU使用率が劇的に上昇し、各リクエストの待機時間が長くなります。プライバシの理由で保護されているデータの暗号化と復号化の困難な処理からプロキシ・サーバーが、BIG-IP SSL Accelerationにより解放されます。SSLトランザクションをより効率的に処理するように設計されている高いパフォーマンスのデバイスに、CPU負荷の高い復号化処理が移行されます。この手法はSSLオフロードと知られています。
SLLオフロードを有効にするには、次の手順を記載順に実行する必要があります。
Coherence*Extendクライアントのキャッシュ構成ファイルでSSLを有効にします。SSLを使用するようにExtendクライアントを構成する方法の詳細は、Oracle Coherenceセキュリティ・ガイドを参照してください。
サーバーのSSL証明書とキーをBIG-IPシステムにインポートする手順は、次のとおりです。
BIG-IP構成ユーティリティにログインします。
ナビゲーション・ペインの「Main」タブで、「Local Traffic」を展開し、マウスのポインタを「SSL Certificates」の上に移動してから「Import」選択します。「SSL Certificate」画面が表示されます。
「Import Type」ドロップダウン・ボックスで、「PKCS12」を選択します。
証明書の名前を「Certificate Name」ボックスに入力します。
「Choose File」をクリックしてから、サーバーのPKCS12ファイルを参照します。
PKCS12ファイルのパスワードを入力します。
「Import」をクリックします。
図B-10は、サーバーSSL証明書構成例を示します。
クライアントSSLプロファイルを作成するには、次の手順を実行します。
ナビゲーション・ペインの「Main」タブで、「Local Traffic」を展開し、マウスのポインタを「Profiles」の上に移動してから「SSL」の上に移動し、「Client」選択します。「Client SSL Profiles」画面が表示されます。
画面の右上隅にある「Create」をクリックします。「New Client SSL profile」画面が表示されます。
クライアントSSLプロファイルの名前を「Name」ボックスに入力します。
右側で「Custom」チェック・ボックスを選択します。
以前にインポートしたサーバー証明書の名前を「Certificate」と「Key」の両ドロップダウン・ボックスで選択します。
「Finished」をクリックします。
図B-11は、クライアントSSLプロファイル構成例を示します。
クライアントSSLプロファイルを使用するようにCoherence*Extend仮想サーバー構成を変更する手順は次のとおりです。
ナビゲーション画面の「Main」タブで、「Local Traffic」を展開してから「Virtual Servers」をクリックします。「Virtual Servers」画面が表示されます。
仮想サーバーの名前をクリックします。
クライアントSSLプロファイルの名前を「SSL Profile (Client)」ドロップダウン・ボックスで選択します。
「Update」をクリックします。
図B-12は、クライアントSSLプロファイルを使用する仮想サーバー構成例を示します。