Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 クライアント使用の手引 TP1/Client/W,TP1/Client/P編


2.3.6 ノード間負荷バランス機能

OpenTP1では,RPCによる要求が特定のノードに集中しないようにノード間で負荷を分散する機能があります。これをノード間負荷バランス機能といいます。

ノード間負荷バランス機能を使用するためには,負荷分散の前提として次の条件を満たしている必要があります。

ここでは,OpenTP1のノード間負荷バランス機能を使用する場合のクライアント側,サーバ側の関連する定義と処理,およびRPCの処理の内容を説明します。

〈この項の構成〉

(1) サーバ側の判断で負荷分散を行う場合

TP1/Serverのスケジュールサービスは,サービス要求を各ノードに振り分けてノード間の負荷を分散しています。サービス要求を受け付けたノードのスケジュールサービスは,ノードのスケジュール状態に応じて,より効率的に処理できるノードへ負荷を分散させます。

(a) クライアント側の定義

クライアント環境定義

指定内容

DCSCDDIRECT

スケジュールサービスに負荷分散を依頼する場合,Yを指定します。

DCHOST

窓口となるTP1/Serverを指定します。この定義は,dc_clt_cltin_s関数の引数target_hostにNULLを指定した場合に有効です。

DCHOSTSELECT

窓口となるTP1/Serverをランダムに選択するかどうかを指定します。この定義は,窓口となるTP1/Serverを複数指定した場合に有効です。

DCSCDPORT

負荷分散を依頼するスケジュールサービスのポート番号を指定します。

指定がない場合,窓口となるTP1/Serverのネームサービスに,スケジュールサービスのポート番号を問い合わせます。

DCSCDLOADPRIORITY

Yを指定すると,負荷分散を依頼したノードが優先された負荷分散となります。

Nを指定すると,スケジュールサービス定義scd_this_node_firstの指定が有効となります。

(b) サーバ側の定義

スケジュールサービス定義

指定内容

scd_port

スケジュールサービスのポート番号を指定します。

クライアント環境定義DCSCDPORTを指定する場合,必須です。

scd_this_node_first

Yを指定すると,自ノードを優先してスケジュールします。

Nを指定すると,ランダムにスケジュールします。

クライアント環境定義DCSCDLOADPRIORITYにNを指定した場合に有効です。

scd_announce_server_status

Yを指定すると,自ノードのサービスの状態が他ノードに通知されるため,負荷を考慮したノード間の負荷バランスが取れます。

Nを指定すると,自ノードのサービスの状態が他ノードに通知されないため,負荷は考慮されません。

詳細についてはマニュアル「OpenTP1 システム定義」を参照してください。

(c) 注意事項

  • クライアント環境定義DCHOSTSELECTにYを指定した場合,通信先ホストをランダムに選択したにもかかわらず,サービス要求を受け付けたスケジュールサービスが,別のノードで起動しているスケジュールサービスへサービス要求を振り分けるため,オーバヘッドが掛かることがあります。このような現象を回避したい場合は,自ノードを優先した負荷分散をするようにしてください。

  • 自ノードを優先した負荷分散をした場合,あるノードのTP1/Serverが障害によって停止すると,そのTP1/Serverを窓口としていたTP1/Clientは,ホスト切り替え機能によって別のTP1/Serverに窓口ホストを切り替えます。詳細については,「2.3.12 窓口となるTP1/Serverの負荷分散」を参照してください。その後,停止したTP1/Serverが再起動しても,TP1/Clientは現時点で窓口となっているTP1/Serverを優先します。そのため,再起動したTP1/Serverの負荷が低い状態であっても,このTP1/Clientからのサービス要求が入りにくくなります。この現象は,再起動したTP1/Serverとして再び窓口となるTP1/Serverに割り当てられるまで続きます。

  • クライアント環境定義DCSCDPORTを指定する場合,窓口となるTP1/Serverに指定したすべてのホストで,DCSCDPORTに指定したポート番号でスケジュールサービスを起動する必要があります。ホスト切り替え機能によってホストが切り替わったとき,DCSCDPORTに指定したポート番号でスケジュールサービスが起動していないと,再びホストが切り替わります。

  • クライアント環境定義DCSCDPORTには,マルチスケジューラデーモンのポート番号(スケジュールサービス定義scdmulti -p指定値)を指定することもできます。

(2) サーバからの負荷情報からクライアント側で判断する場合

この機能を使用する場合は,次の定義を指定してください。

この指定によって,クライアント側で,サーバから得たサーバの負荷レベルを基に,サービス要求を行うOpenTP1ノードを決めてRPCを実行します。

この場合,クライアントでは窓口となるTP1/Serverのネームサービスにサービス情報を問い合わせたあと,サーバの負荷レベルを含むサービス情報を,クライアント環境定義DCCACHEで指定された大きさのキャッシュ領域に一時的に保持します。

クライアントからのRPC実行時に,このキャッシュ領域中に該当するサービス情報が存在する場合には,窓口となるTP1/Serverのネームサービスに対してサービス情報の問い合わせを行いません。

クライアントではLRU(Least Recently Used)方式でキャッシュを管理しているため,キャッシュ領域が不足した場合には参照されていないサービス情報から順に削除します。また,クライアント環境定義DCCLTCACHETIMに指定した有効時間が過ぎたサービス情報は,RPC実行時にキャッシュ領域から削除され,ネームサービスに対してサービス情報を問い合わせます。

クライアント環境定義DCCACHEの指定値を大きくすると,多くのサービス情報を格納でき,窓口となるTP1/Serverのネームサービスとの通信回数を削減できます。その反面,多くのキャッシュ領域中からサービス情報を検索するのでオーバヘッドが掛かります。

クライアント環境定義DCCACHEの指定値を小さくすると,キャッシュ領域に該当するSPPの各ノードのサービス情報が入りきらないことがあります。その場合は,クライアントから再度RPCを実行しても,キャッシュ領域に入りきらなかったノードのSPPに対してはRPC要求を実行しません。

クライアント環境定義DCCLTCACHETIMの指定値を小さくすると,古いサービス情報はただちに削除され,窓口となるTP1/Serverのネームサービスに新しいサービス情報を問い合わせます。この場合,常に最新のサービス情報をキャッシュ領域に保持できるため,サーバの負荷に応じてRPC要求を振り分けられます。その反面,ネームサービスとの通信回数が増え,また,キャッシュ領域の書き換え処理にもオーバヘッドが掛かります。

クライアント環境定義DCCLTCACHETIMの指定値を大きくすると,窓口となるTP1/Serverのネームサービスとの通信回数を削減できます。その反面,SPPの状態変化への対応が遅れるため,起動していないSPPに対してRPC要求を実行してしまうことがあります。この場合は,別のSPPに対してRPC要求を実行する前に,キャッシュ領域中の該当するサービス情報を削除し,窓口となるTP1/Serverのネームサービスに対して,該当するサービス情報の削除要求をします。

サーバが129以上のマルチノードサーバ構成で,窓口となるTP1/Serverでネームサービス定義に「nam_service_extend=1」を指定している場合,クライアント環境定義に「DCCLTNAMEXTEND=1」を指定してください。この定義の指定で,クライアントがネームサービスから一度に取得できるサービス情報の最大数を128個から512個に拡張できます。

(3) 負荷バランス機能と別の機能を組み合わせた場合の動作

負荷バランス機能と別の機能を組み合わせた場合の動作を,次の表に示します。

表2‒1 ノード間負荷バランス機能と別機能を組み合わせた場合の動作

組み合わせる機能

動作

クライアントで常設コネクションを使用した場合

サーバ側のCUP実行プロセスが,常設コネクションを張ったノードでRPCを行う

クライアントでトランザクション制御APIを使用した場合

サーバ側のトランザクション代理実行プロセスがRPCを行う

リモートAPI機能を使用した場合

サーバ側のrapサーバがRPCを行う