[英]How do I connect to an IBM Db2 Event Store instance from a remote Db2 instance?
我有一个 Db2 实例,我正在尝试将它连接到远程 IBM Db2 Event Store 集群。 我已经能够连接 Db2 CLP 客户端,是否可以让 Db2 实例查看 Db2 事件存储集群中的表,就像它们是本地表一样?
我使用的容器已经包含最新的 Db2 11.5 实例,并且可以直接从docker hub下载。 使用这个容器,我能够按照这些步骤配置 Db2 客户端来远程访问 IBM Db2 Event Store 实例,所以我知道我有连接。
首先我用 db2 实例启动了容器
$ docker run -itd --name db2 -e DBNAME=testdb -v ~/:/database -e DB2INST1_PASSWORD=GD1OJfLGG64HV2dtwK -e LICENSE=accept -p 50000:50000 --privileged=true ibmcom/db2
进入容器
$ docker exec -it db2 bash -c "su - db2inst1"
遵循有关在非 Java Db2 客户端中配置安全套接字层 (SSL) 支持的文档
为此, 我下载了容器内的 GsKit 包并安装了它,并使用 GSKCapiCmd 工具创建了一个密钥数据库
[db2inst1@a33d5b29ffa2 ~]$ mkdir /database/config/db2inst1/sqllib/security/keystore
[db2inst1@a33d5b29ffa2 ~]$ cd /database/config/db2inst1/sqllib/security/keystore
[db2inst1@a33d5b29ffa2 ~]$ gsk8capicmd_64 -keydb -create -db "mydbclient.kdb" -pw "myClientPassw0rdpw0" -stash
然后从服务器复制默认的自签名证书
# kubectl get pods -n dsx | grep eventstore-tenant-engine | head -1
eventstore-tenant-engine-565d74cfd8-64jv4 1/1 Running 0 21h
# kubectl exec -n dsx eventstore-tenant-engine-565d74cfd8-64jv4 -- cat /eventstorefs/eventstore/db2inst1/sqllib_shared/gskit/certs/eventstore_ascii.cert
(如果您无权访问服务器,也可以使用REST API )
有了这个,我在客户端上用它创建了一个 server-certificate.cert 文件,然后将证书添加到我之前创建的客户端密钥数据库中:
[db2inst1@a33d5b29ffa2 ~]$ gsk8capicmd_64 -cert -add -db "mydbclient.kdb" -pw "myClientPassw0rdpw0" -label "server" -file "server-certificate.cert" -format ascii -fips
最后更新客户端上的配置以使用我刚刚设置的客户端密钥数据库:
[db2inst1@a33d5b29ffa2 ~]$ db2 update dbm cfg using
SSL_CLNT_KEYDB /database/config/db2inst1/sqllib/security/keystore/clientkey.kdb
SSL_CLNT_STASH /database/config/db2inst1/sqllib/security/keystore/clientstore.sth
然后我按照文档使用 SECURITY SSL 对远程 TCPIP 节点进行编目,因为 Db2 Event Store Enterprise Edition 默认配置了 SSL:
[db2inst1@a33d5b29ffa2 ~]$ db2 catalog tcpip node nova remote 172.16.197.11 server 18730 SECURITY SSL
DB20000I The CATALOG TCPIP NODE command completed successfully.
DB21056W Directory changes may not be effective until the directory cache is
refreshed.
最后,我按照文档使用 AUTHENTICATION GSSPLUGIN 对数据库进行编目,这正是 Db2 Event Store 所需要的:
[db2inst1@a33d5b29ffa2 ~]$ db2 CATALOG DATABASE eventdb AT NODE nova AUTHENTICATION GSSPLUGIN
DB20000I The CATALOG DATABASE command completed successfully.
DB21056W Directory changes may not be effective until the directory cache is
refreshed.
通过我所做的所有设置,我能够使用用户和密码建立连接以验证配置。
[db2inst1@a33d5b29ffa2 ~]$ db2 CONNECT TO eventdb USER admin USING password
Database Connection Information
Database server = DB2/LINUXX8664 11.1.9.0
SQL authorization ID = ADMIN
Local database alias = EVENTDB
现在我想更进一步,能够让 db2 实例同时看到本地表和远程 Db2 事件存储表。 这可能吗 ?
是的! 你实际上非常接近。
鉴于您已连接到 Db2 Event Store 数据库,您可以运行:
db2 list tables for all
或对于给定的架构:
db2 list tables for schema <>
现在,由于您使用的是Db2 11.5
docker 容器,您还可以在容器内创建一个数据库。 例如:
db2 create db testdb
之后,您可以连接到容器本地的数据库并列出您的“本地”表。 例如:
> db2 connect to testdb
> db2 list tables for all
这里的关键是您的活动连接。 当它来远程DB2事件存储数据库所做的db2 list tables ...
命令将显示表远程数据库,并在连接本地数据库上进行,在db2 list tables ...
命令将显示为表本地数据库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.