Назад к вопросам
Middle
99
questionbank

Как можно изменить выполнение задач плейбука на машинах с последовательного на параллельное?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Для изменения выполнения задач с последовательного на параллельное в Ansible можно использовать следующие подходы:

  1. Параметр serial: Позволяет выполнять плейбук на группе хостов подмножествами с заданным размером. Это не совсем параллельное выполнение всех хостов одновременно, но позволяет разделить группу на выполнение "партиями".

    # playbook.yml
    ---
    - name: Apply configuration
      hosts: webservers
      serial: 5 # Выполнять на 5 хостах одновременно
      tasks:
        - name: Update packages
          apt:
            name: '*'
            state: latest
    
  2. Параметр throttle: Ограничивает количество процессов, выполняющих конкретную задачу или блок одновременно. Применяется внутри задачи или блока.

    # playbook.yml
    ---
    - name: Apply configuration
      hosts: webservers
      tasks:
        - name: Deploy application
          command: /opt/deploy_app.sh
          throttle: 3 # Выполнять эту команду не более чем на 3 хостах одновременно
    
  3. Параметр free_strategy: Изменяет стратегию выполнения плейбука с default (последовательное выполнение задач на хосте) на free (задачи выполняются на хосте по мере их готовности, без ожидания завершения предыдущих задач на этом же хосте). Это влияет на выполнение задач в рамках одного хоста.

    # playbook.yml
    ---
    - name: Configure servers with free strategy
      hosts: all
      strategy: free
      tasks:
        - name: Install nginx
          ansible.builtin.apt:
            name: nginx
            state: present
        - name: Install redis
          ansible.builtin.apt:
            name: redis
            state: present
    
  4. Настройка параметра forks в ansible.cfg: Этот параметр управляет количеством параллельных процессов, которые ansible запускает для взаимодействия с хостами. Увеличение forks позволяет Ansible работать с большим количеством хостов одновременно.

    # ansible.cfg
    [defaults]
    forks = 30 # Увеличиваем количество параллельных процессов до 30
    
  5. Асинхронные задачи с пулингом (async и poll): Для задач, которые могут выполняться долго, можно использовать асинхронный режим. Ansible запускает задачу на удаленной машине и немедленно переходит к следующим хостам или задачам. Затем он периодически проверяет статус асинхронной задачи.

    # playbook.yml
    ---
    - name: Run long-running task asynchronously
      hosts: databases
      tasks:
        - name: Backup database
          command: /opt/backup_db.sh
          async: 1800 # Максимальное время выполнения в секундах (30 минут)
          poll: 15    # Как часто проверять статус задачи (каждые 15 секунд)
    

Наиболее прямой способ повлиять на параллелизм на уровне хостов в рамках выполнения плейбука (если не используется serial) - это использование параметра forks в конфигурации. Параметры strategy: free, serial, throttle и асинхронные задачи предоставляют более гранулированный контроль над порядком или одновременностью выполнения.

Метод Уровень применения Влияние
forks Конфигурация Ansible Максимальное количество параллельных хостов
serial Плейбук Выполнение группами (батчами)
throttle Задача/Блок Ограничение параллельных выполнений задачи
strategy: free Плейбук Параллельное выполнение задач в рамках хоста
async / poll Задача Асинхронный запуск задачи