对于可容纳约100位主机的简单Ansible剧本,合理的性能是什么?


11

我们开始考虑用Ansible替换旧的cfengine2安装。我有一本简单的剧本:

  • 复制一个sudoers文件
  • 复制模板化的resolv.conf(由group_vars和host_vars数据提供)
  • 检查几个服务是否正在运行
  • 检查本地用户的存在

该剧本需要4分钟的挂钟时间才能在97台计算机上运行(所有设备都通过1gig或10gig快速网络连接,LAN延迟不到1ms),并且在使用2核4G内存VM时消耗了50%以上的CPU运行它。

在单台计算机上运行大约需要11秒钟,而用户+系统的CPU时间消耗了大约4秒钟,对于所涉及的工作量来说,TBH似乎仍然有些多余。

明显的位:

  • 我在playbook-dir本地ansible.cfg中显式启用了管道
  • 我实际上已启用对jsonfile的缓存,相同的本地ansible.cfg
  • 我将叉子设置为50,相同(我尝试了其他值)
  • 我确定Ansible使用的是SSH,而不是Paramiko,并且使用的是持久控制套接字-我可以看到SSH进程正在启动并在运行过程中持久存在。

这种性能水平正常吗?或者我的设置有问题吗?如果可以,我该如何确定呢?

编辑:截至2017年8月,我们仍然看到此问题。Ansible版本为2.2.1,并且剧本的大小现已增加。最新数字:

  • 98位房东
  • ansible -m ping all 实际需要4.6秒,用户需要3.2秒,系统时间为2.5秒
  • 完整的剧本运行需要4分钟,同时使用100%的用户和约35%的系统CPU(在2核VM部署服务器上,其中100%是一个完整的CPU)
  • 目标操作系统主要是CentOS 7,有些是CentOS 6
  • 分析没有显示任何特定的任务热点AFAICT

尽管剧本现在更大了,但我仍然认为其中没有任何东西可以证明剧本服务器上的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连接速度。
Konstantin Suvorov

同意@KonstantinSuvorov的评论-可能有很多主机在某个任务上花费大量时间。使用profile_tasks隔离任务后,您可以检查在主机上仅运行那些任务,并查看最长的任务。您还可以对所有主机运行一个琐碎的任务,例如“ command:w”,以查看它花费了预期的时间。
andyhky

1
检查熵饥饿。watch cat /proc/sys/kernel/random/entropy_avail当剧本正在运行时。如果小于1000,则可能存在问题。如果它的值小于64并且无法恢复,则说明您存在绝对的饥饿问题。(在某些VM环境中很常见)。这适用于您的管理服务器以及您要管理的节点。
卡梅隆·克尔

在具有4GB RAM的管理VM上,我的forks = 20,流水线设置为True。ansible -i all all -m ping针对300多个主机(主要是VM)进行的操作不到1分钟。您的剧本是否正在做任何更改用户的操作(变成/ sudo /等等)。“ -m ping”的性能如何?根据经验,我想说您希望有更多的存储空间来存储50个分叉。
卡梅隆·克尔

您的目标操作系统是什么?
xddsg

Answers:


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


谢谢回复。我们已经在使用strategy:free和事实收集,恐怕这是剧本所需要的,所以这实际上没有用。如我的回答所述,我已经在做流水线工作了。
user53814

@ user53814启用了概要分析后,花费最多的时间是什么?您可以使用正在使用的ansible版本更新问题吗?
xddsg
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.