【原稿】随着公司应用需求的增加,需要不断扩容,服务器数量也随之增加。当服务器数量不断增加的时候,我们会发现一个puppetmaster压力很大。解析速度慢,时不时出现“超时”等错误。这个时候有什么办法可以优化吗?我们在Puppet官网搜索了解决方案,发现puppetmaster可以配置多个端口,结合web代理(推荐Nginx),这样puppetmaster的容量至少可以提升数倍,相当于很大程度上优化了puppet的处理能力。 1。按照前面的环境设置,我们这里的服务器环境和软件版本是: 服务器系统:CentOS5.8x86_64 Ruby版本:ruby-1.8.5 Puppet版本:puppet-2.7.9 Nginx版本:nginx-0.8.46 2。Mongrel安装 使用puppet多端口配置,需要指定mongrel类型,默认不安装,需要安装: yuminstall-yruby??gem-mongrel 3.配置puppetmaster 在/etc/sysconfig/puppetmaster文件末尾添加如下两行,分别代表multi-port和mongrel类型。内容如下: PUPPETMASTER_PORTS=(81418142814381448145) PUPPETMASTER_EXTRA_OPTS="--servertype=mongrel--ssl_client_header=HTTP_X_SSL_SUBJECT" 4.安装Nginx服务 安装前请确保系统已经安装了pcre-devel正则库,然后编译安装Nginx,需要添加对SSL模块参数的支持。Nginx的安装过程如下: yum-yinstallpcre-devel cd/usr/local/src wgethttps://img.ydisp.cn/news/20220729/1hqvzhc1oez.gz tarzxvfnginx-0.8.46.tar.gz cdnginx-0.8.46 ./configure--prefix=/usr/local/nginx--with-http_ssl_module make&&makeinstall&&cd../ 添加www用户组和用户,命令如下: groupaddwww useradd-gwwwwww 5、我们根据puppet要求修改配置文件nginx.conf,内容如下:puppetclient终端访问puppet-server终端日志格式log_formatmain'$remote_addr-$remote_user[$time_local]"$request"$request_length$request_time$time_local''$status$body_bytes_sent$bytes_sent$connection$msec"$http_referer"''"$http_user_agent"$http_x_forwarded_for$upstream_response_time$upstream_addr$upstream_status';access_log/usr/local/nginx/logs/access.logmain;upstreamuppetmaster{server127.0.0.1:8141;server127.0.0.1:8142;server127.0.0.1:8143;server127.0.0.1:8144;server127.0.0.1:8145;}server{listen8140;root/etc/puppet;sslon;ssl_session_timeout5m;#下面是puppetmaster服务器证书地址ssl_certificate/var/lib/puppet/ssl/certs/server.cn7788.com.pem;ssl_certificate_key/var/lib/puppet/ssl/private_keys/server.cn7788.com.pem;ssl_client_certificate/var/lib/puppet/ssl/ca/ca_crt.pem;ssl_crl/var/lib/puppet/ssl/ca/ca_crl.pem;ssl_verify_clientoptional;#Filesectionslocation/production/file_content/files/{types{}default_typeapplication/x-raw;#definepuppet推送路径别名alias/etc/puppet/files/;}#Modulesfilesectionslocation~/production/file_content/modules/.+/{root/etc/puppet/modules;types{}default_typeapplication/x-raw;rewrite^/production/file_content/modules/(.+)/(.+)$/$1/files/$2break;}location/{##设置跳转到puppetmaster负载均衡proxy_passhttp://puppetmaster;proxy_redirectoff;proxy_set_headerHost$host;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_set_headerX-Client-Verify$ssl_client_verify;proxy_set_headerX-SSL-Subject$ssl_client_s_dn;proxy_set_headerX-SSL-Issuer$ssl_client_i_dn;proxy_buffer_size10m;proxy_buffers102410m;proxy_busy_buffers_size10m;proxy_temp_file_write_size10m;proxy_read_timeout120;}}}6.修改nginx.conf文件后,我们需要启动nginx和puppet-server。这个时候应该怎么操作呢? 1、我们先关闭puppetmaster进程,然后先启动nginx,否则nginx会启动失败。命令如下:,我们可以使用如下命令查看8140端口是否被nginx占用,如下图: lsof-i:8140 该命令显示8140端口被nginx进程占用,如下图: COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME nginx4121root6uIPv4206680t0TCP*:8140(LISTEN) nginx4122www6uIPv4206680t0TCP*:8140(LISTEN) 我们重启puppetmaster,命令如下: servicepuppetmasterstart 如果ruby版本是1.8.5,运行puppetmaster后会出现如下警告,如下: 启动puppetmaster: 端口:8141**Ruby版本不是最新的;loadingcgi_multipart_eof_fix [OK] 端口:8142**Ruby版本不是最新的;loadingcgi_multipart_eof_fix [OK] 端口:8143**Ruby版本不是最新的;加载cgi_multipart_eof_fix [确定] 端口:8144**Ruby版本不是最新的;loadingcgi_multipart_eof_fix [OK] 端口:8145**Ruby版本不是最新的;loadingcgi_multipart_eof_fix [OK] 这个警告值的意思是: 只是一个警告。Mongrel想要至少1.8.6的Ruby版本。 但它在以前的版本上仍然运行良好。忽略warning即可。 翻译成中文意思是: Mongrel至少需要ruby1.8.6或以上版本,但仍然在当前版本上运行,请忽略当前warning,以确保为了整个puppet运行环境的稳定性,我选择还是使用1.8.5版本的ruby。本文作者:余红春(抚琴料酒),英文名Andrew.Yu。 个人博客地址:https://img.ydisp.cn/news/20220729/zqt2fflrjqu.com 新浪微博地址:http://weibo.com/yuhongchun027。
