Db2 11.5.5 on OpenShift は、Operator対応されたことによって、OCP WebコンソールからGUIベースでインストールすることができるようになりました。
OCP WebコンソールからDb2をデプロイするための手順を試してみたので、手順・ポイントなどメモとしてまとめておこうと思います。
- 前提となるDb2 Operator導入まで実施完了していることを前提とします
- Db2 Operator導入などの、前提となる手順はこちらに書いています
→ Db2 11.5.5 on OpenShift デプロイ手順 - すべての作業をGUIだけで行うことができるわけではなく、一部の手順はコマンドラインから実行します
導入環境
今回は、以下のような環境に Db2 11.5.5 on OpenShift をデプロイしました。
項目 | バージョン |
---|---|
OS(bastion) | RHEL 7.7 |
OS(worker) | RHEL 7.7 |
OCP(Client) ※ | 4.5.0-202007240519.p0-b66f2d3 |
OCP(Server) ※ | 4.5.7 |
Kubernetes | v1.18.3+2cf11e2 |
NFS | 4.2 |
Db2 OLTP | 11.5.5 |
###構成
今回は、以下のような構成のOCP環境にDb2をデプロイします。
Db2はStatefulSetとしてデプロイされます。
- Bastion Node x1
- Master Node x3
- Worker Node x3
ストレージには、当該環境では最も準備が容易だったNFS-静的プロビジョニング構成を選択しています。
今回はBastionサーバをNFSサーバとして構築し、Bastionサーバのローカルファイルシステムの1つをNFSボリュームとしてexportする単純な構成としています。
ストレージ構成は今回の導入検証のための簡易テスト環境であり、実際の本番環境での利用にあたっては技術的な構成確認の場をメーカー(IBM)側にとるようにお願いします。
作業を行うノード / ユーザ
ここから先で実行するコマンドはすべてBastionノードから実行しています。
また、ユーザは以下の用途で使い分けています。
ユーザ | 用途/補足 |
---|---|
rootユーザ | NFSサーバのセットアップ用 |
OCPユーザ | ocコマンド実行 (cluster-admin権限付与) |
コマンド実行ノード・ユーザについてはご使用の環境に応じて決めてください。
また、ocコマンド実行前には、oc login が必要となります。
導入の流れ
- ストレージ構成
- Db2uCluster(≒シングル構成Db2)導入
- 動作確認
(補足)導入の全体としての流れは以下の通りで、ここから先の手順はグレーの作業(新規プロジェクト作成、Db2 Operator導入)までは完了していることを前提とします
##Step1. ストレージ構成
Db2uCluster(Db2本体)導入時は、メタデータ/ユーザデータを配置するためのストレージとして、ストレージクラス、もしくは作成済のPVを指定します。
ここでは、作成済PVを指定してDb2uClusterを導入する手順を想定しています。
Step1-1. NFSサーバの構成
今回は検証環境であるため、セットアップの容易なNFSをストレージとして利用します。
(※本番稼働環境であれば、性能/可用性/バックアップ取得要件等を考慮した上でストレージ構成を検討することが望ましい)
NFSサーバ(=bastion) へログインし、root ユーザ にて以下の手順を実行します。
####① 空のディレクトリを作成
メタデータ、ユーザデータ用に2つのディレクトリを作成します
# mkdir -p /work/nfsdir/Db2NFS_Data2
# mkdir -p /work/nfsdir/Db2NFS_Meta2
####② NFSサーバ上で、エクスポートオプションを指定
Db2U 11.5.5 におけるNFS利用のための前提条件は、Db2製品マニュアルに記載されます。
Db2 11.5 KnowledgeCenter[NFS storage requirements for Db2]
-
Db2 のPersistent Volume として NFS を利用する場合、NFSサーバ側で以下のエクスポートオプションを指定
rw,sync,no_root_squash,no_all_squash -
IPアドレスは環境に応じて書き換える(db2_openshiftworkerN_IP_address の箇所)
# echo "/work/nfsdir/Db2NFS_Data2 10.1.1.1/27(rw,sync,no_wdelay,no_root_squash,insecure)" >> /etc/exports
# echo "/work/nfsdir/Db2NFS_Meta2 10.1.1.1/27(rw,sync,no_wdelay,no_root_squash,insecure)" >> /etc/exports
/etc/exportsファイルでのNFSの設定を反映する (exportfs -a または exportfs -r)
# exportfs -a
補足:
Knowledge Center には、/etc/fstab ファイルを編集するよう指示があるが、設定するよう指示される hard オプションは後で Persistent Volume の属性に設定するため、この手順はスキップする。
抜粋:
各 Db2OpenShiftワーカー・ノードで、マウント・オプションを/etc/fstabに追加します。
NFS ソフト・マウントは NFS タイムアウトの超過後に停止し、呼び出し元に正しくエラーを返さない可能性があります。
この問題によって、クラスター・アプリケーションでデータ破損が生じることがあります。これが、hard オプションを使用する理由です。
例えば、以下のシェル・スニペットを使用して更新を行うことができます。
cat <<'EOF' > /etc/fstab
hostname_OR_IP_address_of_NAS/NFS_server:NAS/NFS_share_exported /nfsmount/ nfs
rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,intr,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,nolock 0 0
EOF
Step1-2. Persistent Volume(PV) 作成
OCP Webコンソールから、メタデータ用とユーザーデータ用の2つのPVを作成します。
左のメニューから [Storage] -> [Persistent Volumes]を選択します。
右上の [Create Persistent Volume] ボタンを押下します。
Yaml編集画面が開くので、環境に応じた定義内容を記載し、[Create]ボタンを押下しPVを作成します
以下①、②に、今回使用したNFSのPVの定義サンプルを添付します。
####①メタデータ用PVのYamlサンプル
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-nfs-db2meta2
labels:
type: nfs-meta2
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: slow
mountOptions:
- v4.2
- context="system_u:object_r:container_file_t:s0"
- hard
nfs:
path: /work/nfsdir/Db2NFS_Meta2
server: 10.1.1.1
####②ユーザデータ用PVのYamlサンプル
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-nfs-db2data2
labels:
type: nfs-data2
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: slow
mountOptions:
- v4.2
- context="system_u:object_r:container_file_t:s0"
- hard
nfs:
path: /work/nfsdir/Db2NFS_Data2
server: 10.1.1.1
Step2. Db2uCluster デプロイ(Db2 on OpenShiftの導入)
OCP Webコンソールにログインし、[Operators] -> [Installed Operators] の画面を開き、「IBM Db2」を選択します。
※Db2 Operatorが表示されない場合は、「all project」もしくは、作業対象のプロジェクト(ネームスペース)が選択されていることを確認してください
「Provided APIs」の一覧に並ぶアイコン「Db2u Cluster」の下にある「Create Instance」ボタンを押下します。
Db2インスタンスのデプロイ画面が表示され、各種設定項目と[Create]ボタンが表示されます。
- ライセンス承諾設定等が必要となります。設定の編集を行った後に[Create]します
- OCP Webコンソールでは、設定項目の一部がGUI入力画面にて設定できるようになっています
- GUIはすべての設定項目を網羅していないため、GUIベースのデプロイを行う際、設定項目が無い項目についてはYamlファイルビューで直接Yamlファイルの編集を行います
下記項目を順次編集していきます。
####①名称、ライセンス
####②Image Pull Secret指定
Acount > Image Pull Secrets 下の「Add imagePullSecret」を押下し、[ibm-registry]を指定します
(ibm-registryは既に作成済の前提。作成手順はこちらに記載 -> Link)
####③インスタンスのパスワード情報
####④ストレージ構成 (一部はYaml編集が必要)
GUI画面のデフォルトでは1つのストレージにメタデータ/ユーザデータを共存させる設定となっています。
また、無指定の状態ではストレージサイズは100Giとなります。
その他、ユーザ要件/環境に沿って、GUIで設定できる項目はGUIで、GUIでは指定できない条件についてはYamlビューにて編集していきます。
- メタデータ、ユーザデータそれぞれのPVを指定
(Step1.で作成しておいたPVに指定したラベル値をmatchExpressionで指定) - ユーザデータについてデフォルト100GiB確保される定義を、テスト環境では10GiBへ変更
- アクセスモードをマニュアルの推奨(※)に合わせて変更
(※)Db2 11.5 KnowledgeCenter[Configuring database storage for Db2] より引用
When provisioning the database, for user data (the main database data), select ReadWriteOnce (RWO) access mode for your storage.
以下はメタデータ用ストレージの定義画面。
1つめのストレージについて、アクセスモードはデフォルトでReadWriteManyとなっているため変更不要です。
Step1.で作成済PVに定義したラベル(nfs-meta2)を指定するため、Selector > MatchExpressions の下の「Add matchExpression]を押下します。
Step1.でPVに定義したラベルは、キー(type)とバリュー(nfs-meta2)のペアで構成されます。
Db2uClusterでのストレージ定義にmatchExpressionsでセレクター要件(→PVのラベルのキー値とバリュー値)を記述することによって、作成済のPVをDb2uClusterのPodに使わせることができます。
Valueは、「Add value]ボタン押下により入力可能となります。
(key - operator - value 入力イメージ)
つづいて、[Add Storage] を押下し、ユーザデータ用ストレージの定義を追加します。
1つ目のメタデータ用ストレージと同様に、name, selector(match expressions)値を入力します。
また、1つ目のストレージと異なり、Access Mode / type の値が空白値となるため、明示的に指定します。
- Access Mode : ReadWriteOnce
- type : create
デフォルトでは、メタデータ用ストレージサイズは下記抜粋のように100GiBが指定されるため、環境に応じて変更します。
(編集前:100GiB)
(編集後:10GiB)
ユーザデータ用領域も同様に編集します。
*ユーザデータ用領域については、[resources]の定義文自体が無いため、meta用の定義をコピーする。
####⑤podConfig (オプション)(要Yaml編集)
想定リソースについて記述できるpodConfig定義についても、GUI画面には登場しないため、
変更したい場合はYamlビューで記述します。
記述する位置はユーザが意識する必要はなく、Yaml末尾に記述しておくとビュー切替時などに自動的に配置変更されます。
podConfig定義(デフォルト内容):
podConfig:
db2u:
resource:
db2u:
requests:
cpu: 2
memory: 4Gi
limits:
cpu: 2
memory: 4Gi
podConfig定義を手動で追記すると、Formビューにも項目として登場し、GUIベースで編集できるようになります。
####⑥ インストール
[Create]ボタンを押下し、Db2uCluster導入を行います。
[Create]押下後の応答は即時に戻り、作成済Db2uClusterの一覧が表示され、「Status」列で状況がリアルタイムに更新されます。
Db2uClusterデプロイは裏で進行していて、環境によりますが、完了までには数分~十数分程度かかります。
####⑦ Db2 on OpenShift デプロイ完了確認
デプロイが完了すると、Statusが「Ready」に変更されます。
##Step3. 動作確認
Db2 の Pod「c-[name]-db2u-0」 にログインし、データベースに接続できることを確認する。
Podには以下のコマンドでログインする。
$ oc rsh c-db2u-nfs1-db2u-0 /bin/bash
【動作確認例】
ログイン時のユーザは Db2コマンド実行権限を持たないdb2uadm であるため、Podへのログインが成功したらdb2inst1 ユーザに su します。
db2 list db directory コマンドにより、この環境に作成されるデータベース名がBLUDBであると確認できます。
以下は、DBに接続しテスト用テーブルを作成し、データを挿入することで動作確認を行う例。
$ oc rsh c-db2ucluster-2-db2u-0 /bin/bash
[db2uadm@c-db2ucluster-2-db2u-0 /]$ whoami
db2uadm
[db2uadm@c-db2ucluster-2-db2u-0 /]$ su - db2inst1
Last login: Tue Dec 29 10:43:15 UTC 2020 on pts/4
[db2inst1@c-db2ucluster-2-db2u-0 - Db2U db2inst1]$ which db2
~/sqllib/bin/db2
[db2inst1@c-db2ucluster-2-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 = c-db2u-cluster-1-db2u-engn-svc
Alternate server port number = 50000
[db2inst1@c-db2ucluster-2-db2u-0 - Db2U db2inst1]$ db2 connect to bludb
Database Connection Information
Database server = DB2/LINUXX8664 11.5.5.0
SQL authorization ID = DB2INST1
Local database alias = BLUDB
[db2inst1@c-db2ucluster-2-db2u-0 - Db2U db2inst1]$ db2 list tables
Table/View Schema Type Creation time
------------------------------- --------------- ----- --------------------------
0 record(s) selected.
[db2inst1@c-db2ucluster-2-db2u-0 - Db2U db2inst1]$ db2 "create table t1 (c1 integer,c2 char(8))"
DB20000I The SQL command completed successfully.
[db2inst1@c-db2ucluster-2-db2u-0 - Db2U db2inst1]$ db2 "insert into t1 values(3,'c'),(4,'d')"
DB20000I The SQL command completed successfully.
[db2inst1@c-db2ucluster-2-db2u-0 - Db2U db2inst1]$ db2 "select * from t1"
C1 C2
----------- --------
3 c
4 d
2 record(s) selected.
[db2inst1@c-db2ucluster-2-db2u-0 - Db2U db2inst1]$ db2 terminate
DB20000I The TERMINATE command completed successfully.
[db2inst1@c-db2ucluster-2-db2u-0 - Db2U db2inst1]$ exit
db2 terminate
DB20000I The TERMINATE command completed successfully.
---> 導入したDb2は問題なく稼働していることが確認できました。
##Step4. ライセンスの登録状況確認
Db2 V11.5では、ライセンスを適用しなくても Community Editionという無償版ライセンスが適用された状態となっている。旧バージョンのDb2試用版のように90日経過したらDb2が起動しなくなるということはありません。
この点はDb2 on OpenShiftも共通です。
導入したDb2のライセンス確認/更新を行うには、下記マニュアルに記載コマンドを実行します。
Db2 11.5 KnowledgeCenter[Upgrading your Db2 Community Edition license certificate key]
接続情報
Liberty など、OCPクラスタ内からのDB接続時に必要となる接続情報として、クラスターIPアドレスとポート番号を確認する。
####① クラスターIPアドレス
プロジェクト名、リリース名は環境に応じて書き換えて実行する。
$ oc get svc -n <PROJECT> <RELEASE-NAME>-db2u-engn-svc -o jsonpath='{.spec.ports[?(@.name=="legacy-server")].nodePort}'
####② ポート番号
プロジェクト名、リリース名は環境に応じて書き換えて実行する。
$ oc get svc -n <PROJECT> <RELEASE-NAME>-db2u-engn-svc -o jsonpath='{.spec.clusterIP}'
関連記事
◆Db2 11.5.5 on OpenShift デプロイ手順
https://qiita.com/mi-kana/items/6266fcdcdc3b71d8a0fb
◆OpenShift環境へのDb2 Operator導入手順
https://qiita.com/mi-kana/items/c3fb640d671caf624eb8
◆Db2 HADR on OpenShift かんたんデプロイ
https://qiita.com/mi-kana/items/7fb2fecc02067bc8386b
以上です。