我有一系列编号的文件要由每个服务器单独处理。每个拆分文件使用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/
...
答案 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>
此选项有很多种选择,包括beanstalkd,Celery,Gearman和SQS。你必须做腿部工作,找出哪一种最适合你的情况。但这绝对是最适合您问题的架构。