~ 100 개의 호스트에 대한 간단한 Ansible 플레이 북의 합리적인 성능은 무엇입니까?


11

이전 cfengine2 설치를 대체하기 위해 Ansible을 살펴보기 시작했습니다. 다음과 같은 간단한 플레이 북이 있습니다.

  • sudoers 파일을 복사
  • 템플릿 화 된 resolv.conf를 복사합니다 (group_vars 및 host_vars 데이터와 함께 공급)
  • 몇 가지 서비스가 실행 중인지 확인
  • 로컬 사용자가 있는지 확인

플레이 북은 97 개의 머신 (1ms 미만의 LAN 대기 시간으로 빠른 1gig 또는 10gig 네트워킹을 통해 연결된)에 대해 실행하는 데 4 분 이상의 월 클럭 시간이 소요되며 2 코어 4G 메모리 VM에서 CPU의 50 % 이상을 소비합니다. 그것을 실행.

단일 시스템에 대해 실행하는 데 약 11 초가 걸리고 약 4 초의 사용자 + 시스템 CPU 시간이 소비되며 TBH는 여전히 관련 작업량에 비해 약간 과도한 것으로 보입니다.

명백한 비트 :

  • Playbook-dir 로컬 ansible.cfg에서 파이프 라인을 명시 적으로 활성화했습니다.
  • jsonfile에 사실 캐싱이 가능하고 동일한 로컬 ansible.cfg가 있습니다.
  • 포크를 50으로 설정했습니다 (다른 값을 시도했습니다)
  • Ansible이 Paramiko가 아닌 SSH를 사용하고 영구 제어 소켓을 사용하고 있다고 확신합니다. 실행 중에 SSH 프로세스가 시작되고 지속되는 것을 볼 수 있습니다.

이 수준의 성능이 정상입니까 아니면 설정에 문제가 있습니까? 그렇다면 어떻게 결정해야합니까?

편집 : 2017 년 8 월 현재이 문제가 계속 발생합니다. Ansible 버전은 2.2.1이며 플레이 북 크기가 커졌습니다. 최신 번호 :

  • 호스트 98 명
  • ansible -m ping all 실제 4.6 초, 사용자 3.2 초, 시스템 시간 2.5 초 소요
  • 전체 플레이 북을 실행하는 데 100 % 사용자와 ~ 35 %의 시스템 CPU를 사용하여 4 분이 소요됩니다 (2 코어 VM 배포 서버에서 100 %는 전체 CPU 1 개임)
  • 대상 OS는 대부분 CentOS 7, 일부 CentOS 6
  • 프로파일 링시 특정 작업 핫스팟이 표시되지 않습니다

플레이 북이 훨씬 커졌지 만 여전히 플레이 북 서버의 CPU로드 수준을 정당화 할 수있는 요소가 없다고 생각합니다. 벽시계 시간 일 수도 있지만 배포 서버는 대부분의 실행에서 유휴 상태 여야합니다. 내가 볼 수있는 한, 그것은 주로 파일 사본이며 일부 템플릿 확장입니다.

우리는 host / groupvars를 상당히 광범위하게 사용하고 있습니다.

여러 사람들이 프로파일 링, 프로파일 링 실행의 꼬리에 대해 물었습니다.

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 환경에서 일반적 임). 이는 관리 서버 및 관리중인 노드에도 적용됩니다.
Cameron Kerr

4GB RAM이있는 관리 VM에는 포크 = 20, 파이프 라이닝 = True가 있습니다. ansible -i all all -m ping300 개가 넘는 호스트 (대부분 VM)에 비해 1 분 미만이 소요되었습니다. 플레이 북이 사용자를 변경하기 위해 어떤 일을하고 있습니까 (beome / sudo 등). '-m ping'의 성능은 어떻습니까? 경험에 따르면 50 포크에 더 많은 메모리를 원한다고 말하고 싶습니다.
Cameron Kerr

대상 운영 체제는 무엇입니까?
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[defaults] 아래 에서 해당 조치를 스쿼시 하십시오.

예 : squash_actions = yum,pip,bar


답장을 보내 주셔서 감사합니다. 우리는 이미 전략을 사용하고 있습니다 : 자유롭고 사실을 수집하는 것이 플레이 북에 필요한 것이므로 실제로 작동하지 않습니다. 내 대답에서 언급했듯이 이미 파이프 라이닝을하고 있습니다.
user53814

프로파일 링을 켠 상태에서 @ user53814, 가장 시간이 오래 걸리는 것은 무엇입니까? 사용중인 ansible 버전으로 질문을 업데이트 할 수 있습니까?
xddsg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.