一个小例子来看下怎么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会超时,做了一次迁移之后性能大幅上升。
迁移前:
迁移后,调整pupept的运行间隔时间为10分钟:
机器是24核
由于前面的调整和验证,server本身性能有了很大的提升,agent端的运行基本都控制在分钟级内,排除puppet server的性能问题。
打开debug看agent端的运行情况puppetd --test --debug
可以看到是由于卡在rpm 相关的命令行上,手动运行rpm发现报错(由于rpm的本地数据库损坏导致,重新生成数据库后恢复正常)
另外,注意一个细节,通过puppet的service管理服务的状态时,是通过判断脚本的返回值实现的(即service xxx status的返回值),如果脚本的返回值有问题可能造成服务启动了,但是puppet仍然判断服务异常的情况,如果要实现使用puppet管理服务,需要service xxx status正常返回值。
1
2
3
4
|
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
|