我目前正在服务器之间迁移一些数据,需要确保复制一些数据目录,同时仍保留旧主机和新主机之间的映射。由于需要复制文件的主机数量庞大,我正在考虑使用 ansible 来执行此操作。
Ansible 主机文件示例:
[source_hosts]
olddb1
olddb2
olddb3
[destination_hosts]
newdb1
newdb2
newdb3
我想像这样在服务器之间复制文件:
olddbX:/var/opt/<unique dir with db in name>/data --> newdbX:/var/opt/<unique dir with db in name>/data
我见过许多使用 ansible.posix.synchronize 在两台服务器之间执行 rsync 的示例,但未在目录名称略有变化的服务器组之间执行 rsync 的示例。此外,我需要确保特定数据目录不会出现在错误的主机上。(即我需要 olddb1 的数据最终出现在 newdb1 上,依此类推...)
我的问题:
- 如何使用 ansible 同步服务器组之间的目录?
- 我该如何处理两端非静态的目录名称?
答案1
我没有看到在两个组之间轻松完成此操作的可能方法。同时,除非您有数千台主机,否则只需对您的库存进行一些重新设计即可轻松设置。这是一种可行的方法(未经测试,现场编写,可能需要进行一些调整,需要在源主机和目标主机上进行 rsync)
(请注意,我使用了 yaml,因为我觉得它更方便、更易读,但如果您愿意,也可以将其保留为 ini 格式)
inventories/prod/hosts.yml
---
db_hosts:
hosts:
newdb1:
source_host: olddb1
db_name: my_db1
newdb2:
source_host: olddb2
db_name: my_db2
newdb3:
source_host: olddb3
db_name: some_other_db
playbook.yml
---
hosts: db_hosts
tasks:
- name: Copy db files from old host
synchronize:
src: rsync://{{ source_host }}/var/opt/{{ db_name }}/data
dest: /var/opt/{{ db_name }}/data
欲了解更多信息并根据您的具体需求进行调整:https://docs.ansible.com/ansible/latest/collections/ansible/posix/synchronize_module.html