dingdejun 发表于 2013-08-20 09:28

puppet 运维自动化之使用nginx负载均衡

puppet 默认是监听8140端口的,但是随着客户端的不断增多,经常会出现timeout这类问题,

puppet服务器压力也比较大,这次我们使用nginx的upstream模块来实现puppet 负载均衡。

【puppet nginx基础】

本文是给对nginx有一定的了解,并且熟悉nginx模块。本次实验并不是多主机(puppetmaster)

负载,还是单机,只是开了多个端口。用nginx作反向代理。

【puppetnginx实验环境】

1. 修改默认的puppetmaster监听端口,使其监听18140.18141,18142,18143(端口可以由你决定),

确保四个端口没有使用,puppetmaster没有在运行。

2.安装nginx,使用nginx监听8140,并使用upstream模块,分发请求到18140,18141,18412,18413四个端口。

3.假设你已安装了puppetmaster,如没有安装,请使用yum -y install puppet 进行安装。

【puppet nginx负载均衡安装】

安装nginx负载均衡所需的rubygem-mongrel

a.安装sohu的epel源。

rpm -ivh http://mirrors.sohu.com/fedora-epel/5/x86_64/epel-release-5-4.noarch.rpm

b.安装rubygem-mongrel:

yum -y install rubygem-mongrel

—————————————————————————-

安装nginx

c.下载nginx
       
wget -c http://www.nginx.org/download/nginx-1.0.0.tar.gz

d.安装nginx

tar zxvf nginx-1.0.0.tar.gz

cd nginx-1.0.0
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_ssl_module
make -j5
make install

--------------------------------------------------------------------------------------



a.配置puppetmaster

vim /etc/sysconfig/puppetmaster

添加下面2行
       
PUPPETMASTER_PORTS=( 18140 18141 18142 18143 ) ##修改为上面所修改的端口号
PUPPETMASTER_EXTRA_OPTS="--servertype=mongrel --ssl_client_header=HTTP_X_SSL_SUBJECT"

b.配置nginx(省略部分配置文件)

upstream puppet-pool {

             server 127.0.0.1:18140;
             server 127.0.0.1:18141;
             server 127.0.0.1:18142;
             server 127.0.0.1:18143;
         }

      server {
                listen 8140;
                root /etc/puppet;
                ssl on;
                ssl_session_timeout 5m;
                ssl_certificate /var/lib/puppet/ssl/certs/primarylb.test.com.pem; ##加粗这里填写puppetmaster主机名
                ssl_certificate_key /var/lib/puppet/ssl/private_keys/primarylb.test.com.pem; ##加粗这里填写puppetmaster主机名

                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;
                  alias /etc/puppet/manifests/files/;
                }

                # Modules files sections

                location ~ /production/file_content/modules/.+/ {
                  root /etc/puppet/modules;
                  types { }
                  default_type application/x-raw;
                  rewrite ^/production/file_content/modules/(.+)/(.+)$ /$1/files/$2 break;
                }

                              location / {
                           proxy_pass http://puppet-pool;
                           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 1024 10m;
                           proxy_busy_buffers_size 10m;
                           proxy_temp_file_write_size 10m;
                           proxy_read_timeout 120;
                }

【puppet nginx启动】

1.启动nginx

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

2.启动puppetmaster

/etc/init.d/puppetmaster start


【puppet nginx模拟测试】

1.使用不同的客户端来请求puppetmaster,查看相关日志。

192.168.3.234 - - "GET /production/catalog/xxx HTTP/1.1" 3033 16/Sep/2011:15:08:47 +0800200 771 913 27 1316156927.889 "-" "-" - 0.064 127.0.0.1:18142 200

192.168.2.229 - - "GET /production/catalog/xxxHTTP/1.1" 3026 16/Sep/2011:15:10:10 +0800200 779 921 29 1316157010.376 "-" "-" - 0.077 127.0.0.1:18143 200

看到上面的加粗的部分,说明nginx已经把请求转发到相应的端口上。

【puppet nginx总结】

为什么使用nginx来作负载均衡,因为nginx比较小,比较精简,响应速度非常快速,配置简单,模块易于扩展,易于升级。

puppetlabs也介绍了很多负载均衡的方法,大家都可以去尝试下,本上有点懒,就没有画这个架构图了,通过上面的介绍

也能理解,其实就是个proxy,分发到puppetmaster的端口上。更多请参阅 puppetlabs。

官方参考文档:http://projects.puppetlabs.com/projects/1/wiki/Using_Mongrel_Nginx

chenkun1998 发表于 2013-10-20 00:15

多端口。。 这也可以,但能有多大改善呢

dingdejun 发表于 2014-11-13 15:33

chenkun1998 发表于 2013-10-20 00:15 static/image/common/back.gif
多端口。。 这也可以,但能有多大改善呢

欢迎尝试

rdcwayx 发表于 2014-11-15 13:19

思路不错。不过实施方式有问题。

1. 既然用的是puppet master,多半是linux系统 (有rpm/yum这个命令),那么为啥还要单独下载nginx源代码,编译安装呢? Nginx 有安装模块,直接安装,而且以后更新也比较方便。 难不成以后有新版本,再编译安装吗?也就是说,有现成的安装包,尽量用现成的,除非有特殊需求,需要单独编译。

2. 为啥用sohu的源,个人觉得不安全,最好去主站点下载。

3. 用了puppet,就不要再有手动安装的思路了。建议做两个puppet 模块来实现,一个管理nginx,一个管puppet自己。 puppet master本身也可以被puppet模块管理。 ”pro puppet“的第二版里的67页里有教你如何管理puppet自己。

4. puppetlabs 上的forge 有很多现成的模块,要学会借用。上面说的两个模块都有现成的,建议优先使用。

Good luck.

页: [1]
查看完整版本: puppet 运维自动化之使用nginx负载均衡