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

2012年12月23日 发表评论 阅读评论

【puppet nginx 负载均衡导读】
puppet 默认是监听8140端口的,但是随着客户端的不断增多,经常会出现timeout这类问题,
puppet服务器压力也比较大,这次我们使用nginx的upstream模块来实现puppet 负载均衡。
【puppet nginx基础】
本文是给对nginx有一定的了解,并且熟悉nginx模块。本次实验并不是多主机(puppetmaster)
负载,还是单机,只是开了多个端口。用nginx作反向代理。
【puppet nginx实验环境】
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

[puppet nginx 配置负载均衡]
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 – – [16/Sep/2011:15:08:47 +0800] “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 – – [16/Sep/2011:15:10:10 +0800] “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

 

 

转载自:http://www.mysqlops.com


转载请注明来自:[MSN Spaces]http://msn.shandian.biz/474.html

  1. 本文目前尚无任何评论.