Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 運用と操作


3.2.4 ノード間負荷バランス

OpenTP1は,サービス要求処理の負荷を分散して各ノードに振り分けています。

この負荷分散をノード間負荷バランスといいます。

〈この項の構成〉

(1) ノード間負荷バランス機能の前提条件

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

ノード間負荷バランス機能は,ノード間でユーザサーバの動作条件がほぼ同じであることを前提としています。選択されるノードによって次に示す条件が大きく異なる場合は,ノード間負荷バランス機能に不適当な環境ですので,同じ名前のサービスグループを複数のノードに配置しないでください。

  • 公衆回線の回線料金などの通信コスト

  • 回線速度

  • 回線品質

  • ノードの単体性能

(2) ノード間負荷バランス機能の運用形態

ノード間負荷バランス機能を使用する際の運用形態には,次の二つがあります。

サーバ側の判断でノード間負荷バランスを行う

サーバ側(TP1/Server Base)のスケジューラが,より負荷レベルの低いノードへ要求を転送し,処理を実行します。

サーバからの負荷情報を基にクライアント側の判断でノード間負荷バランスを行う

この形態では,クライアントとして使用しているプログラムによって処理が異なります。

  • クライアントにTP1/Client/PまたはTP1/Client/Wを使用

    クライアント側(TP1/Client/PまたはTP1/Client/W)は,サーバ側から得たサーバの負荷レベルの情報を基に,クライアント側でサービス要求を行うOpenTP1ノードを決めてからRPCを行います。

  • クライアントにTP1/Server Baseを使用

    クライアント側(TP1/Server Base)は,これから要求を出そうとしているサーバの負荷レベルをすでに知っているため,最初から負荷レベルの低いノードに対してRPCを行います。要求を受け取った時点で,スケジューラは負荷レベルの評価による転送はしないで,自ノードで要求を処理できる状態であれば自ノードで処理し,サーバが閉塞しているとき,および,自ノードのサーバの負荷レベルがLEVEL2で,他ノードに負荷レベルの低いサーバがあるときだけ,ほかのノードに対して処理要求を転送します。

ノード間負荷バランスを使用する場合は,次のように定義します。

表3‒6 ノード間負荷バランスを使用する場合の定義

ノード間負荷バランスの運用形態

種別

定義内容

サーバ側の判断で負荷分散を行う

サーバ

(TP1/Server Base)

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

  • set scd_this_node_first = N(デフォルト)

  • set scd_announce_server_status = Y(デフォルト)

クライアント

(TP1/Client/P,TP1/Client/W)

クライアント環境定義

  • dcscddirect = Y(TP1/Client/Pの場合)

  • dchostselect = Y(スケジュールの依頼をランダムに変更したい場合だけ)

クライアント側の判断で負荷分散を行う

(クライアントにTP1/Client/P,TP1/Client/Wを使用)

サーバ

(TP1/Server Base)

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

  • scd_this_node_first=N(デフォルト)

  • scd_announce_server_status=Y(デフォルト)

クライアント

(TP1/Client/P,TP1/Client/W)

クライアント環境定義

  • dccltloadbalance = Y

  • dccltcachetim = xx(秒)

クライアント側の判断で負荷分散を行う

(クライアントにTP1/Server Baseを使用)

サーバ

(TP1/Server Base)

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

  • scd_this_node_first=N(デフォルト)

  • scd_announce_server_status=Y(デフォルト)

クライアント

(TP1/Server Base)

(3) 負荷状態の参照

スケジュールサービス定義でscd_announce_server_status=Yを指定すると,OpenTP1は,30秒以上の任意の間隔でサーバの負荷状態をすべてのノードに通知します。OpenTP1は,サービス要求処理をサーバの負荷状態に応じたノードを選択してスケジュールします。

scd_announce_server_status=Nを指定した場合は,サーバの負荷状態はほかのノードに通知されません。したがって,OpenTP1はランダムにノードを選択してサーバをスケジュールします。

scd_announce_server_statusオペランドの指定は,分散環境を構成するすべてのノードで同じにしてください。指定が異なると,特定のノードに負荷が集中します。

次に示す両方の条件に該当する場合は,scd_announce_server_status=Nを指定してください。

この場合,ノード間負荷バランスをする必要はありません。したがって,そのほかのノードにサーバの負荷状態を通知する必要もありません。scd_announce_server_status=Yを指定すると,サーバの負荷状態を通知するために回線を使用します。サーバが一つのノードだけで起動されている場合は,そのすべてのノードでscd_announce_server_status=Nを指定して,サーバの負荷状態の通知を抑止してください。

(4) 自ノードの優先

ノード間負荷バランスでは,サーバが自ノードにあっても,必ず自ノードにスケジュールされるとは限りません。

要求されたサーバが自ノードにある場合に,自ノードのサーバを優先してスケジュールするときは,スケジュールサービス定義でscd_this_node_first=Yを指定してください。ただし,要求されたサーバが自ノードにない場合,自ノードのサーバが過負荷状態や閉塞状態などでスケジュールできない場合は,ほかのノードにスケジュールします。

ノード間の通信を少なくしたいシステムに有効です。

scd_announce_server_statusオペランドとscd_this_node_firstオペランドの組み合わせを次の表に示します。

表3‒7 scd_announce_server_statusとscd_this_node_firstオペランドの組み合わせ

オペランド

scd_announce_server_status

Y

N

scd_this_node_first

Y

サーバの負荷状態をほかのノードに通知します。負荷を考慮したノード間ロードバランスになりますが,自ノードにあるサーバが優先されます。

サーバの負荷状態をほかのノードに通知しません。ランダムに選択されたノードのサーバにスケジュールされます。自ノードにサーバがある場合で,スケジュールできるときは,自ノードにスケジュールされます。

N

サーバの負荷状態をほかのノードに通知します。負荷を考慮したノード間ロードバランスになります。スケジュール可能な負荷の低いサーバのノードにスケジュールされます。

サーバの負荷状態をほかのノードに通知しません。ランダムに選択されたノードのサーバにスケジュールされます。自ノードのサーバでも,自ノードにスケジュールされない場合があります。

(5) ノード間負荷バランスとほかの機能との組み合わせ

ノード間負荷バランスをほかの機能と組み合わせて使用する場合の動作を次の表に示します。

表3‒8 ノード間負荷バランスとほかの機能との組み合わせ

組み合わせる機能

ノード間負荷バランスの

使用形態

動作

TP1/Clientで常設コネクション

  • サーバ側の判断で負荷分散を行う

  • クライアント側の判断で負荷分散を行う(クライアントにTP1/Client/P,TP1/Client/Wを使用)

TP1/Server Base側のCUP実行プロセスが,常設コネクションを張ったノードでRPCを行うため,ノード間負荷バランスは,「クライアント側の判断で負荷分散を行う(クライアントにTP1/Server Baseを使用)」と同じ結果になります。

TP1/Clientでトランザクション制御API

  • サーバ側の判断で負荷分散を行う

  • クライアント側の判断で負荷分散を行う(クライアントにTP1/Client/P,TP1/Client/Wを使用)

TP1/Server Base側のトランザクショナルRPC実行プロセスがRPCを行うため,ノード間負荷バランスは,「クライアント側の判断で負荷分散を行う(クライアントにTP1/Server Baseを使用)」と同じ結果になります。

リモートAPI機能

  • サーバ側の判断で負荷分散を行う

  • クライアント側の判断で負荷分散を行う(クライアントにTP1/Client/P,TP1/Client/Wを使用)

  • クライアント側の判断で負荷分散を行う(クライアントにTP1/Server Baseを使用)

TP1/Server Base側のrapサーバが実際にRPCを行うため,ノード間負荷バランスは,「クライアント側の判断で負荷分散を行う(クライアントにTP1/Server Baseを使用)」と同じ結果になります。

(6) ノード間負荷バランスの拡張機能

ノード間の負荷を分散するための拡張機能として,次の指定ができます。