Ansible:将一个唯一文件复制到组中的每个服务器

时间:2016-07-16 20:35:23

标签: linux bash ansible ansible-playbook

我有一系列编号的文件要由每个服务器单独处理。每个拆分文件使用linux split然后xz压缩以节省传输时间。

vector_1 <- l[vector_1]

如何将这些文件推送到一组包含ansible的30台服务器?只要每个文件都有一个唯一的文件,哪个服务器获取哪个文件都无关紧要。

我曾使用过bash文件,但我正在寻找更好的解决方案。希望使用ansible。然后我计划运行一个shell命令来运行at命令来启动几个小时或几天的计算。

split_001 split_002 split_003 ... split_030

http://docs.ansible.com/ansible/copy_module.html

scp -oStrictHostKeyChecking=no bt_5869_001.xz usr13@<ip>:/data/
scp -oStrictHostKeyChecking=no bt_5869_002.xz usr13@<ip>:/data/
scp -oStrictHostKeyChecking=no bt_5869_003.xz usr13@<ip>:/data/
...

2 个答案:

答案 0 :(得分:3)

例如:

  tasks:
    - set_fact:
        padded_host_index: "{{ '{0:03d}'.format(play_hosts.index(inventory_hostname)) }}"

    - copy: src=/mine/split_{{ padded_host_index }}.xz dest=/data/

答案 1 :(得分:1)

你可以用Ansible做到这一点。然而,这对我来说似乎是错误的一般方法。

你有很多工作。您需要对它们进行处理,并且您不关心哪个服务器处理哪个作业,只要它们只处理每个作业一次(理想情况下尽可能高效地完成整个批处理)。这正是分布式排队系统设计用于工作的情况。

您将在每个服务器上运行工作程序,并且一个主节点(可以在其中一个服务器上运行)知道所有工作程序。当您需要添加要完成的任务时,您将使用主服务器对其进行排队,并且主服务器在工作人员可用时将它们分发给工作人员 - 因此您不必担心将相同数量的服务器作为作业。 / p>

此选项有很多种选择,包括beanstalkdCeleryGearmanSQS。你必须做腿部工作,找出哪一种最适合你的情况。但这绝对是最适合您问题的架构。