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
--------------------------------------------------------------------------------------
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
《解決方案》
多埠。。 這也可以,但能有多大改善呢