如何使用 ansible 同步服务器组之间的目录?

如何使用 ansible 同步服务器组之间的目录?

我目前正在服务器之间迁移一些数据,需要确保复制一些数据目录,同时仍保留旧主机和新主机之间的映射。由于需要复制文件的主机数量庞大,我正在考虑使用 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

相关内容