2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Db2 on CP4Dへの接続 - NodePort サービスを使用して接続する

Last updated at Posted at 2022-11-24

Cloud Pak for Data 内のDb2サービスへ接続できた4つの方法をご紹介しています。 使用頻度が高いと思われる順に記事を並べました。

  1. "データベース詳細"を使用して"プラットフォーム接続"を作成する
  2. NodePort サービスを使用して接続する
  3. ClusterIP サービスを使用して接続する
  4. Db2 Podに直接接続する

ここでは Db2 NodePort サービスを使用して接続を作成します。
ROKS (Red Hat OpenShift Kubernetes Service)に 2つ Db2 デプロイメントを作成し、1つを Db2 サーバー1つをクライアントとみなして、Db2 NodePort サービスを使用してDb2 サーバー上のデータベースに接続します。

image.png

Db2 NodePort サービスの接続情報を得る

Db2サービスへの接続情報は Cloud Pak for Data コンソールの"データベース詳細"から入手できます。

ここでは あえてコマンドでDb2サービスへの接続情報を入手しています。
事前準備として 作業するOpenShiftクラスターにoc loginしておきましょう。
Cloud Pak for Data 内の 接続したいDb2 サービス (Db2 デプロイメント ID) を db2ucluster変数に登録します。 Db2 がデプロイされている OpenShift プロジェクトは zen です。

[user99@bastion7 ~]$ db2ucluster=db2oltp-1668582373852911
[user99@bastion7 ~]$ echo ${db2ucluster}
db2oltp-1668582373852911
[user99@bastion7 ~]$

プロジェクトをzenに切り替え 確認のため Db2uCluster カスタム・リソースをリストします。

# 実行コマンド
oc get db2ucluster $db2ucluster

# 実行結果例
[user99@bastion7 ~]$ oc project zen
Already on project "zen" on server "https://c101-e.jp-osa.containers.cloud.ibm.com:32291".
[user99@bastion7 ~]$ oc get db2ucluster $db2ucluster
NAME                       STATE   MAINTENANCESTATE   AGE
db2oltp-1668582373852911   Ready   None               7d16h
[user99@bastion7 ~]$

NODE

Db2 Podは c-${db2ucluster}-db2u-0 ( c-db2oltp-1668505262111014-db2u-0 )となります。
ここで このPodがNODE 10.248.64.30にあることを確認します。

[user99@bastion7 ~]$ oc get pod c-${db2ucluster}-db2u-0 -o wide
NAME                                READY   STATUS    RESTARTS   AGE     IP              NODE           NOMINATED NODE   READINESS GATES
c-db2oltp-1668582373852911-db2u-0   1/1     Running   0          2d11h   172.17.49.247   10.248.64.30   <none>           <none>
[user99@bastion7 ~]$

データベース名 : BLUDB

Db2 Pod に入ってDb2 インスタンスユーザー db2inst1に切り替えデータベース名を確認します。
データベース名は BLUDBです。

[user99@bastion7 ~]$ oc exec -it c-${db2ucluster}-db2u-0 -- bash
Defaulted container "db2u" out of: db2u, init-labels (init), init-kernel (init)
[db2uadm@c-db2oltp-1668582373852911-db2u-0 /]$ su - db2inst1
Last login: Wed Nov 23 23:28:40 UTC 2022
[db2inst1@c-db2oltp-1668582373852911-db2u-0 - Db2U db2inst1]$ db2 list db directory

 System Database Directory

 Number of entries in the directory = 1

Database 1 entry:

 Database alias                       = BLUDB
 Database name                        = BLUDB
 Local database directory             = /mnt/blumeta0/db2/databases
 Database release level               = 15.00
 Comment                              =
 Directory entry type                 = Indirect
 Catalog database partition number    = 0
 Alternate server hostname            =
 Alternate server port number         =

[db2inst1@c-db2oltp-1668582373852911-db2u-0 - Db2U db2inst1]$

Db2 NodePortサービス 

c-${db2ucluster}-db2u-engn-svc (c-db2oltp-1667551495166538-db2u-engn-svc) が Db2 on Cloud Pak for Data が提供するDb2 NodePortサービスです。

# 実行コマンド
oc get service -o wide c-${db2ucluster}-db2u-engn-svc

# 実行結果例
[user99@bastion7 ~]$ oc get service -o wide c-${db2ucluster}-db2u-engn-svc
NAME                                       TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                           AGE     SELECTOR
c-db2oltp-1668582373852911-db2u-engn-svc   NodePort   172.21.148.93   <none>        50000:31279/TCP,50001:31138/TCP   7d16h   app=db2oltp-1668582373852911,component=db2oltp,formation_id=db2oltp-1668582373852911,role=db,type=engine
[user99@bastion7 ~]$

Db2 NodePortサービスで使用するポートを取得します。 各Db2デプロイメントで割り当てられているポートの値は異なるので、異なるDb2デプロイメントへ接続するときはするときは必ず確認するようにします。

非 SSL ポート取得 

非 SSL ポート情報はDb2 NodePortサービス(c-${db2ucluster}-db2u-engn-svc)にlegacy-serverとして登録されています。
次の結果から 非 SSL ポートは この環境では31279になります。

# 実行コマンド
oc get svc c-${db2ucluster}-db2u-engn-svc -o jsonpath='{.spec.ports[?(@.name=="legacy-server")].nodePort}{"\n"}'

# 実行結果例
[user99@bastion7 ~]$ oc get svc c-${db2ucluster}-db2u-engn-svc -o jsonpath='{.spec.ports[?(@.name=="legacy-server")].nodePort}{"\n"}'
31279
[user99@bastion7 ~]$

SSL ポート取得 

SSL ポートも確認しておきましょう。 SSL ポート情報はDb2 NodePortサービス(c-${db2ucluster}-db2u-engn-svc)にssl-serverとして登録されています。
次の結果から SSL ポートは この環境では31138になります。

# 実行コマンド
oc get svc c-${db2ucluster}-db2u-engn-svc -o jsonpath='{.spec.ports[?(@.name=="ssl-server")].nodePort}{"\n"}'

# 実行結果例
[user99@bastion7 ~]$ oc get svc c-${db2ucluster}-db2u-engn-svc -o jsonpath='{.spec.ports[?(@.name=="ssl-server")].nodePort}{"\n"}'
31138
[user99@bastion7 ~]$

接続情報のまとめ

接続情報取得のためのリソース情報

Db2サービスリソース情報
OpenShift プロジェクト zen
Db2uCluster カスタム・リソース ${db2ucluster}
Db2 Pod c-${db2ucluster}-db2u-0
Db2 インスタンスユーザー db2inst1
Db2 NodePortサービス  c-${db2ucluster}-db2u-engn-svc

取得した接続情報

接続情報  
host_name_or_IP_address 10.248.64.33 Cloud Pak for Dataインスタンスのホスト名または IP アドレス。
Database_name BLUDB Db2 データベース
db2_port 31279 Db2 インスタンスのポート番号
db2_ssl_port 31138 Db2 の Secure Sockets Layer (SSL) インスタンスのポート番号。
  • SSL接続用の証明書ファイルは "データベース詳細"からダウンロードしておきましょう。

Db2 データベースをカタログして接続する。

ここでは Cloud Pak for Data にもう一つDb2サービスをデプロイして Db2クライアントとして使用します。
今回 Db2 Clientとして使用する Db2のPodは c-db2oltp-1668505262111014-db2u-0 です。
Db2 Client Podに入ってDb2 インスタンスユーザー db2inst1に切り替えておきます。

[user99@bastion7 ~]$ oc exec -it c-db2oltp-1668505262111014-db2u-0 -- bash
Defaulted container "db2u" out of: db2u, init-labels (init), init-kernel (init)
[db2uadm@c-db2oltp-1668505262111014-db2u-0 /]$ su - db2inst1
Last login: Thu Nov 24 00:34:59 UTC 2022
[db2inst1@c-db2oltp-1668505262111014-db2u-0 - Db2U db2inst1]$

次の値を使用して Dbサーバー上にあるデータベース BLUDBに接続します。

設定項目
database_alias_name bludbsvc リモート Db2 データベースのエイリアス名
Server_alias_name db2svc Db2 インスタンスのリモート・サーバーのエイリアス
authentication_method ユーザー名とパスワード – SERVER_ENCRYPT リモート・データベースに接続するための認証方式:

Catalog TCP/IP Node

今回はdb2_port(非SSL Port)を使用して Nodeをカタログします。

# 実行コマンド
db2 catalog tcpip node server_alias_name remote host_name_or_IP_address server db2_port

# 本環境での実行コマンド
db2 catalog tcpip node db2svc remote 10.248.64.33 server 31279

# 実行結果
[db2inst1@c-db2oltp-1668505262111014-db2u-0 - Db2U db2inst1]$ db2 catalog tcpip node db2svc remote 10.248.64.33 server 31279
DB20000I  The CATALOG TCPIP NODE command completed successfully.
DB21056W  Directory changes may not be effective until the directory cache is
refreshed.
[db2inst1@c-db2oltp-1668505262111014-db2u-0 - Db2U db2inst1]$ db2 terminate
DB20000I  The TERMINATE command completed successfully.[db2inst1@c-db2oltp-1668505262111014-db2u-0 - Db2U db2inst1]$ db2 list node directory

 Node Directory

 Number of entries in the directory = 1

Node 1 entry:

 Node name                      = DB2SVC
 Comment                        =
 Directory entry type           = LOCAL
 Protocol                       = TCPIP
 Hostname                       = 10.248.64.33
 Service name                   = 31279

[db2inst1@c-db2oltp-1668505262111014-db2u-0 - Db2U db2inst1]$

Catalog Database

# 実行コマンド
db2 catalog db database_name as database_alias_name at node server_alias_name authentication authentication_method

# 本環境での実行コマンド
db2 catalog db BLUDB as bludbsvc at node DB2SVC authentication SERVER_ENCRYPT

# 実行結果
[db2inst1@c-db2oltp-1668505262111014-db2u-0 - Db2U db2inst1]$ db2 catalog db BLUDB as bludbsvc at node DB2SVC authentication SERVER_ENCRYPT
DB20000I  The CATALOG DATABASE command completed successfully.
DB21056W  Directory changes may not be effective until the directory cache is
refreshed.
[db2inst1@c-db2oltp-1668505262111014-db2u-0 - Db2U db2inst1]$ db2 terminate
DB20000I  The TERMINATE command completed successfully.[db2inst1@c-db2oltp-1668505262111014-db2u-0 - Db2U db2inst1]$ db2 list db directory

 System Database Directory

 Number of entries in the directory = 2
(省略)

Database 2 entry:

 Database alias                       = BLUDBSVC
 Database name                        = BLUDB
 Node name                            = DB2SVC
 Database release level               = 15.00
 Comment                              =
 Directory entry type                 = Remote
 Authentication                       = SERVER_ENCRYPT
 Catalog database partition number    = -1
 Alternate server hostname            =
 Alternate server port number         =

[db2inst1@c-db2oltp-1668505262111014-db2u-0 - Db2U db2inst1]$

データベースへ接続

ユーザーIDとパスワードを指定して データベースに接続します。

[db2inst1@c-db2oltp-1668505262111014-db2u-0 - Db2U db2inst1]$ db2 connect to BLUDBSVC user user02 using xxxxxx

   Database Connection Information

 Database server        = DB2/LINUXX8664 11.5.7.0
 SQL authorization ID   = USER02
 Local database alias   = BLUDBSVC

[db2inst1@c-db2oltp-1668505262111014-db2u-0 - Db2U db2inst1]$

接続できました。

JDBC接続

クライアントとして利用したDb2 PodからJDBC接続を行ってみましょう。
Db2サービスなので Podには JavaやIBM Data Server Driver for JDBC and SQLJが導入されています。
Db2データベースへの接続テストができるDb2Jccを利用して接続を確認します。

今回 Db2 Clientとして使用する Db2のPod c-db2oltp-1668505262111014-db2u-0 に入ります。

[user99@bastion7 ~]$ oc exec -it c-db2oltp-1668505262111014-db2u-0 -- bash
Defaulted container "db2u" out of: db2u, init-labels (init), init-kernel (init)
[db2uadm@c-db2oltp-1668505262111014-db2u-0 /]$ 

PATH, CLASSPATHを設定します。

DB2JDBCPATH=/mnt/bludata0/home/db2inst1/sqllib/java
export PATH=${PATH}:.:${DB2JDBCPATH}/jdk64/bin
export CLASSPATH=${DB2JDBCPATH}/db2java.zip:${DB2JDBCPATH}/sqlj.zip:${DB2JDBCPATH}/db2jcc_license_cu.jar:${DB2JDBCPATH}/db2jcc4.jar:.

非 SSL ポートを使用して接続する場合

基本の接続文字列は 非 SSL ポートで接続する場合  jdbc:db2://<host_name_or_IP_address>:<db2_port>/<Database_name> この環境では jdbc:db2://10.248.64.33:31279/BLUDB となります。

Db2Jccで接続確認を行ってみましょう。

# 実行コマンド
java com.ibm.db2.jcc.DB2Jcc \
-url "jdbc:db2://10.248.64.33:31279/BLUDB" \
-user user02 -password xxxxx \
-version

# 実行結果
[db2uadm@c-db2oltp-1668505262111014-db2u-0 ~]$ java com.ibm.db2.jcc.DB2Jcc \
> -url "jdbc:db2://10.248.64.33:31279/BLUDB" \
> -user user02 -password xxxxx \
> -version


[jcc][10521][13706]Command : java com.ibm.db2.jcc.DB2Jcc -url jdbc:db2://10.248.64.33:31279/BLUDB -user user02 -password ******** -version


IBM Data Server Driver for JDBC and SQLJ 4.31.10
[jcc][10516][13709]Test Connection Successful.

DB product version = SQL110570
DB product name = DB2/LINUXX8664
DB URL = jdbc:db2://10.248.64.33:31279/BLUDB
DB Drivername = IBM Data Server Driver for JDBC and SQLJ
DB OS Name = Linux
[db2uadm@c-db2oltp-1668505262111014-db2u-0 ~]$

SSL ポートを使用して接続する場合

セキュリティーの要件で接続プロパティーを追加します。例えばこの環境で

  • SSL接続 sslConnection=true
    • Db2 の Secure Sockets Layer (SSL) インスタンスのポート番号(db2_ssl_port) 31138を使用
  • 証明書ファイル db2-ssl.cert sslCertLocation=db2-ssl.cert
    • "データベース詳細"からダウンロードして現行ディレクトリーに保管
  • 暗号化されたユーザー ID およびパスワード securityMechanism=9
  • 256 ビット AES 暗号化 encryptionAlgorithm=2
    を接続文字列に追加すると次のようになります。
jdbc:db2://10.248.64.33:31138/BLUDB:sslConnection=true;sslCertLocation=db2-ssl.cert;encryptionAlgorithm=2;securityMechanism=9;

Db2Jccで接続確認を行ってみましょう。

# 実行コマンド
java com.ibm.db2.jcc.DB2Jcc \
-url "jdbc:db2://10.248.64.33:31138/BLUDB:sslConnection=true;sslCertLocation=db2-ssl.cert;encryptionAlgorithm=2;securityMechanism=9;" \
-user user02 -password isel4you \
-version

# 実行結果例
[db2uadm@c-db2oltp-1668505262111014-db2u-0 ~]$ java com.ibm.db2.jcc.DB2Jcc \
> -url "jdbc:db2://10.248.64.33:31138/BLUDB:sslConnection=true;sslCertLocation=db2-ssl.cert;encryptionAlgorithm=2;securityMechanism=9;" \
> -user user02 -password isel4you \
> -version


[jcc][10521][13706]Command : java com.ibm.db2.jcc.DB2Jcc -url jdbc:db2://10.248.64.33:31138/BLUDB:sslConnection=true;sslCertLocation=db2-ssl.cert;encryptionAlgorithm=2;securityMechanism=9; -user user02 -password ******** -version


IBM Data Server Driver for JDBC and SQLJ 4.31.10
[jcc][10516][13709]Test Connection Successful.

DB product version = SQL110570
DB product name = DB2/LINUXX8664
DB URL = jdbc:db2://10.248.64.33:31138/BLUDB
DB Drivername = IBM Data Server Driver for JDBC and SQLJ
DB OS Name = Linux
[db2uadm@c-db2oltp-1668505262111014-db2u-0 ~]$

db2dsdriver.cfgでSSL接続を構成する。

次は SSL接続を構成したdb2dsdriver.cfgを作成し データベースに接続してみましょう。

SSL接続のためのdb2dsdriver.cfgを作成する。

ここでも Cloud Pak for Data にデプロイしたDb2サービスを Db2クライアントとして使用します。
今回 Db2 Clientとして使用する Db2のPodは c-db2oltp-1668505262111014-db2u-0 です。

Db2 Client Podに入ってDb2 インスタンスユーザー db2inst1に切り替えておきます。

[user99@bastion7 ~]$ oc exec -it c-db2oltp-1668505262111014-db2u-0 -- bash
Defaulted container "db2u" out of: db2u, init-labels (init), init-kernel (init)
[db2uadm@c-db2oltp-1668505262111014-db2u-0 /]$ su - db2inst1
Last login: Thu Nov 24 00:34:59 UTC 2022
[db2inst1@c-db2oltp-1668505262111014-db2u-0 - Db2U db2inst1]$

db2cli を使用してdb2dsdriver.cfgを作成することができます。

# 実行コマンド例
#- db2cli writecfg add -database <Database_name> -host <host_name_or_IP_address> -port <db2_ssl_port> 
db2cli writecfg add -database BLUDB -host 10.248.64.33 -port 31138 

#- db2cli writecfg add -dsn <Database_alias>  -database <Database_name> -host <host_name_or_IP_address> -port <db2_ssl_port>
db2cli writecfg add -dsn BLUDBDSN  -database BLUDB -host 10.248.64.33 -port 31138

#- db2cli writecfg add -database BLUDB -host <host_name_or_IP_address> -port <db2_ssl_port> -parameter "<parameter>"
#-- Authentication 設定
db2cli writecfg add -database BLUDB -host 10.248.64.33 -port 31138 -parameter "Authentication=SERVER_ENCRYPT"
#-- SSLを使用する
db2cli writecfg add -database BLUDB -host 10.248.64.33 -port 31138 -parameter "SecurityTransportMode=SSL"
#-- SSL接続用の証明書ファイルを指定。完全パスファイル名で指定する。
db2cli writecfg add -database BLUDB -host 10.248.64.33 -port 31138 -parameter "SSLServerCertificate=/mnt/blumeta0/home/db2inst1/ssl/db2-ssl.cert" 

上に示したコマンドを実行して得られるdb2dsdriver.cfg($HOME/sqllib/cfg/db2dsdriver.cfg)が次です。

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<configuration>
  <databases>
    <database host="10.248.64.33" name="BLUDB" port="31138">
      <parameter name="Authentication" value="SERVER_ENCRYPT"/>
      <parameter name="SecurityTransportMode" value="SSL"/>
      <parameter name="SSLServerCertificate" value="/mnt/blumeta0/home/db2inst1/ssl/db2-ssl.cert"/>
    </database>
  </databases>

  <dsncollection>
    <dsn alias="BLUDBDSN" host="10.248.64.33" name="BLUDB" port="31138"/>
  </dsncollection>



</configuration>

db2cliを使ってデータベース接続

db2cli を使用してデータベースへのSSL接続を検証します。

# 実行コマンド
db2cli validate -dsn <Database_alias> -connect -user <userid> -passwd <password>


# 実行結果
[db2inst1@c-db2oltp-1668505262111014-db2u-0 - Db2U db2inst1]$ db2cli validate -dsn BLUDBDSN -connect -user user02 -passwd xxxxx

===============================================================================
Client information for the current copy:
===============================================================================

Client Package Type       : IBM DB2 Enterprise Server Edition
Client Version (level/bit): DB2 v11.5.7.0 (s2209070818/64-bit)
Client Platform           : Linux/X8664
Install/Instance Path     : /opt/ibm/db2/V11.5.0.0
DB2DSDRIVER_CFG_PATH value: <not-set>
db2dsdriver.cfg Path      : /mnt/blumeta0/home/db2inst1/sqllib/cfg/db2dsdriver.cfg
DB2CLIINIPATH value       : <not-set>
db2cli.ini Path           : /mnt/blumeta0/home/db2inst1/sqllib/cfg/db2cli.ini
db2diag.log Path          : /mnt/blumeta0/db2/log/NODE0000/db2diag.log

===============================================================================
db2dsdriver.cfg schema validation for the entire file:
===============================================================================

Success: The system db2dsdriver.cfg schema validation completed successfully without any errors.

===============================================================================
db2cli.ini validation for data source name "BLUDBDSN":
===============================================================================

Note: The validation utility could not find the configuration file db2cli.ini.
The file is searched at "/mnt/blumeta0/home/db2inst1/sqllib/cfg/db2cli.ini".

===============================================================================
db2dsdriver.cfg validation for data source name "BLUDBDSN":
===============================================================================

[ Parameters used for the connection ]

Keywords                  Valid For     Value
---------------------------------------------------------------------------
DATABASE                  CLI,.NET,ESQL BLUDB
HOSTNAME                  CLI,.NET,ESQL 10.248.64.33
PORT                      CLI,.NET,ESQL 31138
AUTHENTICATION            CLI,.NET      SERVER_ENCRYPT
SECURITYTRANSPORTMODE     CLI,.NET,ESQL SSL
SSLSERVERCERTIFICATE      CLI,.NET,ESQL /mnt/blumeta0/home/db2inst1/ssl/db2-ssl.cert

===============================================================================
Connection attempt for data source name "BLUDBDSN":
===============================================================================

[SUCCESS]

===============================================================================
The validation is completed.
===============================================================================

[db2inst1@c-db2oltp-1668505262111014-db2u-0 - Db2U db2inst1]$

接続できました。

db2clpを使ってデータベース接続 (2022/11/30 追記)

db2dsdriver.cfgの構成をdb2clpで使えると 読者の方からコメントいただきました。やってみました。

[db2inst1@c-db2oltp-1668505262111014-db2u-0 - Db2U db2inst1]$ db2 connect to BLUDBDSN user user02 using xxxxx

   Database Connection Information

 Database server        = DB2/LINUXX8664 11.5.7.0
 SQL authorization ID   = USER02
 Local database alias   = BLUDB

[db2inst1@c-db2oltp-1668505262111014-db2u-0 - Db2U db2inst1]$

確かに接続できました。

参考文書は次のようなものになります。

おわりに

ここでは コマンドでDb2 NodePort サービスを使用するための接続情報を入手してデータベースへの接続を作成しました。

実施環境

  • IBM Cloud VPC Gen2
  • OCP 4.10.32
  • CP4D 4.5.3
    • Db2 Version 11.5.7.0-cn7

参照文献 (まとめ)

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?