Cloud Pak for Data 内のDb2サービスへ接続できた4つの方法をご紹介しています。 使用頻度が高いと思われる順に記事を並べました。
ここでは Db2 NodePort サービスを使用して接続を作成します。
ROKS (Red Hat OpenShift Kubernetes Service)に 2つ Db2 デプロイメントを作成し、1つを Db2 サーバー1つをクライアントとみなして、Db2 NodePort サービスを使用してDb2 サーバー上のデータベースに接続します。
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 の Secure Sockets Layer (SSL) インスタンスのポート番号(db2_ssl_port)
- 証明書ファイル 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]$
確かに接続できました。
参考文書は次のようなものになります。
- db2cli - Db2 interactive CLI command
- SERVER_ENCRYPT authentication in CLPPlus
- Testing the CLI connectivity with the database
おわりに
ここでは コマンドでDb2 NodePort サービスを使用するための接続情報を入手してデータベースへの接続を作成しました。
実施環境
- IBM Cloud VPC Gen2
- OCP 4.10.32
- CP4D 4.5.3
- Db2 Version 11.5.7.0-cn7