MySQL Kubernetes オペレーター クラスターをバックアップする方法

MySQL Kubernetes オペレーター クラスターをバックアップする方法

Oracle MySQL Operator for Kubernetes は、クラスターでの MySQL データベースのプロビジョニングを自動化する便利な方法です。Operator の主な機能の 1 つは、回復力を高める自動バックアップの組み込みサポートです。バックアップは、定期的なスケジュールでデータベースを外部ストレージにコピーします。

この記事では、Amazon S3 互換のオブジェクト ストレージ サービスへのバックアップを設定する方法を学びます。また、Oracle Cloud Infrastructure (OCI) ストレージまたはクラスター内のローカル永続ボリュームにバックアップを保存する方法についても学習します。

データベース クラスタの準備

Kubernetes クラスターに MySQL ステートメントをインストールし、テスト用の単純なデータベース インスタンスを作成します。以下の YAML をコピーして、次の場所に保存しますmysql.yaml

Kubectl を使用してマニフェストを適用します。

$ kubectl apply -f mysql.yaml

MySQL オペレーターがモジュールを準備するまで数分待ちます。Kubectl コマンドget podsを使用して進行状況を確認します。実行中の 4 つのモジュールが表示されます。1 つの MySQL ルーター インスタンスと 3 つの MySQL サーバー レプリカです。

$ kubectl get pods

NAME READY STATUS RESTARTS AGE

mysql-cluster-0 2/2 Running 0 2m

mysql-cluster-1 2/2 Running 0 2m

mysql-cluster-2 2/2 Running 0 2m

mysql-cluster-router-6b68f9b5cb-wbqm5 1/1 Running 0 2m

バックアップ スケジュールの決定

MySQL ステートメントでは、バックアップを正常に作成するために 2 つのコンポーネントが必要です。

  • バックアップの実行時期を決定するバックアップ スケジュール。
  • MySQL の保存場所とエクスポート オプションを構成するバックアップ プロファイル。

スケジュールとプロファイルは、互いに独立して作成されます。これにより、同じプロファイルを使用して、異なるスケジュールで複数のバックアップを実行できます。

各スケジュールとプロファイルは、特定のデータベース クラスターに関連付けられています。オブジェクト内にネストされたリソースとして作成されInnoDBClusterます。MySQL ステートメントで作成する各データベースには、独自のバックアップ構成が必要です。

バックアップ スケジュールはspec.backupSchedules、データベース フィールドによって決まります。各要素にはschedule、cron 式を使用してバックアップをいつ実行するかを示すフィールドが必要です。以下は、1 時間ごとにバックアップを実行する例です。

このフィールドbackupProfileNameは、使用されているバックアップ プロファイルを参照します。次のステップで作成します。

バックアップ プロファイルの作成

プロファイルはspec.backupProfilesフィールドで定義されます。各プロファイルには、バックアップ操作を構成するnameandプロパティが必要です。dumpInstance

バックアップ ストレージは、現場のプロファイルごとに構成されdumpInstance.storageます。指定する必要があるプロパティは、使用しているストレージのタイプによって異なります。

S3 ストレージ

MySQL オペレーターは、バックアップを S3 互換オブジェクト ストアに直接アップロードできます。この方法を使用するには、資格情報を含むawsCLI 構成ファイルを含む Kubernetes シークレットを作成する必要があります。

に次のコンテンツを追加しますs3-secret.yaml

独自のアクセス キーと S3 シークレットに置き換えてから、Kubectl を使用してシークレットを生成します。

$ kubectl apply -f s3-secret.yaml

secret/s3-secret created

storage.s3次に、次のフィールドをバックアップ プロファイル セクションに追加します。

  • bucketName– バックアップをダウンロードする S3 バケットの名前。
  • prefix– ダウンロードしたファイルにプレフィックスを適用するには、これを設定します/my-app/mysql。プレフィックスを使用すると、ごみ箱内にフォルダー ツリーを作成できます。
  • endpoint– S3 と互換性のあるサードパーティのストレージを使用している場合は、サービス プロバイダーの URL として設定します。Amazon S3 を使用している場合は、このフィールドを省略できます。
  • config– 認証情報ファイルを含むシークレットの名前。
  • profile– 資格情報ファイルで使用する構成プロファイルの名前。これはdefault、上記の例で設定されています。

完全な例を次に示します。

このマニフェストを適用すると、S3 アカウントへの 1 時間ごとのデータベース バックアップが有効になります。

OCI ストレージ

オペレーターは、S3 の代替として Oracle Cloud Infrastructure (OCI) オブジェクト ストレージをサポートします。同じように構成されています。まず、OCI 資格情報のシークレットを作成します。

storage.ociObjectStorage次に、次のセクションを使用してバックアップ プロファイルを構成します。

bucketNameおよびフィールドを変更してprefix、OCI アカウントのダウンロード場所を指定します。このフィールドcredentialsは、OCI クレデンシャルを含むシークレットを参照する必要があります。

バルク Kubernetes ストレージ

ローカル永続ボリュームは、3 番目のストレージ オプションです。バックアップ データは引き続き Kubernetes クラスター内にあるため、これは安全性が低くなります。ただし、1 回限りのバックアップとテストには役立ちます。

まず、永続ボリュームとそれに付随するクレームを作成します。

このマニフェストの例は、本番環境での使用には適していません。Kubernetes ディストリビューションに適したストレージ クラスとボリューム マウント モードを選択する必要があります。

storage.persistentVolumeClaim次に、フィールドを追加して、永続ボリュームを使用するようにバックアップ プロファイルを構成します。

このフィールドは、以前に作成された永続ボリューム要求を参照しclaimNameます。MySQL ステートメントは、バックアップ データをボリュームに配置します。

バックアップ オプションの設定

バックアップは、MySQL シェルユーティリティを使用して作成されます。デフォルトでは、サーバーの完全なダンプをエクスポートします。この形式では、各テーブルの構造と断片化されたデータ ファイルが書き込まれます。出力は zstd を使用して圧縮されます。 dumpInstance

MySQL ステートメント バックアップ プロファイルのフィールドdumpInstance経由でフィールド経由でオプションを渡すことができます。dumpOptions

この例では、チャンク出力を無効にし、テーブルごとに 1 つのデータ ファイルを作成し、zstd 圧縮ではなく gzip に切り替えます。利用可能なオプションの完全なリファレンスは、MySQL のドキュメントにあります。

バックアップの復元

MySQL オペレータは、以前に作成したファイルを使用して、新しいデータベース クラスタを初期化できますdumpInstance。これにより、バックアップを Kubernetes クラスターに直接復元できます。これは、復旧状況や既存のデータベースを Kubernetes に移行する場合に役立ちます。

データベースの初期化はspec.initDB、オブジェクトのフィールドによって制御されInnoDBClusterます。このセクションではdump.storage、オブジェクトを使用して、前に使用したバックアップの場所を参照します。dumpInstance.storage形式は、バックアップ プロファイル オブジェクトの同等のフィールドに対応します。

dumpInstanceこの YAML ファイルを適用すると、指定された S3 バケットの出力で初期化される新しいデータベース クラスターが作成されます。このフィールドprefixには、ごみ箱内のダンプ ファイルへのフル パスが含まれている必要があります。オペレーターが作成したバックアップは、タイムスタンプ付きのフォルダーに自動的に保存されます。プレフィックスを設定して、復元するものを指定する必要があります。永続ボリュームから復元する場合は、pathの代わりに フィールドを使用してprefixください。

概要

Oracle MySQL オペレーターは、Kubernetes クラスターでの MySQL データベース管理を自動化します。この記事では、完全なデータベース ダンプを永続ボリュームまたはオブジェクト ストレージ セグメントに格納するようにオペレーター バックアップ システムをセットアップする方法を学習しました。

Kubernetes を使用して MySQL をスケールアウトすると、フォールト トレランスが向上しますが、クラスターが危険にさらされたり、データが誤って削除されたりした場合に備えて、外部バックアップが依然として必要です。MySQL オペレーターは、必要に応じてバックアップから新しいデータベース インスタンスを復元できるため、災害からの復旧が容易になります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です