【S3へのバックアップとリストア編】Kubernetes mariadb-operatorでクラウドネイティブなDB運用

目次

はじめに

今回は、mariadb-operatorのバックアップ及びリストアについて検証しました。
mariadb-operatorは、クラウドネイティブな環境でMariaDBを効率的に運用するためのツールです。以下のように、柔軟で便利なバックアップ機能があります。
mariadb-operator/mariadb-operator: Run and operate MariaDB in a cloud native way

  • 柔軟なストレージ構成。ボリューム拡張。
  • バックアップを作成、復元、スケジュールします。
  • 複数のバックアップ ストレージ タイプ: S3 互換、PVC、Kubernetes ボリューム。
  • bzip および gzip圧縮オプションを使用したポリシー駆動型のバックアップ保持。
  • ターゲット復旧時間: 指定された時間に最も近い利用可能なバックアップを復元します。
  • バックアップ、S3、PVC などから新しいインスタンスをブートストラップします。

また、インストール方法につきまして、前回ブログで紹介しておりますので良ければ先にご参照いただけますと幸いです。
Kubernetes mariadb-operatorでクラウドネイティブなデータベース運用【構築編】

mariadb-operatorのインストール

今回の検証用に新しくmariadb-operatorというNamespaceを作成します。

mariadb-operatorをHelmチャートからインストールします。

インストールされたことの確認です。

後で使うので、Gitリポジトリをクローンしておきます。

MariaDB Galera Clusterの作成

バックアップ検証用のMariaDBリソースをGalera Cluster構成で作成していきます。

パスワード用のSecretを事前に作成しておきます。

MariaDBリソースを作成します。

  • rootPasswordSecretKeyRef:先ほど作成したSecret名を指定します。
  • replica:Galera Cluster構成の場合は、3台以上にする必要があります。
    • galeratrueを指定してGalera Clusterを有効化します。

作成してしばらく待つと、mariadb-galeraというMariaDBリソースが起動します。

テストデータ投入

色々やり方はあると思いますが、深くは考えずに原始的なやり方でデータ投入しようと思います。

接続用にPodを作成して、Sakila Sample Database をインポートします。

接続に使用するホスト名は、MariaDBリソースと同時に作成されるサービス名を指定することができます。
クラスター内部接続用のmariadb-galera-internalを用いて、mariadb-galera-internal.mariadb-operator.svc.cluster.localとDNS名を指定します。

プライマリに接続していることがhostnameから確認できます。

MariaDBターミナルはそのままにしておき、
別のターミナルを立ち上げて、データインポート用SQLファイルをコピーします。

MariaDBターミナルに戻り、sourceコマンドでインポートします。
sakilaデータベースの存在が確認できました。

S3互換ストレージへバックアップ

バックアップは、大きく分けて3種類のストレージタイプがサポートされています。

  • S3互換ストレージ
  • PVC(Persistent Volume Claim)
  • その他のKubernetesでネイティブサポートされているボリューム

今回の検証では、S3互換ストレージのMinIOを使用していきます。

事前にMinIO用のアクセスキーなどのSecretを作成します。

MinIOおよびmcクライアントのインストール

MinIOは、mariadb-operatorのGitリポジトリに同梱されているmakeコマンドで簡単にインストールできるようになっています。

Namespaceなど、今回の検証用に少しスクリプトを修正してから行います。

makeコマンドにより必要なリソースが自動的に作成されたことが確認できます。

ポートフォワードしてホストOSから接続できるようにします。

MinIO のデフォルト認証情報を取得し、mcクライアント接続用のエイリアスを作成します。

mcクライアントを公式リファレンス MinIO Client — MinIO Object Storage for Linux を参考にインストールします。

これで、mcクライアントが使えるようになりました。

フルバックアップ

まずフルバックアップの取得方法です。
Backupリソースを作成します。

  • args:バックアップは、mariadb-dumpを内部的に実行する論理バックアップとなっています。mariadb-dumpのすべてのオプションをサポートしているわけではありませんが一部は使えるようです。ここでは--single-transaction --all-databases --verboseを指定しています。
    • 物理バックアップは実装されておらず、今後のアップデートに期待です。
  • schedule.cron:時刻を指定して、CronJobを作成することが可能になっています。検証のため、1分間隔でバックアップを取得します。
  • mariaDbRef.name:対象のMariaDBリソースの名前を指定します。
  • storage:S3ストレージの情報を指定しています。
    • storage.s3.prefix:MinIOのプレフィックスを指定します。
  • stagingStorage:S3ストレージを使用する場合に必要です。Podのローカルストレージがいっぱいになるのを回避するため、別途PVCにステージング領域を定義します。

Backupリソースの作成が確認できます。
作成後は、CronJobによって1分ごとにバックアップジョブが作成され続けます。

MinIOストレージにもファイルが保管されていることが確認できました。

リストア

ブートストラップ機能

ブートストラップ機能を使って、取得したバックアップをリストアし新規MariaDBリソースを作成することが可能です。
MariaDBのクローンを作成するイメージを持ってもらえば良いと思います。

  • bootstrapFrom:先ほど取得したバックアップの情報を指定します。
    • bootstrapFrom.restoreJob.args:バックアップ時同様にmariadb-dumpの追加オプションを指定できます。ここでは--verboseオプションを指定しています。
    • bootstrapFrom.targetRecoveryTime:リカバリしたい日時を指定します。指定した日付以前で取得したバックアップがリストアに使用されるようになります。

すべてのPodが起動し終えたら、リストアジョブが開始されます。

リストアジョブが完了したら、無事にMariaDBを使用開始することができます。

ちゃんとsakilaデータベースがリストアされた状態で作成されていました。

部分バックアップ・部分リストア

部分バックアップ

mariadb-dumpのオプションではなく、Backupリソースには専用のdatabasesフィールドが用意されていますので、そちらを使用して部分バックアップが取得可能です。

  • databases:バックアップしたいデータベースを複数指定できます。
  • args--all-databasesオプションは外しておきましょう。

MinIOストレージにもファイルが保管されていることが確認できました。

部分リストア

リストア対象のsakilaデータベースを削除しておきます。

Restoreリソースを作成します。

  • database:注意点として、部分バックアップ作成時は複数指定が可能でしたが、部分リストアでは単一のデータベースしか指定できません。またフィールド名も単数形になっています。

残念ながら作成エラーとなってしまいました。

エラーメッセージを読むと、sakilaデータベースが存在していないのが原因のようです。

リストア対象のデータベースを事前に作成しておきます。

一旦削除し、先ほどと同じものを再作成します。

リストアジョブが完了していました。

中のデータがリストアされていることを確認しました。

まとめ

今回はバックアップ及びリストアについて検証しました。
現在も新機能開発が盛んに行われているようですので、物理バックアップ機能やPITR機能など、mariadb-operatorの今後の改良に期待大ですね。

ロードマップは以下から確認できるので、是非チェックしてみてください。
mariadb-operator/ROADMAP.md at main · mariadb-operator/mariadb-operator

 

スマートスタイルTECHブログについて

スマートスタイルTECHブログでは、日頃オープンソースデータベースのサポート業務に従事している有資格者で構成された技術サポートチームがMariaDBに関する技術情報を発信しています。データベースのお困りごとはお気軽にご相談下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次