На скольких хостах, по умолчанию, Ansible позволяет одновременно выполнять сценарии
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Параллельное выполнение в Ansible: настройка и поведение по умолчанию
По умолчанию, Ansible позволяет одновременно выполнять задачи на 5 хостах. Это значение контролируется параметром forks в конфигурационном файле Ansible (ansible.cfg) или через соответствующую переменную среды/командную строку.
Механизм управления параллельностью (forks)
Параметр forks определяет максимальное количество параллельных процессов, которые Ansible может запустить для управления узлами. Это не строго соответствует «хостам», поскольку один процесс может обслуживать несколько хостов в рамках одного «batch», но на практике это ограничивает количество одновременно обрабатываемых целевых машин.
Пример расположения параметра в ansible.cfg:
[defaults]
forks = 5
Переопределение в командной строке:
ansible-playbook playbook.yml --forks 10
Почему используется такое значение и как его оптимизировать?
- Баланс производительности и нагрузки: Значение
5выбрано как безопасный компромисс между скоростью выполнения и нагрузкой на управляющую машину (контроллер Ansible) и сеть. - Связь с стратегией выполнения: Параметр
forksнапрямую влияет на стандартную стратегиюlinear, где задачи выполняются на всех хостах параллельно в рамках установленного количества процессов, но ожидают завершения на всех хостах перед переходом к следующей задати. - Оптимизация для больших инфраструктур: В средних и крупных средах значение
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 предоставляет гибкий набор инструментов для масштабирования выполнения в соответствии с требованиями инфраструктуры и конкретных операций.