当前位置: 首页 > 科技观察

Puppet使用Nginx多端口实现负载均衡

时间:2023-03-16 14:01:53 科技观察

【原稿】随着公司应用需求的增加,需要不断扩容,服务器数量也随之增加。当服务器数量不断增加的时候,我们会发现一个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。