第 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 镜像。如果您不确定您部署的版本,请参阅 Command Generator 和 playbook gcp_get_aoc_version 以了解有关 Clouds 部署的当前版本的更多信息。

    注意

    在拉取 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.20240215
    $ docker pull $IMAGE --platform=linux/amd64
注意

如果您的基础部署版本不是 2.4.20240215-00,请参阅 Clouds version 列中的 Released 版本页面上的 表。在 IMAGE 环境变量的 Ansible-on-clouds-ops 容器镜像列中找到要使用的相应操作镜像

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 和数据库备份。

流程

  1. 在 Google Cloud 控制台中进入 Cloud Storage Buckets
  2. 选择项目。
  3. Create
  4. 输入名称。
  5. 输入适合您的要求的数据位置。通过多和双区域,您可以对另一个区域进行恢复。
  6. 输入适合您要求的存储类。
  7. 输入适合您的要求的控制访问。
  8. 输入适合您的要求的数据保护。
  9. Create

故障排除

如果存储桶名称已在另一个项目中使用,则会引发错误。

10.1.5. 创建备份数据文件

流程

  1. 运行命令 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
  2. 运行此命令后,会创建一个 $(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

流程

  1. 要运行备份,请运行命令生成器来生成 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'
  2. 运行提供的备份命令来触发备份。

    $ 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'
  3. 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 允许您列出特定存储桶中的现有备份。

流程

  1. 使用配置文件模板填充 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
  2. 运行此命令后,会创建一个 $(pwd)/command_generator_data/backups_list.yml 模板文件。此模板文件类似于以下内容:

    gcp_backup_list:
      cloud_credentials_path:
      extra_vars:
        gcp_bucket_backup_name:
  3. 要运行备份,请运行命令生成器来生成 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>'
  4. 运行提供的 backup 命令,以触发备份列表。
  5. 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_delete playbook 删除单个备份。
  • 使用 gcp_backups_delete playbook 一次性删除多个备份。

gcp_backups_delete 使用字符串 ["backup1","backup2",…​] 的数组,而 gcp_backup_delete 只需要一个字符串,它是特定备份的名称 "backup1"。

本节描述了 gcp_backups_delete 的使用。

流程

  1. 使用配置文件模板填充 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
  2. 运行此命令后,会创建一个 $(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 才能成功删除。

  1. 要删除备份,请运行命令生成器来生成 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'
  2. 运行提供的备份命令以删除备份。
  3. 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. 修复失败的备份删除

如果删除备份失败,请执行以下操作:

流程

  1. 导航到包含备份的存储桶。
  2. 找到具有备份名称的目录。
  3. 打开备份目录。
  4. 使用备份名称删除该目录。
  5. 删除带有 .json 扩展名的备份名称的文件。
  6. 导航到 Filestore Backup
  7. 使用与备份相同的名称删除 Filestore 备份。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部