9

似乎所有作业都已排队,并且一次只会运行一个。我们如何运行多个?

4

5 回答 5

8

Tower 旨在并行化作业,但在某些情况下它不会。

  1. 如果您将库存或 SCM 设置为“启动时更新”而没有缓存或缓存已过期,那么任何其他作业都将在库存或 SCM 更新之后等待等待。在当前运行的作业完成之前,库存和 SCM 不会更新。
  2. 如果您尝试针对同一主机运行多个作业:Tower 不会同时针对同一主机运行多个作业,以避免出现竞争条件。(本地主机是一个可能的例外)。如果您需要同时针对同一主机运行多个作业,那么您需要创建两个清单并将该主机放入两个清单中,针对不同的清单运行这两个作业。在这种情况下,Tower 不知道您正在针对同一主机运行。
于 2015-08-23T17:28:30.147 回答
4

共享相同 Inventory 或 SCM 源的作业不能同时运行。

于 2015-01-16T23:02:54.293 回答
3

假设您的工作由三个任务组成:

任务 1:“做 x”,任务 2:“做 y”,任务 3:“做 z”

使用 ansible,“do x”将在所有服务器上运行,然后“do y”将在所有服务器上运行,然后“do z”将在所有服务器上运行。

另外,我说“所有服务”,但实际上它在 ansible “forks”值时达到最大值,默认为 5。在我的 100 服务器环境中,我将此值设置为 20。更多信息请参见:http://docs。 ansible.com/intro_configuration.html#forks

请记住,ansible 的优势在于同时在多台机器上完成一项工作(一组任务)。如果您想要在一台机器上多次运行相同的任务,那么您需要类似 fork 或并行的东西。

事实上,Ansible 会尝试在多台机器上尽可能多地运行“do x”。您可以使用“serial”关键字( http://docs.ansible.com/playbooks_delegation.html#rolling-update-batch-size)调整此行为,让整个作业在部分机器上运行,然后在更多机器上开始)。

不是分叉和串行之间的细微差别。

  • forks 是“每个任务”

  • 串行是“每个作业”(任务集合)

大卫·桑顿

编辑:我重新阅读了你的问题。这是关于一次运行多个作业,而不是在作业中运行多个任务。所以我认为你对 ansible-awx 是正确的,但对命令行不正确。通过 Web 界面,您可以将作业提交到作业队列,但您不能让 ansible-awx 一次运行多个任务。我认为。但是通过命令行,如果您打开多个窗口,您可以同时运行多个 ansible-playbook。你有 ansible 支持帐户吗?恕我直言,这些人很棒,他们花了很多时间来回答我的问题(比如你的问题)。

于 2015-01-16T19:53:41.543 回答
1

可以从 Tower 执行同时作业。作业模板具有“启用并发作业”选项。请参阅http://docs.ansible.com/ansible-tower/latest/html/userguide/jobs.html上的“15.4. 作业并发”部分。

于 2017-07-28T17:51:50.367 回答
0

如果我在运行其所谓的同步模式管理的单个服务器上有 3 个不同的任务,则 3 个任务将分配给一个作业 ID,并且每个任务一个接一个地执行,如果它消耗大量时间。

在 Ansible 2.5 之后的版本中,我们可以为 3 个不同的任务获取 3 个作业 ID,并同时开始执行,这样可以节省大量时间。这种类型称为异步模式。

于 2018-10-04T10:51:55.903 回答