第 10 章 备份和恢复
- 您必须使用与备份相同的操作镜像版本进行恢复。
- 要备份和恢复 Ansible Automation Platform 部署,务必要使现有 Ansible Automation Platform 管理 secret 名称和值记录在某个地方安全。
- 还需要对 Cloud SQL 数据库实例和 filestore 备份进行常规手动备份,以确保部署可以尽可能接近其以前的工作状态。
playbook 备份和恢复为来自 GCP Marketplace 基础部署的 Ansible Automation Platform 提供备份和恢复支持。
恢复过程会部署一个新的 Ansible Automation Platform,并将 filestore 和 SQL 数据库实例恢复到指定的备份。
10.1. 备份过程
备份允许您通过保存数据库和共享文件系统来备份您的环境。使用保存的共享文件系统在恢复过程中创建一个新环境。当新环境就位时,进程会恢复数据库。
备份和恢复过程必须使用相同的版本。如果使用早期版本执行备份,则必须使用该版本的恢复过程。然后,如果需要,您可以运行升级。
您还必须在升级前进行备份。如需更多信息,请参阅升级部署
备份过程涉及在给定时间点对 Cloud SQL 数据库和 filestore 实例进行备份。备份 playbook 需要运行 GCP Marketplace 基础部署的活跃 Ansible Automation Platform。
需要在项目中创建存储桶,因为恢复信息将存储在该存储桶中。
bucket 可以包含来自同一部署或不同的部署的多个备份。备份将生成一个名为 <prefix>-<deployment_name>-<timestamp> 的目录,以及名为 <prefix>-<deployment_name>-<timestamp>.json 的文件。目录包含 awx 和 pulp 数据库备份、部署配置和 secret。json 文件包含恢复过程的信息。
Playbook 通过 CLI 提供,以列出和删除备份。
以下流程描述了如何从 GCP Marketplace 部署备份 Ansible Automation Platform。
10.1.1. 拉取 ansible-on-clouds-ops 容器镜像
流程
使用与基础部署相同的标签,拉取
ansible-on-clouds-ops容器的 docker 镜像。注意在拉取 docker 镜像前,请确保使用 docker 登录到 registry.redhat.io。使用以下命令登录到 registry.redhat.io。
$ docker login registry.redhat.io
有关 registry 登录的更多信息,请参阅 Registry 身份验证
$ export IMAGE=registry.redhat.io/ansible-on-clouds/ansible-on-clouds-ops-rhel9:2.4.20230630 $ docker pull $IMAGE --platform=linux/amd64
10.1.2. 所需权限
您必须具有以下 GCP IAM 权限才能备份堆栈:
required-roles: Service Account User Compute Instance Admin (v1) required-permissions: compute.instances.list deploymentmanager.deployments.get deploymentmanager.manifests.get deploymentmanager.manifests.list deploymentmanager.resources.list file.backups.create file.operations.get iap.tunnelInstances.accessViaIAP storage.objects.create storage.objects.list
10.1.3. 设置环境
流程
创建用于存放配置文件的文件夹。
$ mkdir command_generator_data
10.1.4. 备份要求
您必须创建一个存储桶,将 Ansible 存储在云部署备份上。bucket 包含备份信息、secret 和数据库备份。
流程
- 在 Google Cloud 控制台中进入 Cloud Storage → Buckets
- 选择项目。
- 点 Create。
- 输入名称。
- 输入适合您的要求的数据位置。通过多和双区域,您可以对另一个区域进行恢复。
- 输入适合您要求的存储类。
- 输入适合您的要求的控制访问。
- 输入适合您的要求的数据保护。
- 点 Create
故障排除
如果存储桶名称已在另一个项目中使用,则会引发错误。
10.1.5. 创建备份数据文件
流程
运行命令 generator
command_generator_vars来生成backup.yml。注意在 Linux 上,命令生成器创建的任何文件或目录默认归
root:root所有。要更改文件和目录的所有权,您可以在创建文件后运行sudo chmod命令。如需更多信息,请阅读 命令生成器 - 由 root 拥有的 Linux 文件。docker run --rm -v $(pwd)/command_generator_data/:/data $IMAGE command_generator_vars gcp_backup_deployment --output-data-file /data/backup.yml
运行此命令后,会创建一个
$(pwd)/command_generator_data/backup.yml模板文件。此模板文件类似于以下内容:gcp_backup_deployment: cloud_credentials_path: deployment_name: extra_vars: backup_prefix: aoc-backup gcp_bucket_backup_name: gcp_compute_region: gcp_compute_zone:
10.1.6. backup.yml 文件中的参数
在触发备份前,您必须填充数据文件。以下变量是数据文件中列出的参数。
-
cloud_credentials_path是 Google Cloud 服务帐户凭证文件的路径。这必须是绝对路径。 -
DEPLOYMENT_NAME 是您要备份的 AAP 部署的名称。 -
backup_prefix是您要添加到备份名称的前缀(默认:oc-backup) -
gcp_bucket_backup_name是之前创建的用于备份的存储桶。 -
gcp_compute_region是部署基础部署的 GCP 区域。这可以通过检查 Deployment Manager 中的 Deployments 配置来检索。 -
gcp_compute_zone是部署基础部署的 GCP 区。这可以通过检查 Deployment Manager 中的 Deployments 配置来检索。
10.1.7. 运行备份 playbook
流程
要运行备份,请运行命令生成器来生成 backup 命令。
docker run --rm -v $(pwd)/command_generator_data:/data $IMAGE command_generator gcp_backup_deployment --data-file /data/backup.yml
会产生以下 ouput:
----------------------------------------------- Command to run playbook: docker run --rm --env PLATFORM=GCP -v </path/to/gcp/service-account.json>:/home/runner/.gcp/credentials:ro \ --env ANSIBLE_CONFIG=../gcp-ansible.cfg --env DEPLOYMENT_NAME=<deployment_name --env GENERATE_INVENTORY=true \ $IMAGE redhat.ansible_on_clouds.gcp_backup_deployment \ -e 'gcp_service_account_credentials_json_path=/home/runner/.gcp/credentials \ gcp_deployment_name=<deployment_name> gcp_compute_region=<region> gcp_compute_zone=<zone> \ gcp_bucket_backup_name=<bucket> backup_prefix=aoc-backup'
运行提供的备份命令来触发备份。
$ docker run --rm --env PLATFORM=GCP -v </path/to/gcp/service-account.json>:/home/runner/.gcp/credentials:ro \ --env ANSIBLE_CONFIG=../gcp-ansible.cfg --env DEPLOYMENT_NAME=<deployment_name --env GENERATE_INVENTORY=true \ $IMAGE redhat.ansible_on_clouds.gcp_backup_deployment \ -e 'gcp_service_account_credentials_json_path=/home/runner/.gcp/credentials \ gcp_deployment_name=<deployment_name> gcp_compute_region=<region> gcp_compute_zone=<zone> \ gcp_bucket_backup_name=<bucket> backup_prefix=aoc-backup'
playbook 运行后,输出类似于以下内容:
TASK [redhat.ansible_on_clouds.standalone_gcp_backup : [backup_deployment] Print the variable required to restore deployment my-deployment] *** ok: [localhost] => { "msg": [ "AAP on GCP Backup successful. Please note below the bucket name and backup name which are required for restore process.", "gcp_bucket_backup_name: my-bucket", "backup_name: aoc-backup-my-deployment-20230616T134002" ] } PLAY RECAP ********************************************************************* localhost : ok=38 changed=6 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
10.1.8. 列出备份
此 playbook 允许您列出特定存储桶中的现有备份。
流程
使用配置文件模板填充
command_generator_data目录。注意在 Linux 上,命令生成器创建的任何文件或目录默认归
root:root所有。要更改文件和目录的所有权,您可以在创建文件后运行sudo chmod命令。如需更多信息,请阅读 技术说明。docker run --rm -v $(pwd)/command_generator_data/:/data $IMAGE command_generator_vars gcp_backup_list --output-data-file /data/backups_list.yml
运行此命令后,会创建一个
$(pwd)/command_generator_data/backups_list.yml模板文件。此模板文件类似于以下内容:gcp_backup_list: cloud_credentials_path: extra_vars: gcp_bucket_backup_name:要运行备份,请运行命令生成器来生成 backup 命令。
docker run --rm -v $(pwd)/command_generator_data:/data $IMAGE command_generator gcp_backup_list --data-file /data/backups_list.yml
会产生以下 ouput:
----------------------------------------------- Command to run playbook: docker run --rm --env PLATFORM=GCP -v </path/to/gcp/service-account.json>:/home/runner/.gcp/credentials:ro \ --env ANSIBLE_CONFIG=../gcp-ansible.cfg $IMAGE redhat.ansible_on_clouds.gcp_backup_list \ -e 'gcp_service_account_credentials_json_path=/home/runner/.gcp/credentials gcp_bucket_backup_name=<bucket>'
- 运行提供的 backup 命令,以触发备份列表。
playbook 运行后,输出类似于以下内容:
TASK [redhat.ansible_on_clouds.standalone_gcp_backup_list : [list_backup] Display list of backups] *** ok: [localhost] => { "msg": [ "aoc-backup-deployment1-20230614T203926", "aoc-backup-deployment1-20230616T114134", "aoc-backup-deployment1-20230616T134002", "aoc-backup-deployment2-20230613T124127" ] } PLAY RECAP ********************************************************************* localhost : ok=11 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
10.1.9. 删除备份
删除备份有两个 playbook:
-
使用
gcp_backup_deleteplaybook 删除单个备份。 -
使用
gcp_backups_deleteplaybook 一次性删除多个备份。
gcp_backups_delete 使用字符串 ["backup1","backup2",…] 的数组,而 gcp_backup_delete 只需要一个字符串,它是特定备份的名称 "backup1"。
本节描述了 gcp_backups_delete 的使用。
流程
使用配置文件模板填充
command_generator_data目录。注意在 Linux 上,命令生成器创建的任何文件或目录默认归
root:root所有。要更改文件和目录的所有权,您可以在创建文件后运行sudo chmod命令。如需更多信息,请阅读 命令生成器 - 由 root 拥有的 Linux 文件。docker run --rm -v $(pwd)/command_generator_data/:/data $IMAGE command_generator_vars gcp_backups_delete --output-data-file /data/backups_delete.yml
运行此命令后,会创建一个
$(pwd)/command_generator_data/backups_delete.yml模板文件。此模板文件类似于以下内容:gcp_backups_delete: cloud_credentials_path: extra_vars: backup_names: delete: gcp_bucket_backup_name:
backup_names 参数必须指定字符串数组,例如 ["backup1","backup2 "]。delete 参数必须设置为 true 才能成功删除。
要删除备份,请运行命令生成器来生成
gcp_backups_delete'命令。docker run --rm -v $(pwd)/command_generator_data:/data $IMAGE command_generator gcp_backups_delete --data-file /data/backups_delete.yml
会产生以下 ouput:
----------------------------------------------- Command to run playbook: docker run --rm --env PLATFORM=GCP -v </path/to/gcp/service-account.json>:/home/runner/.gcp/credentials:ro \ --env ANSIBLE_CONFIG=../gcp-ansible.cfg $IMAGE redhat.ansible_on_clouds.gcp_backups_delete \ -e 'gcp_service_account_credentials_json_path=/home/runner/.gcp/credentials gcp_bucket_backup_name=<bucket> \ backup_names=<backup_names> delete=True'
- 运行提供的备份命令以删除备份。
playbook 运行后,输出类似于以下内容:
TASK [redhat.ansible_on_clouds.standalone_gcp_backup_delete : [delete_backup] Dry-run message] *** skipping: [localhost] PLAY RECAP ********************************************************************* localhost : ok=23 changed=2 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
10.1.10. 修复失败的备份删除
如果删除备份失败,请执行以下操作:
流程
- 导航到包含备份的存储桶。
- 找到具有备份名称的目录。
- 打开备份目录。
- 使用备份名称删除该目录。
-
删除带有
.json扩展名的备份名称的文件。 - 导航到 Filestore → Backup。
- 使用与备份相同的名称删除 Filestore 备份。