Cloud Pak for Data 内のDb2サービスへ接続できた4つの方法をご紹介しています。 使用頻度が高いと思われる順に記事を並べました。
ここでは ClusterIP サービスを使用して接続を作成します。
ROKS (Red Hat OpenShift Kubernetes Service)に 2つ Db2 デプロイメントを作成し、1つを Db2 サーバー1つをクライアントとみなして、ClusterIP サービスを使用してDb2 サーバー上のデータベースに接続します。
Db2のClusterIP サービスを使用するための接続情報をコマンドで入手し、Db2データベースへの接続テストができるDb2Jccを利用して接続を確認しました。
ClusterIP サービスの接続情報を得る
著者は Db2 on Cloud Pak for Dataの ClusterIPサービスに関する情報はまだ見ていないのですが、oc get svc
で確認すると c-db2oltp-xxxxxxxx-db2u というようなClusterIPサービスでデータベースに接続可能なようです。
接続に成功した方法をご紹介します。
Cloud Pak for Data 内の 接続したいDb2 サービス (Db2 デプロイメント ID) を db2ucluster変数に登録します。 Db2 がデプロイされている OpenShift プロジェクトは zen です。
[user99@bastion7 ~]$ db2ucluster=db2oltp-1668582373852911
[user99@bastion7 ~]$ echo ${db2ucluster}
db2oltp-1668582373852911
[user99@bastion7 ~]$
作業するOpenShift プロジェクトを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 ~]$
Cluster IPサービス
oc get svc
で ClusterIP サービスを確認すると c-${db2ucluster}-db2u (c-db2oltp-1668582373852911-db2u) でデータベースに接続可能なようです。
# 実行コマンド
oc get service -o wide c-${db2ucluster}-db2u
# 実行結果例
[user99@bastion7 ~]$ oc get service -o wide c-${db2ucluster}-db2u
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
c-db2oltp-1668582373852911-db2u ClusterIP 172.21.250.18 <none> 50000/TCP,50001/TCP,25000/TCP,25001/TCP,25002/TCP,25003/TCP,25004/TCP,25005/TCP 8d app=db2oltp-1668582373852911,component=db2oltp,formation_id=db2oltp-1668582373852911,role=db,type=engine
[user99@bastion7 ~]$
ClusterIP サービスで使用するポートを取得します。
非 SSL ポート取得
非 SSL ポート情報はClusterIPサービス c-${db2ucluster}-db2u にdb2-server
として登録されています。
次の結果から 非 SSL ポートは 50000
になります。
# 実行コマンド
oc get svc c-${db2ucluster}-db2u -o jsonpath='{.spec.ports[?(@.name=="db2-server")].port}{"\n"}'
# 実行結果例
[user99@bastion7 ~]$ oc get svc c-${db2ucluster}-db2u -o jsonpath='{.spec.ports[?(@.name=="db2-server")].port}{"\n"}'
50000
[user99@bastion7 ~]$
SSL ポート取得
SSL ポートも確認しておきましょう。 SSL ポート情報はDb2 NodePortサービス(c-${db2ucluster}-db2u-engn-svc)にdb2-ssl-server
として登録されています。
# 実行コマンド
oc get svc c-${db2ucluster}-db2u -o jsonpath='{.spec.ports[?(@.name=="db2-ssl-server")].port}{"\n"}'
# 実行結果例
[user99@bastion7 ~]$ oc get svc c-${db2ucluster}-db2u -o jsonpath='{.spec.ports[?(@.name=="db2-ssl-server")].port}{"\n"}'
50001
[user99@bastion7 ~]$
Db2 Pod
Db2 Podは c-${db2ucluster}-db2u-0 ( c-db2oltp-1668505262111014-db2u-0 )となります。
[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サービスリソース情報 | 値 |
---|---|
OpenShift プロジェクト | zen |
Db2uCluster カスタム・リソース | ${db2ucluster} |
Db2 Pod | c-${db2ucluster}-db2u-0 |
Db2 インスタンスユーザー | db2inst1 |
Db2 ClusterIPサービス | c-${db2ucluster}-db2u |
取得した接続情報
接続情報 | 値 | |
---|---|---|
host_name_or_IP_address | c-${db2ucluster}-db2u | ClusterIP サービス |
Database_name | BLUDB | Db2 データベース |
db2-server | 50000 | Db2 インスタンスのポート番号 |
db2-ssl-server | 50001 | Db2 の Secure Sockets Layer (SSL) インスタンスのポート番号。 |
Db2Jccを利用して接続を確認する
ここでは Cloud Pak for Data にもう一つDb2サービスをデプロイして その中でJDBCアプリケーションを使用して接続を確認します。
Db2サービスなので 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 ポート50000を使用して接続する場合 接続文字列は jdbc:db2://c-${db2ucluster}-db2u:50000/BLUDB
となります。
Db2Jccを実行します。
# 実行コマンド
db2ucluster=db2oltp-1668582373852911
java com.ibm.db2.jcc.DB2Jcc \
-url "jdbc:db2://c-${db2ucluster}-db2u:50000/BLUDB" \
-user user02 -password xxxxx \
-version
# 実行結果
[db2uadm@c-db2oltp-1668505262111014-db2u-0 ~]$ java com.ibm.db2.jcc.DB2Jcc \
> -url "jdbc:db2://c-${db2ucluster}-db2u:50000/BLUDB" \
> -user user02 -password xxxxx \
> -version
[jcc][10521][13706]Command : java com.ibm.db2.jcc.DB2Jcc -url jdbc:db2://c-db2oltp-1668582373852911-db2u:50000/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://172.21.250.18:50000/BLUDB
DB Drivername = IBM Data Server Driver for JDBC and SQLJ
DB OS Name = Linux
[db2uadm@c-db2oltp-1668505262111014-db2u-0 ~]$
接続できました。
おわりに
ここでは コマンドでDbのClusterIP サービスを使用するための接続情報を入手し、Db2データベースへの接続テストができるDb2Jccを利用して接続を確認しました。
Db2 on Cloud Pak for Data のドキュメントで ClusterIP サービスに関する記述はみつけていません。
実施環境
- IBM Cloud VPC Gen2
- OCP 4.10.32
- CP4D 4.5.3
- Db2 Version 11.5.7.0-cn7