Veleroを利用したディザスタリカバリについて説明します。
本番環境と災害対策環境で以下を準備してください。本番環境においては本機能を有効化する前までに、また災害対策環境においては本機能を利用してリストアする前までに以下を準備する必要があります。
VeleroCLIのインストール
Veleroインストール
FEPOperatorのインストール
StorageClassやnamespace、CRDなどシステム構築に必要なリソース
FEPClusterで静的なPVを利用する場合は、災害対策環境へリストアする前にPVを用意してください。本番環境と異なるストレージクラスや証明書などを使用する場合は、本番環境と同名のストレージクラスや証明書を災害対策環境に用意してください。ただし、データベースのバックアップデータの格納先であるオブジェクトストレージの証明書やシークレットが本番環境と災害対策環境で異なる場合は、異なる名前を設定してください。詳細は、“オペレーターリファレンス”の“FEPClusterパラメータ”を参照してください。
本機能は、x86のみに対応しています。
本機能を有効化して、本番環境から災害対策環境へディザスタリカバリを実行する手順を説明します。また、災害対策環境から本番環境へ再びディザスタリカバリを実行する手順を説明します。
FEPClusterとFEPPool2のLOGボリュームは、復元できません。本機能を使用する前に、必ず本番環境と災害対策環境の両方で事前にテストおよび検証を実施してください。
本機能を使用するためには、本番環境のFEPClusterカスタムリソースの通常の設定に加え、以下を設定してKubernetes上に配備してください。詳細は、“オペレーターリファレンス”の“FEPClusterパラメータ”を参照してください。
fep.velero.enable
fep.velero.labels
fep.velero.backup
fep.velero.restore
fepChildCrVal.backup
例)FEPClusterカスタムリソースの定義例
spec: fep: velero: enable: true labels: backup-dev: my-backup1 backup-dep: my-backup2 backup: pgbackrestParams: | [global] repo1-retention-full=5 repo1-retention-full-type=count repo2-retention-full=5 repo2-retention-full-type=count log-path=/database/log/backup log-level-file=debug repo2-path=/ velero-backup/ velero-backup-for-dr2 repo2-s3-bucket=my-s3-backet repo2-s3-endpoint=s3.ap-northeast-1.amazonaws.com repo2-s3-region=ap-northeast-1 repo2-type=s3 pgbackrestKeyParams: | repo2-s3-key=XXXXXXXXXX repo2-s3-key-secret=YYYYYYYYYY caName: DR-objectstorage-cert repoKeySecretName: XXX resotre: image: image: “XXX-amd64” pullPolicy: IfNotPresent mcSpec: limit: cpu: 200m memory: 300Mi request: cpu: 100m memory: 200Mi restoreTargetRepo: 2 fepChildCrVal: backup: pgbackrestParams: | [global] repo1-retention-full=5 repo1-retention-full-type=count repo2-retention-full=5 repo2-retention-full-type=count log-path=/database/log/backup log-level-file=debug repo2-path=/ velero-backup/ velero-backup-for-dr1 repo2-s3-bucket=my-s3-backet repo2-s3-endpoint=s3.ap-northeast-1.amazonaws.com repo2-s3-region=ap-northeast-1 repo2-type=s3 pgbackrestKeyParams: | repo2-s3-key=XXXXXXXXXX repo2-s3-key-secret=YYYYYYYYYY caName: objectstorage-cert repoKeySecretName: ZZZ schedule: num: 1 schedule1: schedule: "0-59/3 * * * *" #schedule1.schedule type: "full" #schedule1.type repo: 2
本環境でFEPClusterを構築後、またはFEPClusterカスタムリソースを修正した後、以下のコマンドでFEPClusterカスタムリソースを含めたkubernetes上のリソースをオブジェクトストレージにバックアップします。
例)
velero backup create <バックアップの名前> --selector <バックアップ対象label>
本機能では、FEPClusterカスタムリソースのfep.velero.labelsで記述したラベルを指定し、ラベルが付与されているリソースのみをバックアップする、Veleroのバックアップコマンドのみサポートしています。それ以外のコマンドを実行すると、不要なリソースがバックアップ/リストアされ、構築やデータ復旧が失敗する可能性があります。ラベル指定時は、既存のラベルと混同しないように、以下のkeyは指定しないでください。
app
control-plane
name
pod-template-hash
vendor
app.kubernetes.io/component
app.kubernetes.io/instance
app.kubernetes.io/managed-by
app.kubernetes.io/name
app.kubernetes.io/part-of
control-plane
controller-revision-hash
fepclustername
feprole
statefulset.kubernetes.io/pod-name
controller-uid
job-name
pod-template-hash
release
本機能により、ラベルが付与されるのは以下のリソースです。
FEPClusterカスタムリソース
FEPCluster構築に必要なSecret
以下のリソースをVeleroを用いてバックアップする場合、各種カスタムリソースやカスタムリソースに指定したConfigMapやSecretにspec.fep.velero.labelsで指定したラベル(spec.fep.velero.labelsが省略されている場合はデフォルトのbackup-group: fep-backup)を付与してください。
FEPPgpool2
FEPExporter
FEPLogging
また、手動で作成したリソース(アプリケーションシステム、ConfigMap、Secretなど)は、spec.fep.velero.labelsで指定したラベル(spec.fep.velero.labelsが省略されている場合はデフォルトのbackup-group: fep-backu)を付与し、Veleroバックアップの対象にすることでバックアップできます。
Veleroコマンドの使用方法についての詳細は、公式ドキュメントを参照してください。
注意
FEPClusterなどのカスタムリソースを変更した場合、その都度、Veleroバックアップが必要です。データベースはオブジェクトストレージによりデータが最新の状態に復元されます。カスタムリソースが変更前の状態の場合、データベースと不整合が生じ、データの損失や性能の低下、セキュリティなどの問題を引き起こす可能性があります。
データベースのバックアップを定期的に実行してください。
災害発生などにより、本番環境で業務続行が不可能な場合、以下のコマンドでオブジェクトストレージに格納したFEPClueter カスタムリソースを含めたkubernetes上のリソースをリストアします。データベースのデータは、オブジェクトストレージに格納されたアーカイブWALの最新状態まで復元されます。
例)
velero restore create <リストアの名前> --from-backup <バックアップの名前>
Veleroコマンドの使用方法についての詳細は、公式ドキュメントを参照してください。
災害対策環境から本番環境へ再度、Veleroを用いて復元する場合、災害対策環境に配備されているFEPClusterカスタムリソースに修正が必要です。ディザスタリカバリ後のFEPClsuter カスタムリソースのfep.velero.backup, fep.velero.restore には、ディザスタリカバリ前の情報が定義されています。本番環境で使用するオブジェクトストレージの情報へ最新化してください。その後、災害対策環境でVeleroを用いたバックアップ、本番環境でVeleroを用いたリストアを実施してください。