~ 100 मेजबानों के खिलाफ एक सरल Ansible playbook के लिए उचित प्रदर्शन क्या है?


11

हम एक पुरानी cfengine2 स्थापना को बदलने के लिए Ansible को देखना शुरू कर रहे हैं। मेरे पास एक सरल प्लेबुक है:

  • एक sudoers फ़ाइल की प्रतिलिपि बनाता है
  • प्रतियां एक अस्थायी resolv.conf (group_vars और host_vars डेटा के साथ खिलाया)
  • कुछ सेवाओं की जाँच चल रही है
  • एक स्थानीय उपयोगकर्ता की उपस्थिति के लिए जाँच

97 से अधिक मशीनों (सभी उपवास 1gig या 10gig नेटवर्किंग से जुड़ी, उप -1ms LAN विलंबता के साथ) चलाने के लिए प्लेबुक 4 मिनट से अधिक का समय लेता है और 2-कोर 4 जी मेमोरी वीएम पर 50% से अधिक सीपीयू खपत करता है। इसे चला रहे हैं।

एक मशीन के खिलाफ चलने में लगभग 11 सेकंड लगते हैं, लगभग 4 %ecec उपयोगकर्ता के साथ + sys CPU समय लगता है, जिसमें टीबीएच अभी भी शामिल काम की मात्रा के लिए थोड़ा अधिक लगता है।

स्पष्ट बिट्स:

  • मेरे पास प्लेबुक-डीआईआर स्थानीय ansible.cfg में स्पष्ट रूप से सक्षम पाइपलाइनिंग है
  • मेरे पास jsonfile को सक्षम करने के लिए तथ्य कैशिंग है, वही स्थानीय ansible.cfg
  • मेरे पास 50 पर सेट कांटे हैं, मैंने (मैंने अन्य मूल्यों की कोशिश की है)
  • मुझे यकीन है कि एंसिबल SSH नहीं Paramiko का उपयोग कर रहा है और यह लगातार नियंत्रण सॉकेट का उपयोग कर रहा है - मैं देख सकता हूँ कि SSH प्रक्रियाएं शुरू हो रही हैं और रन के दौरान बनी रहती हैं।

क्या प्रदर्शन का यह स्तर सामान्य है या मेरे सेटअप में कुछ गड़बड़ है? मैं यह निर्धारित करने के बारे में कैसे जा सकता हूं कि यदि हां, तो क्या होगा?

संपादित करें: अगस्त 2017 तक, हम अभी भी इस समस्या को देख रहे हैं। अस्थिर संस्करण 2.2.1 है और प्लेबुक का आकार अब बड़ा हो गया है। अप-टू-डेट नंबर:

  • 98 मेजबान
  • ansible -m ping all 4.6s वास्तविक, 3.2s उपयोगकर्ता, 2.5 ss बार लेता है
  • 100% उपयोगकर्ता और ~ 35% सिस्टम CPU का उपयोग करते हुए एक पूर्ण प्लेबुक रन में 4 मिनट लगते हैं (2-कोर VM परिनियोजन गंभीर होने पर, 100% एक पूर्ण CPU हो रहा है)
  • लक्ष्य OS काफी हद तक 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 की टिप्पणी से सहमत हों- इसमें एक ही मेजबान हो सकता है जो किसी निश्चित कार्य में काफी समय ले रहा हो। एक बार जब आप कार्य को प्रोफाइल_टैस्क के साथ अलग कर लेते हैं तो आप अपने मेजबानों पर सिर्फ उन कार्यों को चलाने की जांच कर सकते हैं और यह देख सकते हैं कि कौन सा कार्य सबसे लंबा है। आप सभी कमांड के खिलाफ "कमांड: डब्ल्यू" जैसे एक तुच्छ कार्य भी चला सकते हैं, यह देखने के लिए कि इसमें अपेक्षित समय लगता है।
andyhky

1
एन्ट्रापी भुखमरी की जाँच करें। watch cat /proc/sys/kernel/random/entropy_availजबकि प्लेबुक चल रही है। यदि इसका 1000 से कम कहना आपके लिए संभावित मुद्दा है; यदि इसका कम से कम 64 कहना और ठीक नहीं होता है, तो आपके पास एक निश्चित एंट्रॉपी भुखमरी का मुद्दा है। (कुछ वीएम वातावरण में आम)। यह आपके प्रबंधन सर्वर और आपके द्वारा प्रबंधित किए जा रहे नोड्स पर भी लागू होता है।
कैमरून केर

4 जीबी रैम के साथ मेरे प्रबंधन वीएम पर, मेरे पास फॉर्क्स = 20 और पाइपलाइनिंग = ट्रू है। ansible -i all all -m ping300 से अधिक मेजबानों (ज्यादातर वीएम) के मुकाबले 1 मिनट से भी कम समय लगा। क्या आपकी प्लेबुक उपयोगकर्ता को बदलने के लिए कुछ भी कर रही है (बन / sudo / आदि)। --म पिंग ’कैसा प्रदर्शन करता है? मैं अनुभव के आधार पर कहूंगा कि आप 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


उत्तर के लिए धन्यवाद। हम पहले से ही रणनीति का उपयोग कर रहे हैं: स्वतंत्र और तथ्य एकत्रित करना मुझे डर है कि कुछ ऐसी चीज़ों की आवश्यकता होती है, जो वास्तव में काम नहीं करती हैं। जैसा कि मेरे जवाब में उल्लेख किया गया है कि मैं पहले से ही पाइपलाइनिंग कर रहा हूं।
उपयोगकर्ता 53814

@ user53814 प्रोफाइलिंग चालू होने के साथ, सबसे अधिक समय लग रहा है? क्या आप अपने द्वारा उपयोग किए जा रहे ansible के संस्करण के साथ अपने प्रश्न को अपडेट कर सकते हैं?
xddsg
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.