目前产线服务器数量大约高峰在1.6-1.8W台VM+BM,平时在1.2W左右, 批量同步的时候会发生非常严重的惊群效应,有时候一台主机可能6小时都不会成功同步一次,可以做一些调整避免类似情况。
版本
之前产线使用的是puppet3,相比之前puppet2来说性能已经提高了50%,但在使用过puppet4之后只能感叹4真香,更别提现在的5了,所以选择puppet的时候尽量还是选择高版本的puppet,虽然客户端性能提高不大,但master端还是提高的非常给力的。
并发
但即使选择了高版本的puppet,也不过是提高了单个进程的性能,ruby默认的webrick http 实在不适合产线的使用,所以为了使puppet 可以在单台主机上实现高并发,可以使用ruby的passenger ,这个类似python的uwsgi,在配合Nginx,可以使单台master的性能得到充分利用。
- 安装
由于当前环境不通外网,可以在GEM上下载好包,再进行安装,版本根据自己的puppet&&ruby相关依赖找一下即可
gem local install rake rack passenger
nginx安装可以使用passenger-install-nginx-module ,不过建议还是源码安装,
cat /opt/nginx/conf/nginx.conf
passenger_root /usr/lib/ruby/gems/1.8/gems/passenger-4.0.19; #指定passenger的root目录,可以使用passenger-config –root得到
passenger_ruby /usr/bin/ruby; #指定ruby命令的执行路径
passenger_max_pool_size 15; #定义puppetmaster动态调用的最大进程数量
proxy_buffer_size 4000k;
proxy_buffering on;
proxy_buffers 32 1280k;
proxy_busy_buffers_size 17680k;
client_max_body_size 10m;
client_body_buffer_size 4096k;
server {
listen 8140 ssl; #由于puppet通信使用的是ssl,所以此处必须定义ssl
server_name puppet.node.kddi.op.xywy.com; #puppet服务器的主机名
root /etc/puppet/rack/public; #nginx和passenger的协作目录
access_log /data/logs/nginx/proxy.puppet-access.log;
error_log /data/logs/nginx/proxy.puppet-error.log;
passenger_enabled on; #启用passenger模式
passenger_set_cgi_param HTTP_X_CLIENT_DN $ssl_client_s_dn; #标记client 请求时提供的dn和 VERIFY,用于传递到puppet
passenger_set_cgi_param HTTP_X_CLIENT_VERIFY $ssl_client_verify;
#ssl 证书的相关配置
ssl_session_timeout 5m;
ssl_certificate /var/lib/puppet/ssl/certs/puppet.node.kddi.op.xywy.com.pem;
ssl_certificate_key /var/lib/puppet/ssl/private_keys/puppet.node.kddi.op.xywy.com.pem;
ssl_client_certificate /var/lib/puppet/ssl/certs/ca.pem;
ssl_crl /var/lib/puppet/ssl/ca/ca_crl.pem;
ssl_ciphers SSLv2:-LOW:-EXPORT:RC4+RSA;
ssl_prefer_server_ciphers on;
ssl_verify_depth 1;
ssl_session_cache shared:SSL:128m;
ssl_verify_client optional;
}
横向扩展就是在多个passenger+puppet 前面加个SLB,这个就不再说了,太基本了
配置
上面提到的惊群效应,客户端也可以通过一些配置进行修改,puppet默认的同步周期是半小时,可以根据时间修改,修改后可以在每次同步时间后加个随机数,在随机数内进行同步,避免大并发在同一个时间内进行同步而导致的失败
网友评论