Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 解説


8.6.4 Serviceの作成

コンテナ内のOpenTP1と通信する場合は,Pod間のRPC通信であってもServiceを作成する必要があります。RPC送信元は,Serviceが受付可能なIPアドレス,ポート番号を設定してコネクションを確立します。

ほかのOpenTP1からのコネクション接続を受け付けるポート番号に応じて,Serviceを作成してください。

Serviceの作成方法の詳細は,取扱説明書を参照してください。

〈この項の構成〉

(1) 必要なポート数の計算

TP1/Server Baseが使用するポートには,サービス応答で使用するエフェメラルポート(短命ポート)と,スケジューラサービスなどのシステムプロセスが使用するユーザ指定ポートがあります。

サービス応答で使用するエフェメラルポートについては,次に示す計算式で求める必要があります。

(a) ネームサービスおよびスケジューラダイレクトを使用したRPC

コンテナ内のTP1/Server Baseがサービス応答を受信するためのポート番号には,エフェメラルポートを使用します。

次の計算式で,コンテナ内のTP1/Server Baseに必要なポート数を算出してください。

なお,非応答型のRPCを発行する場合は,エフェメラルポート数の算出とServiceの作成は不要です。

必要なポート数(サービス応答受信用のポート数)
=(プロセスサービス定義のprc_process_countオペランドに設定した値 + 128)×1.5
注※

安全係数。1.5〜2.0を推奨します。システムに応じて調整してください。

SUPや,非常駐プロセスなど,サービス応答受信用ポート数は,高負荷などの条件によって必要なポート数が計算式よりも多くなる場合があります。Service作成後,十分なテストを実施してください。

TP1/Server Baseが使用するサービス応答受信用ポート数が,Serviceから公開するポート数を上回った場合,該当するサービス応答でクライアント,サーバ双方にエラーとなることがあります。

(2) RPCで使用するポートのマッピング

Serviceを作成し,OpenTP1が使用するエフェメラルポートやユーザ指定ポートとServiceから公開するポートをマッピングしてください。

(a) ネームサービスおよびスケジューラダイレクトを使用したRPC(コンテナ内のTP1/Server BaseからTP1/Server BaseへのRPC)

8.6.4(1) 必要なポート数の計算」で求めた必要なポート数分のポート名をServiceマニフェストに作成し,Serviceの受信ポート番号とコンテナから公開するTP1/Server Baseのポート番号をマッピングしてください。ポート番号を設定するServiceマニフェストのフィールドについては,「8.5 システム構成と環境設定」中のServiceの説明を参照してください。

システム共通定義にrpc_port_baseオペランドを設定している場合,Serviceの受信ポート番号の設定値は,rpc_port_baseオペランド設定値を基準に,必要な数のポート番号をマッピングしてください。

(b) スケジューラダイレクトを使用したRPC(コンテナ内のTP1/Server BaseへのRPC)

スケジュールサービス定義のscd_portオペランド,scdmulti定義コマンドの-pオプションに設定したポート数分のServiceを作成してください。

(c) リモートAPI機能を使用したRPC(コンテナ内のTP1/Server BaseへのRPC)

rapリスナーサービス定義のrap_listen_portオペランドに設定するポート数分のServiceを作成してください。

(d) TP1/Client/JのRPC応答

コンテナ内のTP1/Client/Jがサービス応答を受信する場合,TP1/Client/J環境定義のdccltcuprcvportオペランドに設定したポート数分のServiceを作成してください。

(例)rpc_port_baseオペランドの設定値が30000,必要なポート数が200個の場合
<service-sample1.yaml>
apiVersion: v1
kind: Service 
metadata:
  name: service-sample1
:<略>
 spec:
  ports:
  - name: "tp1-port001"・・ポート名
     protocol: TCP"
     port: 30000
     nodePort: 30000
     targetPort: 30000
  - name: "tp1-port002"・・ポート名
     protocol: TCP"
     port: 30001
     nodePort: 30001
     targetPort: 30001
     :
   :<中略>
  - name: "tp1-port099"・・ポート名
     protocol: TCP"
     port: 30098
      nodePort: 30098
     targetPort: 30098
  - name: "tp1-port100"・・ポート名
     protocol: TCP"
     port: 30099
     nodePort: 30099
     targetPort: 30099
  - name: "tp1-port101"・・ポート名
     protocol: TCP"
     port: 30100
     nodePort: 30100
     targetPort: 30100
  - name: "tp1-port102"・・ポート名
     protocol: TCP"
     port: 30101
     nodePort: 30101
     targetPort: 30101
  - name: "tp1-port103"・・ポート名
     protocol: TCP"
     port: 30102
     nodePort: 30102
     targetPort: 30102
     :
   :<中略>
  - name: "tp1-port199"・・ポート名
     protocol: TCP"
     port: 30198
     nodePort: 30198
     targetPort: 30198
  - name: "tp1-port200"・・ポート名
     protocol: TCP"
     port: 30199
     nodePort: 30199
     targetPort: 30199

  • spec.ports.nodePort,spec.ports.port:Serviceの受信ポート番号

  • spec.ports.targetPort:OpenTP1が使用するエフェメラルポートやユーザ指定ポート

注意事項

Kubernetesクラスタ内でTP1/Server Baseが起動するPodを複数起動する場合は,PodごとにServiceの作成が必要になります。Serviceマニフェストに設定するポート番号が,ほかのPodで作成するServiceマニフェストのポート番号と重複する場合は,Serviceの作成に失敗するため,重複しないように調整してください。

(例)dccltcuprcvportオペランドの設定値が30000の場合
<service-sample3.yaml>
apiVersion: v1
kind: Service 
metadata:
  name: service-sample3
:<略>
 spec:
  ports:
  - name: "tp1clt-port"・・ポート名
     protocol: TCP"
     port: 30000
     nodePort: 30000
     targetPort: 30000

  • spec.ports.nodePort,spec.ports.port:Serviceの受信ポート番号

  • spec.ports.targetPort:TP1/Client/J環境定義のdccltcuprcvportオペランドに設定したポート番号