2
1

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.

OpenShiftにDb2 Warehouseをインストールして無料トライアル(Db2U s11.5.8.0-cn3インストール編)

Last updated at Posted at 2023-11-13

目次

  1. はじめに
  2. 前提
  3. 方針
  4. 手順
    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)の動作確認
  5. エラー例
  6. 参考資料

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の管理画面を開いて、右上の+ボタンを押します。
image.png

マニュアルに載っている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

image.png
導入したカタログが表示されます。
image.png

導入結果を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の箱をクリックします。
image.png
次の画面でInstallボタンをクリックします。
image.png
次の画面でUpdate channelとしてv110508.0が選択されています。そうでなければv110508.0を選択してください。
image.png
画面を下にスクロールしてInstallation modeとしてA specific namespace on the clusterを選択します。Installed Namespaceに手順1で作成したプロジェクト名ns-db2uを設定し、Installボタンをクリックします。
image.png
導入が終わると次の画面が表示されます。
image.png

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を設定
  • spec.storage
    • archivelogsのstorageClassNameの値を変更(タイプミスと思われる値を変更)
      • 新:ocs-storagecluster-cephfs
      • 旧:ocs-storagecluster-ceph-rbd
    • activelogsを追加
  • spec.version
    • 本記事を作成したとき(2023年11月)の最新版に変更
      • 新:s11.5.8.0-cn3
      • 旧:s11.5.8.0-cn2

変更済みのCRDは次のようになります。

db2wh1112a.yaml
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. 参考資料

2
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?