【问题标题】:How can you run more than one simultaneous job in Ansible Tower?如何在 Ansible Tower 中同时运行多个作业?
【发布时间】:2015-01-16 18:23:17
【问题描述】:

似乎所有作业都已入队,一次只能运行一个。我们如何运行多个?

【问题讨论】:

  • 这是一个很好的问题。确实可以通过接受的回复或一些反馈来更新我们的答案。

标签: ansible ansible-awx


【解决方案1】:

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

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

【讨论】:

  • 您是否在文档中找到此信息?如果发了,能发个链接吗?
  • 我不确定这在哪里或是否记录在案。这是来自个人经验。自从我发布此答案以来已经过去了大约 9 个月,我不确定发生了什么变化(如果有的话),因为我目前的职位没有使用 Tower。
  • 我设法在 Ansible Tower 中找到了一些关于并行化的文档:docs.ansible.com/ansible-tower/2.4.5/html/userguide/…
  • 我的是条件 1。谢谢!不过这很糟糕,因为我的工作是通过回调运行的,所以我需要在启动时更新库存。因此,如果我有来自多个节点的多个作业进行回调,这将减慢速度。
  • 我遇到了完全相同的问题@einarc。我的解决方案是停止回调,而是通过将 userdata 脚本传递给我的 EC2 实例来在本地运行 playbook。不是一个理想的解决方案,但它是一些东西。
【解决方案2】:

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

【讨论】:

  • 嗯......也许这是一个许可证的事情?您介意分享您拥有的许可证类型吗?在 10 服务器评估许可证上,这是不可能的。
  • 我怀疑这是一个配置问题。我不知道在哪里。
  • 答案是共享同一个 Inventory 或 SCM 源的作业不能同时运行。
  • 这并不完全正确。只要不针对相同的主机,它们就可以共享相同的清单。 (如果清单 A 具有组 B 和 C,则作业 D 可以针对组 B 运行,而作业 E 针对组 C 运行)例外情况是,如果您尝试在正在运行的作业 D 和作业 E 之间更新清单。清单更新将具有等待,所以作业 E 无法运行。
【解决方案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 是“每个任务”

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

大卫·桑顿

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

【讨论】:

  • 是的,您的编辑是真正的问题:我喜欢 awx/ansible 塔式服务器中的并行性。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多