Db2 for OpenShift バックアップ・リストア方法 (2023年3月版)

## Db2 for OpenShift and Kubernetes V11.5.8 のバックアップ手法

OpenShift/Kubernetes環境でDb2を動かすには、マイクロサービスとして開発される、k8s環境専用のDb2製品を導入します。
このDb2は、[Db2 for Red Hat OpenShift and Kubernetes](https://www.ibm.com/docs/en/db2/11.5?topic=deployments-db2-rhos-k8s)、別名Db2Uとも呼ばれます。
Db2として公式の Kubernetes Operator が提供されています。

Db2U で利用可能なバックアップ・リストア手法は、当初、Db2 BACKUP/RESTOREコマンドのみでした。
リリースアップを重ね、今では多くのバックアップ手段が利用可能になっています。
Persistent Volume Claim(PVC)やNamespaceといった、Kubernetesのレイヤーでのバックアップ取得方法も製品公式マニュアルで紹介されるようになっています。

色々選択肢があるため、どういった違いがあるかを自分の備忘録も兼ねて整理します。<br>
(※2週間ほど前にテクニカルプレビューとして登場したDb2uBackup, Db2uRestoreについてはドキュメントベースで調査中、確認できた内容だけ盛り込んでいます)

#### バックアップ手法ごとの特徴

2023年3月でDb2 for OpenShift のバックアップ運用に利用可能な手法は以下のものがあります。


| 手法 | バックアップ<br>取得対象 | バックアップ取得時のDBの状態 | リストア開始前提 | 利用可能なインターフェース |
|:-|:-|:-|:-|:-|
|**[Db2 BACKUP/<br>RESTOREコマンド]()**   |<ul><li>データベース</li><li>リカバリに必要なログファイル</li></ul>   |<ul><li>オンライン/オフライン</li></ul>  |<ul><li>制限アクセスモードでDb2インスタンス再起動</li><li>オフライン状態でリストア実施</li><ul>|コマンドライン  |
|**[IBM Spectrum Protect(※1)を利用したバックアップ](https://www.ibm.com/docs/en/db2/11.5?topic=db2-backing-up-restoring-spectrum-protect-tsm)**   |<ul><li>データベース</li><li>リカバリに必要なログファイル </li></ul>  |<ul><li>オンライン/オフライン</li></ul>  |<ul><li>制限アクセスモードでDb2インスタンス再起動</li><li>オフライン状態でリストア実施</li><ul>|コマンドライン|
|**[Storage Snapshot(※2)](https://www.ibm.com/docs/en/db2/11.5?topic=up-performing-snapshot-backup-db2-container-commands)<br>**   |<ul><li>PVC</li></ul>  |<ul><li>オンライン/オフライン</li><li>オンラインバックアップ開始前にHAモニター静止/set write suspend</li></ul>   |<ul><li>Db2クラスタ静止</li><li>Db2uClusterの全Pod停止</li><li>PVC削除</li></ul>  | コマンドライン<br>もしくは<br>OpenShift Webコンソール<br>|
|**[Velero Snapshot](https://www.ibm.com/docs/en/db2/11.5?topic=db2-velero-backup-restore)**   |<ul><li>Namespace全体</li><ul><li>PVC</li><li>Db2uClusterカスタムリソース</li></ul></ul>  |<ul><li>オンライン/オフライン</li><li>オンラインバックアップ開始前にDb2uクラスタ静止/set write suspend</li></ul>   | <ul><li>Db2uClusterカスタムリソースが存在しない状態であること</li></ul>  |コマンドライン|
|**[Db2uBackup](https://www.ibm.com/support/pages/node/6962831),<br> [Db2uRestore](https://www.ibm.com/support/pages/node/6962833)**(2023.03時点 TechPreview)   |<ul><li>データベース</li><li>リカバリに必要なログファイル</li></ul> |<ul><li>オンライン/オフライン/増分バックアップ</li></ul>   | <ul><li>ドキュメント上記載なし</li></ul>  |コマンドライン<br>もしくは<br>OpenShift Webコンソール|

(※1) 略称：ISP。旧製品名はTivoli Storage Manager(TSM)。
(※2) データの差分のみ取得するストレージのスナップショット機能を利用。ある時点に戻したい場合に有用ですが、物理障害には対応不可。


BACKUP/RESTOREコマンドで復元できるのはデータベースだけですが、PVCのバックアップを取得すると、より多くのDb2関連リソースを復元できるようになります。
最もカバー範囲の広いVelero Snapshotを利用すれば、ネームスペースごと失われてしまった状態からの障害回復も可能となります。


#### PVCに保持されるDb2関連オブジェクト

Db2 for OpenShift では、以下のオブジェクトが Persistent Volume Claim(PVC) に格納されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468682/2766ca74-ef22-9970-8643-f27a217c4ccd.png)

 * 自動ストレージパス(≒DBデータ)
 * アクティブログ
 * アーカイブログ
 * インスタンスホーム
 * 各種パラメータの保持される構成ファイル
 * Db2診断ログ
 * SSL/TLS構成ファイル
 * バックアップ・イメージ配置用パス
 * ..etc

Db2を構成するほぼすべての情報はPVCに保持されているため、仮にコンテナ(Pod)に障害が起きても、Db2構成情報もデータもすべてPVCに保持されるため、PVCさえ健全な状態であれば、環境そのものもデータそのものも復元することができます。

## 補足 / 参考情報

#### Storage Snapshot

 * 前提：バックアップとスナップショットの違い
     * バックアップは、ストレージ装置に障害が起きたときに確実に復元できるように、元データを複製しておくことを指す
     * スナップショットはデータの複製は持たず、スナップショット取得時点のデータブロックへのポインタのみ保持しておく機能
         * このため、バックアップ対象のDBと同じサイズの空き容量を用意しておく必要はなくバックアップほど時間がかからず取得できる一方、元データ(DB)の格納されるストレージに障害が起きてデータブロックが破損してしまった場合、データ復元不可となる
         * データの復旧が必要である場合、別途バックアップを取得する仕組みが必要
   

##### 利用条件
* Db2 for OpenShift の Storage Snapshot 利用にあたり、サポートされるストレージ種別
    * [OpenShift® Container Storage](https://docs.openshift.com/container-platform/4.6/storage/container_storage_interface/persistent-storage-csi-snapshots.html)
     * [Portworx](https://www.ibm.com/links?url=https%3A%2F%2Fdocs.portworx.com%2Fportworx-install-with-kubernetes%2Fstorage-operations%2Fcreate-snapshots%2F)
     * [IBM Spectrum® Scale CSI](https://www.ibm.com/support/knowledgecenter/STXKQY_5.0.5/com.ibm.spectrum.scale.v5r05.doc/bl1adv_logcopy.htm)
     * [IBM® Cloud File Storage](https://cloud.ibm.com/docs/FileStorage?topic=FileStorage-snapshots)
* 参考情報
    * https://www.ibm.com/docs/en/db2/11.5?topic=up-performing-snapshot-backup-container-commands
    
#### Velero Snapshot
##### 利用条件
 * Veleroバージョンは最新を使うようガイドされる　(2023年3月時点の最新版は1.10.2)
 * Velero稼働環境として Linux, MacOS であればサポート有。Windows版もあり利用可能だが正式サポートは無いとのこと
 * 事前に[Veleroプラグイン](https://www.ibm.com/docs/en/db2/11.5?topic=restore-installing-velero-plugin)をインストールしておく必要あり
 * 参考情報
     * https://www.ibm.com/docs/en/db2/11.5?topic=db2-velero-backup-restore
     * https://velero.io/docs/main/basic-install/

#### Db2uBackup, Db2uRestore
##### 利用条件
 * TechPreviewであるため、本番環境には利用不可
 * Db2 11.5.8.0-cn1 を利用していること
 * Db2uCluster カスタムリソースを利用していること
     * Db2uInstance カスタムリソースに対しては利用不可
 * 増分バックアップを取得する場合、データベース構成パラメータ TRACKMOD を YES に設定
 * 参考情報
     * [Technology preview of managing backup operations by using the Db2uBackup resource](https://www.ibm.com/support/pages/node/6962831)
     * [Technology preview of managing restore operations by using the Db2uRestore resource](https://www.ibm.com/support/pages/node/6962833)