IBM Cloud Load Balancer での高度なトラフィック管理
IBM Cloud® Load Balancer サービスで利用可能なさまざまな高度なトラフィック管理機能についてご紹介します。
最大接続数
max connections
構成を使用して、特定のフロントエンド仮想ポートに対する同時接続の最大数を制限します。 特定のフロントエンド仮想ポートに対する最大同時接続数、またはすべてのフロントエンド仮想ポートにわたるシステム全体の最大同時接続数は、 15000
です。 デフォルトでは、最大値 15000
に設定されている。
セッション・パーシスタンス
ロード・バランサーは、接続のソース IP に基づいて、セッション・パーシスタンスをサポートします。 例として、 80
( HTTP ) ポートで有効になっている source IP
タイプのセッション永続性がある場合、同じソースIPクライアントからのその後の HTTP 接続試行は、同じバックエンドサーバー上で永続化されます。 この機能は、サポートされている 3 つすべてのプロトコル (HTTP、HTTPS、および TCP) で使用可能です。
ロードバランサーは HTTP Cookie に基づいたセッションの永続化もサポートします。 例えば、 80
( HTTP ) ポートで有効になっている HTTP Cookie
タイプのセッション永続性がある場合、ロードバランサがバックエンドサーバから最初の応答を受け取ると、応答ヘッダに IBMCLB
という名前と back-end server UUID
という値を持つクッキーを追加します。
ロードバランサーに到着したこのクッキーを使ったそれ以降のすべての HTTP リクエストは、同じバックエンドサーバー上で永続化されます。 この機能は HTTP と HTTPS の両方で利用できる。
HTTP キープアライブ
クライアント・サーバーとバックエンド・サーバーの両方で有効になっている場合、ロード・バランサーは HTTP keep alive
をサポートします。 ロード・バランサーは、接続効率の向上と待ち時間の短縮のためにサーバー・サイドの HTTP 接続を再利用しようとします。
接続タイムアウト
ロード・バランサーによって以下のタイムアウト値が使用されます。
名前 | 説明 | デフォルト・タイムアウト | ユーザー構成可能 |
---|---|---|---|
サーバー・サイドの接続試行 | ロードバランサーがバックエンドサーバーとのTCPコネクションを確立するために使用できる最大時間ウィンドウ。 接続試行が失敗すると、ロード・バランサーは、構成済みのロード・バランシング方式に従って、次に使用可能なサーバーを試行します。 | 5 秒 | いいえ |
クライアント・サイドのアイドル接続 | 最大アイドル時間。クライアントが接続を正しく閉じられなかった場合は、この時間を過ぎるとロード・バランサーはクライアント・サイド接続を停止します。 | 50 秒 | ある |
サーバー・サイドのアイドル接続 | 最大アイドル時間 (TCP のバックエンド・プロトコル構成の場合)。この時間を過ぎると、ロード・バランサーはサーバー・サイド接続をクローズします。 HTTP がバックエンドプロトコルとして使われている場合、ロードバランサーはアイドルタイムアウト期間内に HTTP 応答を受け取らなければ、クライアントにエラーメッセージを返します。 | 50 秒 | ある |
サーバー側およびクライアント側のアイドル接続タイムアウト値は、API、 cURL、またはCLIを使用して設定できます。
SoftLayer_Network_LBaaS_Listener
サービスの UpdateLoadBalancerProtocols
メソッドを使用して、サーバー・タイムアウト (ParameterName: serverTimeout
) とクライアント・タイムアウト (ParameterName: clientTimeout
) の値を秒単位で最大2時間まで設定できます (範囲:
1 - 7200
秒)。 サーバーまたはクライアントのタイムアウト値を指定しなかった場合、 ロードバランサーは対応するタイムアウトのデフォルト値 (表に記載) を使います。
APIによるタイムアウト値の設定
クライアントとサーバーのタイムアウト値は、API と cURL で設定できます。
APIを使ってタイムアウト値を設定するには、以下の手順に従ってください:
import SoftLayer
from pprint import pprint
#Your load balancer UUID
uuid = 'set me'
#New protocols to add
protocolConfigurations = [
{
"listenerUuid": "69fad83a-e850-4b72-a4d3-af94d5bf5437",
"serverTimeout": 60,
"clientTimeout": 60
},
{
"listenerUuid": "e4b8cfd0-1e27-4d3e-a8ed-595b198cd683",
"frontendPort": 1450,
"maxConn": 1002,
"serverTimeout": 80,
"clientTimeout": 80
}
]
#Create the API client
client = SoftLayer.Client()
listener_service = client['Network_LBaaS_Listener']
_mask = "mask[listeners]"
try:
response = listener_service.updateLoadBalancerProtocols(uuid, protocolConfigurations, mask=mask)
pprint(response)
except SoftLayer.SoftLayerAPIError as e:
print("Unable to add protocols: %s, %s" % (e.faultCode, e.faultString))
詳細については、 IBM Cloud Load Balancer APIリファレンスページの プロトコルの更新を 参照のこと。
cURL, を使ってタイムアウト値を設定するには、以下の手順に従う:
-
ロードバランサーの情報を取得します:
curl -g -u $SL_USER:$SL_APIKEY -X POST -d '{"parameters":["CLB_UUID"]}' 'https://api.softlayer.com/rest/v3.1/SoftLayer_Network_LBaaS_LoadBalancer/getLoadBalancer' | jq
-
ロードバランサのリスナーを取得します:
curl -g -u $SL_USER:$SL_APIKEY -X GET 'https://api.softlayer.com/rest/v3.1/SoftLayer_Network_LBaaS_LoadBalancer/CLB_ID/getListeners' | jq
-
前のステップで取得したリスナーIDを使用して、リスナーの詳細を取得する:
curl -g -u $SL_USER:$SL_APIKEY -X GET 'https://api.softlayer.com/rest/v3.1/SoftLayer_Network_LBaaS_Listener/CLB_LISTENER_ID/getObject' | jq
-
クライアントまたはサーバーのタイムアウト値を設定する:
curl -g -u $SL_USER:$SL_APIKEY -X POST -d '{"parameters": ["LB_UUID", [{"listenerUuid": "LISTENER_UUID", "clientTimeout": 1000}]]}' 'https://api.softlayer.com/rest/v3.1/SoftLayer_Network_LBaaS_Listener/updateLoadBalancerProtocols.json' | jq
前の手順でロードバランサーのUUIDとリスナーのUUIDを取得します。
CLIからタイムアウト値を設定する
CLIからタイムアウト値を設定するには、以下の手順に従う:
-
アカウントのロードバランサーの一覧を取得します:
ibmcloud sl loadbal list
-
タイムアウト値を設定するロードバランサーの ID を取得します:
ibmcloud sl loadbal detail <LB-id>
-
前のコマンドで得たパラメーターを編集する:
ibmcloud sl call-api SoftLayer_Network_LBaaS_Listener updateLoadBalancerProtocols --parameters '["LB_UUID",[{"tlsCertificateId":null,"listenerUuid":"LISTENER_UUID","clientTimeout": <Value in seconds>}]]'
-
変更を確認してください:
ibmcloud sl loadbal detail <LB-id>
アイドル接続のタイムアウト値を長く設定すると、アイドル接続が最大同時接続数15,000にカウントされるため、データパストラフィックに遅延が発生したり、ブロックされたりする可能性があります。 データパストラフィックが中断されないように、同時接続の最大数とともにアイドル接続タイムアウト値を考慮してください。
エンドクライアント IP アドレスの保存
IBM Cloud Load Balancer はリバースプロキシとして働き、クライアントからの着信トラフィックを処理する。 ロード・バランサーは独自の IP アドレスを使用して、バックエンド・サーバー・インスタンスへの別個の接続を確立します。 (フロントエンドの HTTP 接続または HTTPS 接続に対して、) バックエンド・サーバーとの HTTP 接続の場合、ロード・バランサーは、元のクライアント IP アドレスを X-Forwarded-For HTTP
ヘッダーに組み込んで保持します。 TCP 接続の場合、元のクライアント IP 情報は保持されません。
エンドクライアント・プロトコルの保存
IBM Cloud Load Balancer は、 ヘッダーの中に含めることで、クライアントがフロントエンドの と 接続で使用するオリジナルのプロトコルを保持する。 X-Forwarded-Proto
HTTP HTTP HTTPS ロードバランサーはTCPプロトコルが使われているとき、 Layer-7 トラフィックを見ないので、この動作はTCPプロトコルには当てはまらない。