- 论坛徽章:
- 0
|
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-e ... ease-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/p ... Using_Mongrel_Nginx |
|