← Назад к вопросам

На скольких хостах, по умолчанию, Ansible позволяет одновременно выполнять сценарии

1.3 Junior🔥 251 комментариев
#Ansible и управление конфигурацией

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Параллельное выполнение в Ansible: настройка и поведение по умолчанию

По умолчанию, Ansible позволяет одновременно выполнять задачи на 5 хостах. Это значение контролируется параметром forks в конфигурационном файле Ansible (ansible.cfg) или через соответствующую переменную среды/командную строку.

Механизм управления параллельностью (forks)

Параметр forks определяет максимальное количество параллельных процессов, которые Ansible может запустить для управления узлами. Это не строго соответствует «хостам», поскольку один процесс может обслуживать несколько хостов в рамках одного «batch», но на практике это ограничивает количество одновременно обрабатываемых целевых машин.

Пример расположения параметра в ansible.cfg:

[defaults]
forks = 5

Переопределение в командной строке:

ansible-playbook playbook.yml --forks 10

Почему используется такое значение и как его оптимизировать?

  1. Баланс производительности и нагрузки: Значение 5 выбрано как безопасный компромисс между скоростью выполнения и нагрузкой на управляющую машину (контроллер Ansible) и сеть.
  2. Связь с стратегией выполнения: Параметр forks напрямую влияет на стандартную стратегию linear, где задачи выполняются на всех хостах параллельно в рамках установленного количества процессов, но ожидают завершения на всех хостах перед переходом к следующей задати.
  3. Оптимизация для больших инфраструктур: В средних и крупных средах значение forks часто увеличивают до 10-50 или даже выше, чтобы сократить общее время выполнения playbook.
    -   **Факторы для увеличения:** Доступные ресурсы CPU/памяти на контроллере, пропускная способность сети, производительность целевых хостов и нагрузка на них.
    -   **Риски:** Чрезмерное увеличение может привести к перегрузке контроллера, сетевому congestion или превышению лимитов подключения на целевых хостах (например, SSH).

Альтернативные стратегии для масштабирования параллельности

Помимо увеличения forks, Ansible предлагает другие механизмы для управления выполнением на множестве хостов:

  • Стратегия free: Задачи выполняются на каждом хосте максимально независимо и быстро, без ожидания других хостов между задачами. Это часто значительно быстрее linear при большом количестве узлов.

    - name: Пример playbook со стратегией free
      hosts: all
      strategy: free
      tasks:
        - ...
    
  • Группировка хостов (serial): Позволяет разбить выполнение playbook на «бatches» указанного размера. Это полезно для обновлений с минимальным downtime или операций на кластерах.

    - name: Playbook для кластера
      hosts: webservers
      serial: 3  # Выполнит сначала на 3 хостах, затем на следующих 3, и т.д.
      tasks:
        - ...
    
  • Асинхронные задачи (async и poll): Для длительных операций можно запустить задачу в асинхронном режиме, что позволяет Ansible продолжить работу на других хостах, не блокируясь на ожидании.

    - name: Длительная операция
      command: /usr/bin/long_running_script
      async: 1200   # Максимальное время выполнения задачи (сек)
      poll: 0       # Не опрашивать статус (запустить и продолжить)
      register: async_result
    

Практические рекомендации

Для определения оптимального значения forks в вашей среде следует провести нагрузочное тестирование. Мониторинг ресурсов контроллера (CPU, память, сетевые соединения) во время выполнения playbook с разными значениями поможет найти баланс. В современных инфраструктурах с сотнями или тысячами узлов часто используют комбинацию: повышенное значение forks (например, 50) вместе со стратегией free и возможным применением serial для критических изменений.

Таким образом, хотя базовое ограничение составляет 5 параллельных процессов, Ansible предоставляет гибкий набор инструментов для масштабирования выполнения в соответствии с требованиями инфраструктуры и конкретных операций.