问题描述
当前在一台虚拟机(VM)上运行着一个使用容器的 Ansible Tower(awx)实例。以下是容器的一些信息:
– awx_task_160dcb5340ca5:ansible/awx_task:latest
– awx_web_1e80aaddee738:ansible/awx_web:latest
– awx_postgres_154f20decccfe:postgres:9.6
– awx_rabbitmq_10e7ed8c75796:ansible/awx_rabbitmq:3.7.4
– awx_memcached_1:memcached:alpine
用户想知道如何备份他们的 awx 实例。他提出了以下备份方式的疑问:
a) 使用 ovf 导出整个虚拟机是否推荐?
b) 仅复制包含 pgdata 数据的卷是否足够?
c) 运行 docker exec
命令进行备份是否可行?
解决方案
请注意以下操作可能存在版本差异,做任何修改前建议做好备份。
对于备份 Ansible Tower(或 AWX)实例,主要需要关注备份 PostgreSQL 数据库和项目数据。以下是几种备份方案:
方案1: 复制卷
这是最简单的备份方法之一,适用于大多数情况。您只需复制包含 pgdata
和项目数据的卷。但要确保在复制目录之前停止 AWX 实例,特别是对于 PostgreSQL。
备份步骤:
1. 停止 AWX 实例:使用 docker-compose down
命令停止所有容器。
2. 复制 pgdata
和项目数据卷:使用类似以下命令复制这些卷的内容:
bash
cp -r /path/to/pgdata_backup /path/to/backup_destination
cp -r /path/to/projects_backup /path/to/backup_destination
3. 启动 AWX 实例:使用 docker-compose up -d
命令重新启动 AWX 容器。
方案2: 备份 PostgreSQL 数据库和项目
这种方法可以在 AWX 实例运行时进行备份,但在恢复时需要一些额外的步骤。
备份步骤:
1. 备份 PostgreSQL 数据库:运行以下命令备份数据库:
bash
docker exec -t <postgres_container_id> pg_dumpall -c -U postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql
将 <postgres_container_id>
替换为实际的 PostgreSQL 容器 ID。
2. 备份项目数据:将项目数据目录复制到备份位置。
恢复步骤:
1. 启动 PostgreSQL 容器:使用 docker-compose up -d postgres
启动 PostgreSQL 容器。
2. 恢复数据库备份:使用以下命令将备份导入到 PostgreSQL 容器中:
bash
cat dump_<timestamp>.sql | docker exec -i <postgres_container_id> psql -U postgres
3. 启动其他容器:使用 docker-compose up -d
命令启动其他 AWX 容器。
注意事项
- 如果您使用过 AWX 升级,备份在测试升级时快速回滚是至关重要的,因为升级可能会导致问题。
- 商业版的 Ansible Tower 在部署 playbook 中提供了备份功能。
以上方法基于 AWX 的一般经验,商业版 Ansible Tower 可能提供更多备份选项。请根据您的情况选择适当的备份策略。
希望这些建议对您做出明智的备份选择有所帮助!