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
フィールドで定義されます。各プロファイルには、バックアップ操作を構成するname
andプロパティが必要です。dumpInstance
バックアップ ストレージは、現場のプロファイルごとに構成されdumpInstance.storage
ます。指定する必要があるプロパティは、使用しているストレージのタイプによって異なります。
S3 ストレージ
MySQL オペレーターは、バックアップを S3 互換オブジェクト ストアに直接アップロードできます。この方法を使用するには、資格情報を含むaws
CLI 構成ファイルを含む 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 オペレーターは、必要に応じてバックアップから新しいデータベース インスタンスを復元できるため、災害からの復旧が容易になります。
コメントを残す