一个小例子来看下怎么debug puppet运行慢的问题。

一个小例子来看下怎么debug puppet运行慢的问题。

发现一台机器的agent运行比较缓慢,首先看下puppet server的整体性能:

puppet server使用了passenger+nginx的结构,性能比较稳定,接入1200台机器左右,passenger类似于php-fpm,可以设定启动的处理进程数等参数,用来调整server的性能。

比如参数passenger_max_pool_size,这个值的设置需要考虑两个因素,本身服务器的可用内存数(通过passenger-memory-stats查看每个进程占用的内存数量),是否有处理队列堆积(通过passenger-status查看)


机器之前是4核的cpu,user cpu全天都在90%以上,4核机器load 全天都在 20以上,client端运行puppet会超时,做了一次迁移之后性能大幅上升。

迁移前:

wKiom1QmznKwaJWtAAMHCa_Q2q0393.jpg

wKioL1QmzsuC57QGAANzW1BpRZo114.jpg

迁移后,调整pupept的运行间隔时间为10分钟:

机器是24核

wKioL1QmztuyupjXAAQHwKoGp9Y724.jpg

wKiom1QmzsXi-4FmAAPThFBdN8o785.jpg


由于前面的调整和验证,server本身性能有了很大的提升,agent端的运行基本都控制在分钟级内,排除puppet server的性能问题。

打开debug看agent端的运行情况puppetd --test --debug

可以看到是由于卡在rpm 相关的命令行上,手动运行rpm发现报错(由于rpm的本地数据库损坏导致,重新生成数据库后恢复正常)

另外,注意一个细节,通过puppet的service管理服务的状态时,是通过判断脚本的返回值实现的(即service   xxx status的返回值),如果脚本的返回值有问题可能造成服务启动了,但是puppet仍然判断服务异常的情况,如果要实现使用puppet管理服务,需要service xxx status正常返回值。

err: /Stage[main]/Hadoop::Hbase95::Install/Service[datanode]/ensure: 
change from stopped to running failed: Could not start Service[datanode]: 
Execution of '/sbin/service datanode start' returned 127:  
at /etc/puppet/modules/hadoop/manifests/hbase95.pp:129