目次
- はじめに
- 前提
- 方針
- 手順
4.1 Db2 Warehouse用のプロジェクトを作成
4.2 IBM Operator Catalogを導入
4.3 Db2 Operatorを導入
4.4 Security Context Constraints (SCC)を作成
4.5 Db2 Warehouseクラスターを作成
4.6 Db2コマンドライン・プロセッサ(CLP)の動作確認 - エラー例
- 参考資料
1. はじめに
Db2とDb2 Warehouseは同じデータベース・エンジンを使っていますが、前者はトランザクション処理向け、後者はレポーティングや分析処理向けの位置付けです。しかしデータの持たせ方を表単位で変更して(行表/列表)、どちらの処理も効率よく実行できるように構成できます。
Db2とDb2 Warehouseはフルマネージド・サービスとしてクラウド環境で提供されていますが、ユーザー自身でクラウド環境(OpenShift)に導入することもできて、そのエンジンはDb2U (Db2 Universal container)と呼ばれています。
Db2UをOpenShiftクラスターにデプロイするとき、Db2とDb2 Warehouseのいずれかを指定します。Db2の場合はカスタムリソース定義(CRD)にdb2oltp
を設定、Db Warehouseの場合はdb2wh
を設定します。この違いはDb2とDb2 Warehouseのマニュアルを見比べて把握しました。こういった内容確認も含めて、エラー無しでデプロイできるまで私は時間を要してしまったので、本記事に手順をまとめます。
導入する製品はDb2 Warehouse Community Editionです。無料で利用できますが(但しIBM社の製品サポート対象外)、クラスター全体でCPUが4vCPUs、メモリーが16GBに制限されます。これを使って本記事ではSMP(symmetric multiprocessor、ノード1台)、論理パーティション2個の構成を導入します。構成図が次のページに載っています。
2. 前提
次の環境を用いて本記事の内容を検証しました。これと同等の環境を入手済みであることが前提となりますが、ただし導入するDb2 WarehouseがSMP構成のためworkerノードは1台で足ります。
- OpenShftクラスター
- OpenShift 4.12.41
- ノード
- control-plane (4vCPUs, memory 16GB, ephemeral-storage 100GB):3台
- infra (16vCPUs, memory 32GB, ephemeral-storage 100GB):3台
- worker (8vCPUs, memory 32GB, ephemeral-storage 100GB):3台
- ストレージ
- ODF 4.12.9:500GB
- Bastionマシン
- RHEL 8.8
本記事の手順に従って次のソフトウェアを導入します。
- IBM Operator Catalog
- Db2 Operator 110508.0.3
- Db2 Warehouse s11.5.8.0-cn3
3. 方針
3.1 Db2 Warehouseのマニュアルに加えてDb2のマニュアルも参照
Db2マニュアルの方が新しい説明が載っています。本記事ではDb2 WarehouseのクラスターをデプロイするときにDb2 Warehouseマニュアルに従い、それ以外はDb2マニュアルに従います。
- Db2マニュアル
- Db2 Warehouseマニュアル
3.2 Db2UオペレーターをIBM Operator Catalogから導入
オペレーター導入方法は3種類あって、その中で前提が少ないIBM Operator Catalogを使うことにします。
- Red Hat Marketplace:アカウントが必要
- コマンドライン・インターフェース:cloudctlが必要
- IBM Operator Catalog:上のいずれも不要
3.3 Db2Uのカスタムリソース(CR)としてDb2uInstanceを利用
Db2U v11.5.8では2種類のCRが提供されています。本記事では新しい方のDb2uInstanceを使います。
- Db2uCluster
- Db2uInstance
3.4 Db2uInstanceのカスタムリソース定義(CRD)をDb2 Warehouseマニュアルにもとづき作成
私の環境ではマニュアルに載っているカスタムリソース定義(CRD)がそのままでは動かず、修正する必要がありました。修正箇所を減らすために、Db2マニュアルにもとづくよりもDb2 Warehouseのマニュアルに載っているCRDを使います。これでDb2 Warehouse特有の設定をどのように行うのか、といったことに悩む必要が少なくなります。
なお、Db2Uオペレーターの画面インターフェース(GUI)を使ってCRDを作成することができますが、私は却って手間を要したので本記事では使いません。
3.5 Db2 Warehouseクラスターのデプロイをbastionマシンのコマンドライン・インターフェース(CLI)で実行
OpenShiftの管理画面を使ってクラスターをデプロイできますが、本記事ではbastionマシンのLinux CLIを使います。こちらの方がコマンド再実行やログ記録が便利と思います。
4. 手順1) Db2 Warehouse用のプロジェクトを作成
OpenShiftクラスターにログインしてプロジェクトを作成します。プロジェクト名は任意で、本記事ではns-db2u
とします。
[admin@bastion ~]$ oc login --server=xxx.xxx.xxx:nnnn -u kubeadmin
[admin@bastion ~]$ oc new-project ns-db2u
Now using project "ns-db2u" on server "https://xxx.xxx.xxx:nnnn".
...
4. 手順2) IBM Operator Catalogを導入
次のページを参考にして手順を進めます。
OpenShiftの管理画面を開いて、右上の+ボタンを押します。
マニュアルに載っているIBM Operator CatalogのYAML定義を管理画面に貼り付けてCreate
ボタンを押します。
IBM Operator CatalogのYAML定義
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
name: ibm-operator-catalog
namespace: openshift-marketplace
spec:
displayName: "IBM Operator Catalog"
publisher: IBM
sourceType: grpc
image: icr.io/cpopen/ibm-operator-catalog
updateStrategy:
registryPoll:
interval: 45m
導入結果をbastionマシンのCLIで確認すると、次のようになります。
[admin@bastion ~]$ oc get CatalogSources ibm-operator-catalog -n openshift-marketplace
NAME DISPLAY TYPE PUBLISHER AGE
ibm-operator-catalog IBM Operator Catalog grpc IBM 71s
[admin@bastion ~]$ oc get catalogsource,pods -n openshift-marketplace
NAME DISPLAY TYPE PUBLISHER AGE
catalogsource.operators.coreos.com/certified-operators Certified Operators grpc Red Hat 25h
catalogsource.operators.coreos.com/community-operators Community Operators grpc Red Hat 25h
catalogsource.operators.coreos.com/ibm-operator-catalog IBM Operator Catalog grpc IBM 96s
catalogsource.operators.coreos.com/redhat-marketplace Red Hat Marketplace grpc Red Hat 25h
catalogsource.operators.coreos.com/redhat-operators Red Hat Operators grpc Red Hat 25h
NAME READY STATUS RESTARTS AGE
pod/certified-operators-xzmvb 1/1 Running 0 10h
pod/community-operators-8xv56 1/1 Running 0 160m
pod/ibm-operator-catalog-vhj8x 1/1 Running 0 96s
pod/marketplace-operator-c67ccf5d6-kqs8h 1/1 Running 0 25h
pod/redhat-marketplace-dwtsr 1/1 Running 0 25h
pod/redhat-operators-q797q 1/1 Running 0 25h
4. 手順3) Db2 Operatorを導入
OpenshiftのWeb管理画面でOperator HubからDb2を検索します。表示されたIBM Db2
の箱をクリックします。
次の画面でInstall
ボタンをクリックします。
次の画面でUpdate channelとしてv110508.0
が選択されています。そうでなければv110508.0
を選択してください。
画面を下にスクロールしてInstallation modeとしてA specific namespace on the cluster
を選択します。Installed Namespaceに手順1で作成したプロジェクト名ns-db2u
を設定し、Install
ボタンをクリックします。
導入が終わると次の画面が表示されます。
4. 手順4) Security Context Constraints (SCC)を作成
SCCを作成してpodの権限を設定します。次のページに載っているSCCの定義をコピーしてファイルに保存します。ファイル名は任意で、本記事ではdb2u-scc.yaml
とします。
db2u-scc.yaml
kind: SecurityContextConstraints
apiVersion: security.openshift.io/v1
apiGroup: security.openshift.io
metadata:
name: db2u-scc
allowHostDirVolumePlugin: false
allowHostIPC: false
allowHostNetwork: false
allowHostPID: false
allowHostPorts: false
# privileged container is only needed for the init container that sets the Db2 kernel parameters
allowPrivilegedContainer: true
allowedCapabilities:
- "SYS_RESOURCE"
- "IPC_OWNER"
- "SYS_NICE"
- "CHOWN"
- "DAC_OVERRIDE"
- "FSETID"
- "FOWNER"
- "SETGID"
- "SETUID"
- "SETFCAP"
- "SETPCAP"
- "SYS_CHROOT"
- "KILL"
- "AUDIT_WRITE"
priority: 10
runAsUser:
type: RunAsAny
seLinuxContext:
type: MustRunAs
fsGroup:
type: RunAsAny
supplementalGroups:
type: RunAsAny
version: v1
SCCを作成します。
[admin@bastion ~]$ oc apply -f db2u-scc.yaml
securitycontextconstraints.security.openshift.io/db2u-scc created
[admin@bastion ~]$ oc get scc | grep db2
db2u-scc true ["SYS_RESOURCE","IPC_OWNER","SYS_NICE","CHOWN","DAC_OVERRIDE","FSETID","FOWNER","SETGID","SETUID","SETFCAP","SETPCAP","SYS_CHROOT","KILL","AUDIT_WRITE"] MustRunAs RunAsAny RunAsAny RunAsAny 10 false ["awsElasticBlockStore","azureDisk","azureFile","cephFS","cinder","configMap","csi","downwardAPI","emptyDir","ephemeral","fc","flexVolume","flocker","gcePersistentDisk","gitRepo","glusterfs","iscsi","nfs","persistentVolumeClaim","photonPersistentDisk","portworxVolume","projected","quobyte","rbd","scaleIO","secret","storageOS","vsphere"]
4. 手順5) Db2 Warehouseクラスターを作成
Db2uInstanceのカスタムリソース定義(CRD)を次の例から作成します。
本記事では上のCRDを次のように変更します。
- metadata.namespace
- nameの値は任意で、本記事では
db2wh1112a
を設定 - namespaceの値に手順1で作成したプロジェクト名
ns-db2u
を設定
- nameの値は任意で、本記事では
- spec.storage
- archivelogsのstorageClassNameの値を変更(タイプミスと思われる値を変更)
- 新:ocs-storagecluster-cephfs
- 旧:ocs-storagecluster-ceph-rbd
- activelogsを追加
- archivelogsのstorageClassNameの値を変更(タイプミスと思われる値を変更)
- spec.version
- 本記事を作成したとき(2023年11月)の最新版に変更
- 新:s11.5.8.0-cn3
- 旧:s11.5.8.0-cn2
- 本記事を作成したとき(2023年11月)の最新版に変更
変更済みのCRDは次のようになります。
apiVersion: db2u.databases.ibm.com/v1
kind: Db2uInstance
metadata:
name: db2wh1112a
namespace: ns-db2u
spec:
account:
privileged: true
environment:
authentication:
ldap:
enabled: false
databases:
- dbConfig:
APPLHEAPSZ: "25600"
LOGPRIMARY: "50"
LOGSECOND: "35"
STMTHEAP: 51200 AUTOMATIC
name: BLUDB
dbType: db2wh
instance:
dbmConfig:
DIAGLEVEL: "2"
registry:
DB2_4K_DEVICE_SUPPORT: "ON"
DB2_ATS_ENABLE: "NO"
DB2_DISPATCHER_PEEKTIMEOUT: "2"
DB2_OBJECT_STORAGE_SETTINGS: "OFF"
partitionConfig:
dataOnMln0: true
total: 2
volumePerPartition: true
license:
accept: true
nodes: 1
podTemplate:
db2u:
resource:
db2u:
limits:
cpu: 4
memory: 16Gi
storage:
- name: meta
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
storageClassName: ocs-storagecluster-cephfs
type: create
- name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
storageClassName: ocs-storagecluster-ceph-rbd
type: template
- name: backup
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
storageClassName: ocs-storagecluster-cephfs
type: create
- name: tempts
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: ocs-storagecluster-ceph-rbd
type: template
- name: archivelogs
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 100Gi
storageClassName: ocs-storagecluster-cephfs
type: create
- name: activelogs
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
storageClassName: ocs-storagecluster-ceph-rbd
type: template
version: s11.5.8.0-cn3
クラスターをデプロイします。
[admin@bastion ~]$ oc apply -f db2wh1112a.yaml
db2uinstance.db2u.databases.ibm.com/db2wh1112a created
しばらくすると(本記事の環境で約10分後)podがREADYとなります。
[admin@bastion ~]$ oc get pods
NAME READY STATUS RESTARTS AGE
c-db2wh1112a-db2u-0 1/1 Running 0 10m
c-db2wh1112a-etcd-0 1/1 Running 0 10m
c-db2wh1112a-restore-morph-7dtfr 0/1 Completed 0 98s
c-db2wh1112a-tools-6445674f8d-j7r7n 1/1 Running 2 (10m ago) 10m
db2u-day2-ops-controller-manager-755bbfd686-s9slq 1/1 Running 0 14m
db2u-operator-manager-6ffc9d848f-kvnpp 1/1 Running 0 14m
4. 手順6) Db2コマンドライン・プロセッサ(CLP)の動作確認
次のページを参考にしてpod内でシェルを起動し、ユーザーをdb2inst1に変更してCLPを起動します。
[admin@bastion ~]$ oc exec -it c-db2wh1112a-db2u-0 -- bash
Defaulted container "db2u" out of: db2u, instdb (init), init-labels (init), init-kernel (init)
[db2uadm@c-db2wh1112a-db2u-0 /]$ su - db2inst1
[db2inst1@c-db2wh1112a-db2u-0 - Db2U db2inst1]$ db2
(c) Copyright IBM Corporation 1993,2007
Command Line Processor for DB2 Client 11.5.8.0
db2 =>
前節(手順5)でクラスターのCRDにおいてパーティション数を2個に設定しました。このキーはspec.environment.partitionConfig.total
で、値が2となっています。次のコマンドを実行して確認すると、パーティションが2つ存在することがわかります。
db2 => list dbpartitionnums
DATABASE PARTITION NUMBER
----------------------------
0
1
2 record(s) selected.
表を作成し、レコードが2つのパーティションに分散されて保存されることを確認します。
db2 => create table お寿司1112e (番号 int, 名前 nvarchar(10), よみがな nvarchar(10))
DB20000I The SQL command completed successfully.
db2 => describe table お寿司1112e
Data type Column
Column name schema Data type name Length Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
番号 SYSIBM INTEGER 4 0 Yes
名前 SYSIBM VARCHAR 40 0 Yes
よみがな SYSIBM VARCHAR 40 0 Yes
db2 => insert into お寿司1112e values (1,'鯵','あじ'), (2,'穴子','あなご'), (3,'甘海老','あまえび'), (4,'鮑','あわび'), (5,'烏賊','いか'), (6,'鰯','いわし'), (7,'海胆','うに'), (8,'海老','えび'), (9,'縁側','えんがわ'), (10,'間八','かんぱち'), (11,'金目鯛','きんめだい'), (12,'小鰭','こはだ'), (13,'鯖','さば'), (14,'秋刀魚','さんま'), (15,'鮭','さけ'), (16,'鯛','たい'), (17,'玉子','たまご'), (18,'鰤','ぶり'), (19,'帆立','ほたて'), (20,'鮪','まぐろ')
DB20000I The SQL command completed successfully.
db2 => select *, dbpartitionnum(番号) as パーティション番号 from お寿司1112e order by 番号
番号 名前 よみがな パーティション番号
----------- -------------------- -------------------- ---------------------------
1 鯵 あじ 0
2 穴子 あなご 0
3 甘海老 あまえび 0
4 鮑 あわび 0
5 烏賊 いか 0
6 鰯 いわし 1
7 海胆 うに 0
8 海老 えび 1
9 縁側 えんがわ 0
10 間八 かんぱち 0
11 金目鯛 きんめだい 1
12 小鰭 こはだ 1
13 鯖 さば 0
14 秋刀魚 さんま 1
15 鮭 さけ 1
16 鯛 たい 1
17 玉子 たまご 0
18 鰤 ぶり 0
19 帆立 ほたて 0
20 鮪 まぐろ 0
20 record(s) selected.
5. エラー例) Podが作成されない
Db2オペレーターとDb2 Warehouseクラスターのnamespaceが異なる場合、私が試した範囲ではDb2 Warehouseのpodが生成されませんでした。次のページに複数のnamespaceを登録する方法が載っていますが、この方法に従ったつもりでもpodは生成されませんでした。
この問題に対して本記事ではDb2オペレーターとDb2 Warehouseクラスターを同じnamespaceに導入して回避しました。手順3がそのようになっています。
6. 参考資料
-
Db2マニュアル
-
What's new in Db2 11.5.4 for Red Hat OpenShift (Db2 Universal container)
https://www.ibm.com/docs/en/db2/11.5?topic=1154-whats-new-in-db2 -
Partitioned database with symmetric multiprocessor environment(SMP、論理パーティション2個の図)
https://www.ibm.com/docs/en/db2/11.5?topic=environments-database-partition-processor#d24742e277 -
Db2 database product editions and Db2 offerings(Community Editionの説明)
https://www.ibm.com/docs/en/db2/11.5?topic=editions-db2-database-product-offerings -
Db2 for Red Hat OpenShift and Kubernetes
https://www.ibm.com/docs/en/db2/11.5?topic=deployments-db2-rhos-k8s -
Installing the Db2 Operator from the IBM Operator Catalog
https://www.ibm.com/docs/en/db2/11.5?topic=operator-installing-from-catalog -
SecurityContextConstraints Requirements
https://www.ibm.com/docs/en/db2/11.5?topic=db2-deploying#deploy_db2_rhos_cluster_11-5-8__title__7 -
Exec into the Db2 pod
https://www.ibm.com/docs/en/db2/11.5?topic=db2-exec-into-pod-catalog-partition -
Watching multiple namespaces from a single namespace installation
https://www.ibm.com/docs/en/db2/11.5?topic=db2-watching-multiple-namespaces-from-one-namespace
-
-
Db2 Warehouseマニュアル
-
Db2 Warehouse on Red Hat OpenShift and Kubernetes
https://www.ibm.com/docs/en/db2-warehouse?topic=db2-warehouse-rhos-k8s -
Deploying Db2 Warehouse using the Db2uInstance custom resource
https://www.ibm.com/docs/en/db2-warehouse?topic=resource-deploying-db2-warehouse-using-db2uinstance-custom -
Example of a complete Db2uInstance CR
https://www.ibm.com/docs/en/db2-warehouse?topic=resource-deploying-db2-warehouse-using-db2uinstance-custom#db2_cluster_api_11-5-7__title__17
-
-
Qiita記事
-
ROKSへのDb2 11.5.8導入手順/ログ <<分散ストレージ構成>>
https://qiita.com/mi-kana/items/82ad881172b715b73ffe -
Db2uInstance(11.5.8-cn2)デプロイYaml
https://qiita.com/mi-kana/items/1eca7f1a737ef4882637
-