Яка розумна ефективність для простої ігрової книги Ansible проти ~ 100 господарів?


11

Ми починаємо шукати Ansible для заміни старої установки cfengine2. У мене є проста книжка, яка:

  • копіює файл судорів
  • копіює шаблонні зображення resv.conf (подається з даними group_vars та host_vars)
  • перевіряє запуску пари служб
  • перевіряє наявність місцевого користувача

У програмі триває 4 хвилини настінного годинника для роботи з 97 машинами (всі підключені через швидку мережу на 1 або 10 г, з затримкою локальної мережі під-1 мс) і споживають понад 50% процесора на 2-ядерній 4G пам'яті VM, коли я працює його.

Для роботи на одній машині потрібно близько 11 секунд, при цьому витрачається близько 4 секунд CPU користувача + sys, який TBH все ще здається трохи надмірним за обсяг роботи.

Очевидні біти:

  • У моєму конвеєрі явно ввімкнено місце в програмі playbook-dir local ansible.cfg
  • У мене ввімкнено кешування на jsonfile, такий же локальний ansible.cfg
  • У мене вилки встановлені на 50, те саме (я спробував інші значення)
  • Я впевнений, що Ansible використовує SSH, а не Paramiko, а він використовує стійкий керуючий гніздо - я бачу, як процеси SSH починаються та зберігаються під час запуску.

Це рівень продуктивності нормальний чи щось не в моєму налаштуванні? Як я можу вирішити, що робити, якщо так?

Редагувати: Станом на серпень 2017 року ми все ще спостерігаємо цю проблему. Відповідна версія - 2.2.1, і розмір ігрової книги тепер збільшився. Актуальні номери:

  • 98 господарів
  • ansible -m ping all займає 4,6s реального, 3,2s користувача, 2,5s sys разів
  • повний запуск програвача займає 4 хвилини, використовуючи 100% користувачів та ~ 35% системного процесора, роблячи це (для двоядерного розгортання VM, 100% - одного повного процесора)
  • цільова ОС значною мірою CentOS 7, деякі CentOS 6
  • Профілювання не виявляє жодних точних точок завдання AFAICT

Хоча ігрова книга зараз набагато більша, я все ще не думаю, що є щось там, щоб виправдати цей рівень завантаження процесора на сервері ігрової книги - можливо, час настінного годинника, але сервер розгортання повинен бути значною мірою непрацюючим протягом більшої частини ходу, наскільки я бачу, це переважно копії файлів та деякі розширення шаблонів.

Зауважимо, ми досить широко використовуємо хост / групуварів

Кілька людей запитали про профілювання, хвіст пробігу з профілюванням:

Tuesday 01 August 2017  16:02:24 +0100 (0:00:00.539)       0:06:22.991 ******** 
=============================================================================== 
yumrepo : centos repos -------------------------------------------------- 9.77s
sshd : copy CentOS 6 sshd config ---------------------------------------- 7.41s
sshd : copy CentOS 7 sshd config ---------------------------------------- 6.94s
core : ensure core packages are present --------------------------------- 6.28s
core : remove packages on VM guests ------------------------------------- 5.39s
resolv : stop NetworkManager changing resolv.conf ----------------------- 5.25s
yumrepo : epel6 gpg key ------------------------------------------------- 3.94s
yumrepo : epel7 gpg key ------------------------------------------------- 3.71s
yumrepo : nsg gpg key --------------------------------------------------- 3.57s
resolv : build resolv.conf ---------------------------------------------- 3.30s
yumrepo : nsg repo ------------------------------------------------------ 2.66s
resolv : check NetworkManager running ----------------------------------- 2.63s
yumrepo : psp repo ------------------------------------------------------ 2.62s
yumrepo : ucs repo ------------------------------------------------------ 2.44s
yumrepo : epel repo ----------------------------------------------------- 2.27s
resolv : check for nmcli ------------------------------------------------ 2.08s
core : remove various unwanted files ------------------------------------ 1.42s
telegraf : write telegraf.conf file ------------------------------------- 1.13s
core : copy sudoers in place -------------------------------------------- 0.94s
core : ensure sshd is running ------------------------------------------- 0.90s

4
Зробіть кілька профілів за допомогою ANSIBLE_CALLBACK_WHITELIST=profile_tasksі для більш ретельного налагодження ANSIBLE_DEBUG=1. Також зверніть пильну увагу на початковій швидкості з'єднання ssh.
Костянтин Суворов

Погодьтеся з коментарем @KonstantinSuvorov - в партії може бути один господар, який займає чимало часу на певне завдання. Виділивши завдання за допомогою_файлів profile_tasks, ви зможете вивчити виконання цих завдань на своїх хостах і побачити, яке з них є найдовшим. Ви також можете виконати тривіальне завдання, наприклад "command: w" проти всіх хостів, щоб побачити, що це потребує очікуваної кількості часу.
andyhky

1
Перевірте голодування ентропії. watch cat /proc/sys/kernel/random/entropy_availпоки працює ігрова книга. Якщо його менше, ніж 1000, у вас є потенційна проблема; якщо його менше, ніж сказати 64, і не відновиться, то у вас є визначене питання ентропії голоду. (поширений у деяких середовищах VM). Це стосується вашого сервера управління, а також вузлів, якими ви керуєте.
Кемерон Керр

У мене в управлінні VM з 4 ГБ оперативної пам’яті, у мене вилки = 20 і конвеєрна = True. ansible -i all all -m pingпроти понад 300 господарів (в основному VM) зайняли досить менше 1 хвилини. Чи робить Ваша книжка для читання щось, щоб змінити користувача (стати / судо / тощо). Що таке "-m ping"? На основі досвіду я б сказав, що ви хочете мати більше пам’яті на 50 вил.
Кемерон Керр

яка ваша цільова операційна система?
xddsg

Відповіді:


1

у вашому ansible.cfgнаборі наступне:

[defaults]

# profile each task
callback_whitelist = profile_tasks

# [don't validate host keys](http://docs.ansible.com/ansible/intro_configuration.html#host-key-checking)
host_key_checking = False

[ssh_connection]
pipelining = True

Також у своїй ігровій книжці встановіть стратегію як "безкоштовну"

- hosts: all
  strategy: free
  tasks: [...]

Нарешті, відключіть збирання фактів у вашій програві: gather_facts: false

Якщо після профілювання ви бачите багато цього:

TASK [pip foo]
ok: [10.192.197.252] => (item=ansible)
ok: [10.192.197.252] => (item=boto)
ok: [10.192.197.252] => (item=boto3)
ok: [10.192.197.252] => (item=passlib)
ok: [10.192.197.252] => (item=cryptography)

пригнічуйте ці дії ansible.cfgпід [за замовчуванням]:

напр squash_actions = yum,pip,bar


Дякую за відповідь. Ми вже використовуємо стратегію: зібрання безкоштовних фактів я боюсь, що потрібні ігрові книги, тож насправді це не спрацює. Як було зазначено у моїй відповіді, я вже роблю конвеєрні роботи.
user53814

@ user53814 з увімкненим профілюванням, що займає найбільше часу? чи можете ви оновити своє запитання за допомогою версії ansible, яку ви використовуєте?
xddsg
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.