第 9 章 备份和恢复
要备份和恢复 Ansible Automation Platform 部署,务必要确保为 EFS 设置了自动备份,并可以恢复这些备份。
当您创建 Ansible Automation Platform 部署时,默认自动 Amazon Elastic File System (EFS)备份。但是,请务必检查这些备份是否可以在灾难发生前恢复。
另外,还需要确保进行 Amazon Relational Database Service (RDS)的常规手动快照,以确保部署可以尽可能接近其以前的工作状态。
9.1. 备份 Ansible Automation Platform 部署 复制链接链接已复制到粘贴板!
使用以下步骤确保一个平稳的备份过程。
9.1.1. AWS 权限 复制链接链接已复制到粘贴板!
在开始备份过程前,用于执行备份的 AWS 帐户必须具有以下权限:
要验证权限或调试权限拒绝问题,AWS IAM Policy Simulator 会很有帮助。
| Service/Permission | Resources |
|---|---|
| backup
| |
| cloudformation
| |
| elasticfilesystem
| |
| iam
| arn:aws:iam::*:`role/service-role/AWSBackupDefaultServiceRole` |
| rds
| |
| secretsmanager
| |
| s3
|
9.1.2. 设置 ansible-on-clouds-ops 容器镜像 复制链接链接已复制到粘贴板!
ansible-on-clouds-ops 镜像标签应与您的基础部署版本匹配。例如,如果您的基础部署版本是 2.4.20230630-00,请使用标签 2.4.20230630 拉取 ansible-on-clouds-ops 镜像。
流程
使用与基础部署相同的标签版本拉取
ansible-on-clouds-ops容器镜像。注意在拉取 docker 镜像前,请确保使用 docker 登录到 registry.redhat.io。使用以下命令登录到 registry.redhat.io。
docker login registry.redhat.io
$ docker login registry.redhat.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 registry 登录的更多信息,请参阅 Registry 身份验证
export IMAGE=registry.redhat.io/ansible-on-clouds/ansible-on-clouds-ops-rhel9:2.4.20230630 docker pull $IMAGE --platform=linux/amd64
$ export IMAGE=registry.redhat.io/ansible-on-clouds/ansible-on-clouds-ops-rhel9:2.4.20230630 $ docker pull $IMAGE --platform=linux/amd64Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.1.3. 生成备份数据文件 复制链接链接已复制到粘贴板!
以下命令创建一个目录,并在备份过程中使用空数据模板填充空数据模板。
流程
创建存放配置的文件夹
mkdir command_generator_data
$ mkdir command_generator_dataCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用配置文件模板填充
command_generator_data文件夹。这会在command-generator_data目录中创建backup.yml文件。注意在 Linux 上,命令生成器创建的任何文件或目录默认归
root:root所有。要更改文件和目录的所有权,您可以在创建文件后运行sudo chmod命令。如需更多信息,请阅读 命令生成器 - 由 root 拥有的 Linux 文件。docker run --rm -v $(pwd)/command_generator_data:/data $IMAGE \ command_generator_vars aws_backup_stack \ --output-data-file /data/backup.yml
$ docker run --rm -v $(pwd)/command_generator_data:/data $IMAGE \ command_generator_vars aws_backup_stack \ --output-data-file /data/backup.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行这些命令后,会创建一个
$(pwd)/command_generator_data/backup.yml模板文件。此模板文件类似于以下内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.1.4. 更新备份数据文件 复制链接链接已复制到粘贴板!
在触发备份前,您必须填充数据文件。以下变量是数据文件中列出的参数。
-
ansible_config_path(可选)仅在用客户ansible_config覆盖时才使用。 -
cloud_credentials_path是 AWS 凭证文件的路径。 -
DEPLOYMENT_NAME是基础部署的名称。这是部署基础时使用的相同名称。 aws_backup_iam_role_arn是 AWS IAM 角色的 Amazon 资源名称 (ARN),具有执行备份操作的权限。注意您可以使用 AWS Backup Default Service Role,其格式为
arn:aws:iam::<Your AWS Account Number>:role/service-role/AWSBackupDefaultServiceRole。aws_backup_vault_name是保存 EFS 恢复点的备份库的名称。注意请确保引用的备份库存在,并且上面提供的 AWS Backup IAM 角色具有在密码库中创建 EFS 恢复点所需的权限。
-
aws_region是部署基础部署的区域。 -
aws_s3_bucket是存储备份文件的 S3 存储桶的名称。这会创建一个新存储桶(如果尚不存在)。每个备份都存储在存储桶中。
有关存储桶命名的指导,请参阅 Bucket 命名规则。
有关创建 S3 存储桶的指导,请参阅 AWS 创建存储桶。 aws_ssm_bucket_name是存储 AWS SSM 的临时配置文件的 S3 存储桶的名称。您可以使用现有存储桶或创建新存储桶。注意aws_ssm_bucket_name参数仅适用于存储临时配置文件。不需要保存它以便在其他 playbook 中使用。可以使用任何有效的现有存储桶。有关创建 S3 存储桶的更多信息,请参阅 AWS 文档中的 AWS 创建 A Bucket。-
backup_prefix是您要添加到备份名称的前缀(默认:oc-backup)
填充数据文件后,它应类似于以下内容:此文件中的值作为示例提供:
可选值 ansible_config_path 已被删除。如果您不想使用这个可选值并希望使用这个变量的默认值,'must' 还为您的数据文件删除它,如下例所示。如果要使用这个可选变量,则需要 'must' 包含在数据文件中,并分配一个值。
9.1.5. 运行备份 playbook 复制链接链接已复制到粘贴板!
以下流程将备份 playbook 作为容器运行。
流程
要运行备份,请运行命令生成器。
docker run --rm -v $(pwd)/command_generator_data:/data $IMAGE command_generator aws_backup_stack --data-file /data/backup.yml
$ docker run --rm -v $(pwd)/command_generator_data:/data $IMAGE command_generator aws_backup_stack --data-file /data/backup.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这会生成 backup CLI 命令
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行生成的命令以触发备份。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据数据库大小,备份可能需要几分钟才能完成。成功备份会返回类似如下的日志:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - AWS Marketplace 部署的 Ansible Automation Platform 现在已被成功备份。如日志所示,playbook 在上面指定的 S3 存储桶中成功创建一个备份文件夹。
9.1.6. 删除备份 复制链接链接已复制到粘贴板!
删除备份有两个 playbook:
-
使用
aws_backup_deleteplaybook 删除单个备份。 -
使用
aws_backups_deleteplaybook 一次性删除多个备份。
aws_backups_delete 使用字符串 ["backup1","backup2",…] 的数组,而 aws_backup_delete 只需要一个字符串,它是特定备份的名称 "backup1"。
本节中介绍了 aws_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 aws_backups_delete --output-data-file /data/backups_delete.yml
docker run --rm -v $(pwd)/command_generator_data/:/data $IMAGE command_generator_vars aws_backups_delete --output-data-file /data/backups_delete.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成以下输出:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行此命令后,会创建一个
$(pwd)/command_generator_data/backups_delete.yml模板文件。此模板文件类似于以下内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
aws_backup_names 参数必须指定字符串数组,例如 ["backup1","backup2 "]。delete 参数必须设置为 true 才能成功删除。
要删除备份,请运行命令生成器来生成
aws_backups_delete命令。docker run --rm -v $(pwd)/command_generator_data:/data $IMAGE command_generator aws_backups_delete --data-file /data/backups_delete.yml
docker run --rm -v $(pwd)/command_generator_data:/data $IMAGE command_generator aws_backups_delete --data-file /data/backups_delete.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 会产生以下 ouput:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 运行提供的备份命令以删除备份。
playbook 运行后,输出类似于以下内容:
TASK [redhat.ansible_on_clouds.standalone_aws_backup_delete : [delete_backup] Dry-run message] *** skipping: [localhost] PLAY RECAP ********************************************************************* localhost : ok=21 changed=2 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
TASK [redhat.ansible_on_clouds.standalone_aws_backup_delete : [delete_backup] Dry-run message] *** skipping: [localhost] PLAY RECAP ********************************************************************* localhost : ok=21 changed=2 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.1.6.1. 无法删除备份 复制链接链接已复制到粘贴板!
如果删除备份失败,请执行以下步骤。
流程
- 导航到包含备份的存储桶。
- 找到具有备份名称的目录。
- 打开备份目录。
-
打开文件名
restore-vars.json,并记录Recovery_Point_ARN和Backup_Vault_Name的最后一部分。 - 进入 AWS 备份。
- 选择 Backup Vault。
-
使用您从
Backup_Vault_Name记录的名称选择 vault。 -
搜索
Recovery_Point_ARN。 -
删除
Recovery_Point_ARN(如果尚未删除)。 - 导航到包含备份的存储桶。
- 删除具有备份名称的目录。