随着公司应用需求的增加,需要不断的扩展,服务器数量也随之增加,当服务器数量不断增加,我们会发现一台puppetmaster压力大,解析缓慢,而且时不时出现"time out"之类的报错,那这时有什么优化的办法吗?其实不然,我们可以利用Nginx多端口实现负载均衡,这样在很大程度上优化了puppet的处理能力。

【51CTO原创稿件】随着公司应用需求的增加,需要不断的扩展,服务器数量也随之增加,当服务器数量不断增加,我们会发现一台puppetmaster压力大,解析缓慢,而且时不时出现"time out"之类的报错,那这时有什么优化的办法吗?我们在Puppet官网上找寻解决方案,发现puppetmaster可以配置多端口,结合WEB代理(推荐Nginx),这样puppetmaster承受能力至少可以提升数倍以上,相当于在很大程度上优化了puppet的处理能力。

.遵循前面的环境设定,我们这里的服务器环境及软件版本分别为:

服务器系统:CentOS5. x86_64

Ruby版本:ruby-1.8.

Puppet版本:puppet-2.7.

Nginx版本:nginx-0.8.

.Mongrel安装

要使用puppet多端口配置,需要指定mongrel类型,默认没有安装,需要安装:

yum install -y rubygem-mongrel
.配置puppetmaster 在/etc/sysconfig/puppetmaster文件末尾添加如下两行,分别代表多端口、mongrel类型,内容如下所示: PUPPETMASTER_PORTS=( ) PUPPETMASTER_EXTRA_OPTS="--servertype=mongrel --ssl_client_header=HTTP_X_SSL_SUBJECT"
  .安装Nginx服务 安装之前请确保系统已经安装pcre-devel正则库,然后再编译安装Nginx,需要添加SSL模块参数支持,Nginx的安装过程如下所示: yum -y install pcre-devel cd /usr/local/src wget http://nginx.org/download/nginx-0.8.46.tar.gz tar zxvf nginx-0.8..tar.gz cd nginx-0.8. ./configure --prefix=/usr/local/nginx --with-http_ssl_module make && make install && cd ../
添加www用户组及用户,命令如下所示: groupadd www useradd -g www www
.我们依据puppet需求来修改配置文件nginx.conf,内容如下所示: user www;
worker_processes ;
events {
worker_connections ;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout ;
#定义puppet客户端访问puppet-server端日志格式
log_format main '$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.log main;
upstream puppetmaster {
server 127.0.0.1:;
server 127.0.0.1:;
server 127.0.0.1:;
server 127.0.0.1:;
server 127.0.0.1:;
}
server {
listen ;
root /etc/puppet;
ssl on;
ssl_session_timeout 5m;
#如下为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_client optional;
#File sections
location /production/file_content/files/ {
types { }
default_type application/x-raw;
#定义puppet推送路径别名
alias /etc/puppet/files/;
}
# Modules files sections
location ~ /production/file_content/modules/.+/ {
root /etc/puppet/modules;
types { }
default_type application/x-raw;
rewrite ^/production/file_content/modules/(.+)/(.+)$ /$/files/$ break;
}
location / {
##设置跳转到puppetmaster负载均衡
proxy_pass http://puppetmaster;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Client-Verify $ssl_client_verify;
proxy_set_header X-SSL-Subject $ssl_client_s_dn;
proxy_set_header X-SSL-Issuer $ssl_client_i_dn;
proxy_buffer_size 10m;
proxy_buffers 10m;
proxy_busy_buffers_size 10m;
proxy_temp_file_write_size 10m;
proxy_read_timeout ;
}
}
}
.修改完nginx.conf文件以后,我们要启动nginx及puppet-server,这时应该如何操作呢? .我们首先关闭puppetmaster进程,然后先启动nginx,不然nginx是会启动失败的,命令如下所示: /usr/local/nginx/sbin/nginx
nginx占用puppetmaster默认的8140端口后,我们可以用如下命令来检查8140端口是否被nginx接管,如下所示: lsof -i:
此命令显示结果表明8140被nginx进程接管,如下所示: COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx root 6u IPv4 0t0 TCP *: (LISTEN) nginx www 6u IPv4 0t0 TCP *: (LISTEN)
我们再启动puppetmaster,命令如下所示: service puppetmaster start
如果ruby版本为1..5的话,等会运行puppetmaster会有如下警告,如下所示: Starting puppetmaster:
Port: ** Ruby version is not up-to-date; loading cgi_multipart_eof_fix [ OK ] Port: ** Ruby version is not up-to-date; loading cgi_multipart_eof_fix [ OK ] Port: ** Ruby version is not up-to-date; loading cgi_multipart_eof_fix [ OK ] Port: ** Ruby version is not up-to-date; loading cgi_multipart_eof_fix [ OK ] Port: ** Ruby version is not up-to-date; loading cgi_multipart_eof_fix [ OK ] 这段警告值的意思为: It's just a warning. Mongrel wants a Ruby version of at least 1.8.6. But it still runs just fine with previous versions. Just ignore the warning. 翻译为中文的意思是: Mongrel需要ruby至少是1..6以上的版本,但它仍然在当前版本运行,请忽咯当前警告,为了保证整个puppet运行环境的稳定,我这里选择还是沿用1..5版本的ruby。 本文作者:余洪春(抚琴煮酒),英文名Andrew.Yu。  个人博客地址:http://andrewyu.blog.51cto.com/,  Sina微博地址:http://weibo.com/yuhongchun027。

Puppet利用Nginx多端口实现负载均衡的更多相关文章

  1. 【转】Nginx+Tomcat搭建高性能负载均衡集群

    最近对负载均衡比较感兴趣,研究了公司的负载均衡的配置,用的是阿里的SLB,相当于不用运维,只需要在后台进行简单的配置就能完成Tomcat的负载均衡,索性在网上找了几篇文章去尝试搭建一个集群,然而很多都 ...

  2. Nginx+Tomcat搭建高性能负载均衡集群

    一.       工具   nginx-1.8.0 apache-tomcat-6.0.33 二.    目标   实现高性能负载均衡的Tomcat集群: 三.    步骤   1.首先下载Nginx ...

  3. Nginx+Tomcat搭建高性能负载均衡集群(转)

    转载自:http://blog.csdn.net/wang379275614/article/details/47778201 一.       工具 nginx-1.8.0 apache-tomca ...

  4. Nginx+Tomcat搭建高性能负载均衡集群的实现方法

    一.    目标实现高性能负载均衡的Tomcat集群: 二.步骤 1.首先下载Nginx,要下载稳定版: 2.然后解压两个Tomcat,分别命名为apache-tomcat-6.0.33-1和apac ...

  5. Nginx代理tcp端口实现负载均衡

    Nginx代理tcp端口实现负载均衡 1.修改配置文件 vi /etc/nginx/nginx.conf 添加如下配置: stream { ###XXX upstream notify {   has ...

  6. nginx实现请求的负载均衡 + keepalived实现nginx的高可用

    前言 使用集群是网站解决高并发.海量数据问题的常用手段.当一台服务器的处理能力.存储空间不足时,不要企图去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求.这种 ...

  7. 【转】Nginx反向代理和负载均衡

    原文链接:http://www.cnblogs.com/shuoer/p/7820899.html Nginx反向代理和负载均衡 环境说明 由于我使用的是windows系统,所以我用虚拟机虚拟出来了3 ...

  8. [转]搭建Keepalived+Nginx+Tomcat高可用负载均衡架构

    [原文]https://www.toutiao.com/i6591714650205716996/ 一.概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最 ...

  9. Linux系统——Nginx反向代理与负载均衡

    集群集群是指一组(若干个)相互独立的计算机,利用高速通信网路组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运用各自服务的独立服务器.这些服务器之间可以彼此通信,协同向用户提供 ...

随机推荐

  1. Python学习之==>循环

    1.While循环 # 循环的时候是在重复执行循环体里面的东西 # 在循环体里面遇到break,立即结束循环,不管循环有没有完 # 在循环体里面遇到continue,那么就结束本次循环,继续进行下一次 ...

  2. mxml 嵌入as代码出错,缺少 CDATA

    如果<mx:Script> 中有大于小于符号,代码必须包含在<![CDATA[ 之中,否则会报错

  3. iOS多选实现注意点

    下面对APP的多选选择列表实现进行总结,为了在以后的每个项目的多选实现,测试总是提一样的bug总结的. 具体的实现代码就不复制粘贴了,不过在多选问题上遇到问题的可以我们一起讨论讨论的哈... 可能总结 ...

  4. oracle导入导出常见问题及解决方案

    一.导出 1.导出命令     exp 用户名/密码@实例名 file=路径 2.出现问题:空表不能导出, 解决方案:   --查找空表 SELECT TABLE_NAME FROM USER_TAB ...

  5. 【Deep Learning Nanodegree Foundation笔记】第 1 课:INTRODUCTION Welcome

    Welcome to the Deep Learning Nanodegree Foundations Program! In this lesson, you'll meet your instru ...

  6. 【VS开发】使用 NuGet 管理项目库

    NuGet 使用 NuGet 管理项目库 Phil Haack 无论多么努力,Microsoft 也没办法提供开发人员所需要的每一个库. 虽然 Microsoft 在全球的员工人数接近 90,000, ...

  7. 去掉有序数组中的重复元素 c/c++

    去掉有序数组中的重复元素: int RemoveDuplates(int A[], int nCnt) { ; ; , j = ; i < nCnt && j < nCnt ...

  8. git diff 命令用法

    理解git diff的前提,首先要理解git中工作区,暂存区,本地版本库的概念,如果头脑中有这些概念,接着往下读. git diff test.c 用来查看工作区和暂存区中test.c文件的区别. g ...

  9. isinstance与issubclass,反射

    目录 isinstance与issubclass isinstance issubclass 反射 定义 反射在模块中的应用 内置方法 isinstance与issubclass isinstance ...

  10. Leaving Auction CodeForces - 749D (set,贪心,模拟)

    大意: 若干个人参加拍卖会, 给定每个人出价顺序, 保证价格递增, q个询问, 给出k个人的编号, 求删除这k个人的所有出价后, 最终谁赢, 他最少出价多少. set维护每个人最后一次投票的时间, 每 ...