อะไรคือประสิทธิภาพที่สมเหตุสมผลสำหรับเพลย์บุ๊ค Ansible แบบธรรมดาเทียบกับโฮสต์ 100 ~


11

เราเริ่มมองหา Ansible เพื่อแทนที่การติดตั้ง cfengine2 แบบเก่า ฉันมี playbook ง่ายๆที่:

  • คัดลอกไฟล์ sudoers
  • คัดลอก templated resolv.conf (ป้อนด้วย group_vars และข้อมูล host_vars)
  • ตรวจสอบบริการสองอย่างที่กำลังทำงานอยู่
  • ตรวจสอบการมีอยู่ของผู้ใช้ท้องถิ่น

playbook ใช้เวลา wallclock นานกว่า 4 นาทีในการรันกับเครื่อง 97 เครื่อง (เชื่อมต่อผ่านเครือข่าย 1gig หรือ 10gig ที่รวดเร็วด้วยความหน่วงแฝงของ LAN ย่อย 1 มิลลิวินาที) และใช้ซีพียูกว่า 50% บน VM 2-core memory VM เมื่อฉัน ใช้มัน

ใช้เวลาประมาณ 11 วินาทีในการทำงานกับเครื่องเดียวโดยใช้เวลาประมาณ 4sec ของ user + sys CPU ซึ่ง TBH ยังดูเหมือนว่าจะมากเกินไปสำหรับปริมาณงานที่เกี่ยวข้อง

บิตที่ชัดเจน:

  • ฉันเปิดใช้งาน Piping อย่างชัดเจนใน playbook-dir local ansible.cfg
  • ฉันมีความจริงแคชเพื่อ jsonfile เปิดใช้งาน ansible.cfg ท้องถิ่นเดียวกัน
  • ฉันส้อมตั้งไว้ที่ 50 เหมือนกัน (ฉันได้ลองค่าอื่น ๆ แล้ว)
  • ฉันแน่ใจว่า Ansible กำลังใช้ SSH ไม่ใช่ Paramiko และใช้ซ็อกเก็ตการควบคุมแบบถาวร - ฉันสามารถเห็นกระบวนการ SSH ที่เริ่มต้นและคงอยู่ในระหว่างการรัน

ระดับประสิทธิภาพนี้ปกติหรือผิดปกติกับการตั้งค่าของฉันหรือไม่ ฉันจะไปพิจารณาเกี่ยวกับอะไรถ้าเป็นเช่นนั้น?

แก้ไข: เมื่อวันที่สิงหาคม 2017 เรายังคงพบปัญหานี้ Ansible version 2.2.1 และขนาดของ playbook ได้เติบโตขึ้นแล้ว หมายเลขล่าสุด:

  • 98 โฮสต์
  • ansible -m ping all ใช้เวลาจริง 4.6 วินาทีผู้ใช้ 3.2 วินาที 2.5 ครั้งระบบ
  • การเรียกใช้ playbook แบบเต็มใช้เวลา 4 นาทีโดยใช้ผู้ใช้ 100% และ CPU ระบบ ~ 35% ในขณะที่ทำ (ในการปรับใช้ VM แบบ 2 คอร์ 100% เป็น CPU แบบเต็มหนึ่งเครื่อง)
  • ระบบปฏิบัติการเป้าหมายเป็นส่วนใหญ่ CentOS 7 บาง CentOS 6
  • การทำโปรไฟล์ไม่เปิดเผยฮอตสปอตของงาน specifc ใด ๆ AFAICT

ถึงแม้ว่าตอนนี้ playbook จะใหญ่กว่ามาก แต่ฉันก็ยังไม่คิดว่าจะมีเหตุผลอะไรที่จะพิสูจน์ระดับของการโหลดซีพียูในเซิร์ฟเวอร์ playbook - เวลา wallclock บางที แต่เซิร์ฟเวอร์การปรับใช้นั้นจะไม่ได้ทำงานเป็นส่วนใหญ่ เท่าที่ฉันเห็นส่วนใหญ่เป็นไฟล์คัดลอกและขยายเทมเพลต

โปรดทราบว่าเราใช้โฮสต์ / กลุ่มกลุ่มอย่างกว้างขวาง

มีหลายคนถามเกี่ยวกับการทำโปรไฟล์หางวิ่งด้วยการทำโปรไฟล์:

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 เริ่มต้น
Konstantin Suvorov

เห็นด้วยกับความคิดเห็นของ @KonstantinSuvorov- อาจมีโฮสต์เดียวในล็อตที่ใช้เวลานานในงานบางอย่าง เมื่อคุณแยกงานด้วย profile_tasks คุณสามารถตรวจสอบการทำงานเพียงแค่งานเหล่านั้นบนโฮสต์ของคุณและดูว่างานใดงานหนึ่งที่ยาวที่สุด นอกจากนี้คุณยังสามารถเรียกใช้งานที่ไม่สำคัญเช่น "command: w" กับโฮสต์ทั้งหมดเพื่อดูว่าต้องใช้เวลานาน
andyhky

1
ตรวจสอบความหิวโหยเอนโทรปี watch cat /proc/sys/kernel/random/entropy_availในขณะที่ playbook ทำงาน หากน้อยกว่า 1,000 คำคุณมีปัญหาที่อาจเกิดขึ้น; ถ้ามันน้อยกว่าที่บอกว่า 64 และไม่สามารถกู้คืนได้กว่าที่คุณมีปัญหาความอดอยากเอนโทรปีแน่นอน (พบได้ทั่วไปในบางสภาพแวดล้อม VM) สิ่งนี้ใช้กับเซิร์ฟเวอร์การจัดการของคุณและโหนดที่คุณกำลังจัดการ
คาเมรอนเคอร์

ในการจัดการ VM ของฉันพร้อม 4GB RAM ฉันมี forks = 20 และ pipelining = True ansible -i all all -m pingเทียบกับโฮสต์กว่า 300 (ส่วนใหญ่เป็น VM) ใช้เวลาน้อยกว่า 1 นาที Playbook ของคุณทำอะไรเพื่อเปลี่ยนผู้ใช้ (กลายเป็น / sudo / ฯลฯ ) '-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

นอกจากนี้ใน playbook ของคุณกำหนดกลยุทธ์เป็น 'ฟรี'

- 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 เมื่อเปิดการทำโปรไฟล์สิ่งที่ใช้เวลามากที่สุดคืออะไร? คุณสามารถอัปเดตคำถามของคุณกับเวอร์ชันของสิ่งที่คุณกำลังใช้อยู่หรือไม่?
xddsg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.