puppet负载均衡之nginx+passenger

由于3.x系列已不再支持mongrel,所以就采用nginx+passenger来做负载均衡;之前有发过nginx+mongrel,puppet version是2.7系列的,所以还是可以用的;

环境说明:

操作系统:centos 5.8 64位

puppet版本:3.1系列

1,升级ruby至1.8.7,安装rubygems
# rpm -Uvh http://rbel.frameos.org/rbel5
# yum install -y ruby rubygems ruby-devel.x86_64    

2,安装puppet server
# rpm -ivh http://yum.puppetlabs.com/el/5/products/x86_64/puppetlabs-release-5-1.noarch.rpm
# yum install -y puppet puppet-server    

3,安装nginx相关的依赖包
# yum install -y gcc make pcre-devel zlib-devel openssl-devel pam-devel curl-devel rpm-build    

4安装rake, rack and passenger ruby gems
# gem install rake rack passenger --no-rdoc --no-ri    

5,安装nginx
编译参数如下,必须包含passenger模块
# tar -xjf pcre-8.32.tar.bz2 -C /usr/local/src   ----pcre自己下载
# tar -xzf nginx-1.2.1.tar.gz -C /usr/local/src  ----解压nginx
cd /usr/local/src/nginx-1.2.1
    ./configure --prefix=$NGINX_PATH --with-   http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.32 --add-module=`passenger-config --root`/ext/nginx
# make
# make install    

6,与passenger的结合
# mkdir -p /etc/puppet/rack/public
# cp /usr/share/puppet/ext/rack/files/config.ru /etc/puppet/rack/
# chown -R puppet:puppet /etc/puppet/rack/
# nginx.conf里面具体的内容如下    

user www www;    

worker_processes  1;    

error_log  /usr/local/nginx/logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;    

pid        /usr/local/nginx/nginx.pid;    

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;    

events {
    use epoll;
    worker_connections  65535;
}    

http {
    server_tokens off;
    include       mime.types;
    default_type  application/octet-stream;    

    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;    

    #access_log  logs/access.log  main;    

    charset utf-8;    

    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 64k;
    client_max_body_size 8m;    

    tcp_nopush     on;
    tcp_nodelay on;
    keepalive_timeout 60;
    fastcgi_intercept_errors on;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;    

    open_file_cache max=65535 inactive=10s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 1;    

    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types       text/plain application/x-javascript text/css application/xml;
    gzip_vary on;    

    # Passenger needed for puppet
    passenger_root  /usr/lib/ruby/gems/1.8/gems/passenger-3.0.19;
    passenger_ruby  /usr/bin/ruby;
    passenger_max_pool_size 15;
    index index.html index.htm index.php;    

    server {
        listen       80;
        server_name  localhost;    

        #access_log  logs/host.access.log  main;    

        location / {
            root   html;
            index  index.php index.html index.htm ;
        }    

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }    

        location ~ .php$ {
            root           html;
            #fastcgi_pass   127.0.0.1:9000;
            fastcgi_pass unix:/dev/shm/php.socket;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
            include        fastcgi_params;
        }    

    }    

    server {
      listen                     8140 ssl;
      server_name                client.domain.com;    

      passenger_enabled          on;
      passenger_set_cgi_param    HTTP_X_CLIENT_DN $ssl_client_s_dn;
      passenger_set_cgi_param    HTTP_X_CLIENT_VERIFY $ssl_client_verify;     

      access_log                 /usr/local/nginx/logs/puppet_access.log;
      error_log                  /usr/local/nginx/logs/puppet_error.log;    

      root                       /etc/puppet/rack/public;    

      ssl_certificate            /var/lib/puppet/ssl/certs/client.domain.com.pem;
      ssl_certificate_key        /var/lib/puppet/ssl/private_keys/client.domain.com.pem;
      ssl_crl                    /var/lib/puppet/ssl/ca/ca_crl.pem;
      ssl_client_certificate     /var/lib/puppet/ssl/ca/ca_crt.pem;
      ssl_ciphers                SSLv2:-LOW:-EXPORT:RC4+RSA;
      ssl_prefer_server_ciphers  on;
      ssl_verify_client          optional;
      ssl_verify_depth           1;
      ssl_session_cache          shared:SSL:128m;
      ssl_session_timeout        5m;
    }    

}
注意下,我这里puppet server的hostname 是client.domain.com,至于具体的key路径之类的 大家自己按各自的环境自己改
然后调整下puppet.conf
[main]    

[agent]
  server = client.domain.com   

[master]
  certname = client.domain.com   

7,验证
启动nginx
# lsof -i:8140
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   20855 root    9u  IPv4 421091      0t0  TCP *:8140 (LISTEN)
nginx   20856  www    9u  IPv4 421091      0t0  TCP *:8140 (LISTEN)
可以发现8140端口已经起来
# puppet agent --test --server client.domain.com
Info: Retrieving plugin
Info: Caching catalog for client.domain.com
Info: Applying configuration version ‘1366960369‘
Notice: Finished catalog run in 0.16 seconds
发现已能正常使用
# tail /usr/local/nginx/log/puppet_access.log  查看nginx日志
192.168.200.220 - - [26/Apr/2013:21:12:15 +0800] "GET /production/node/client.domain.com? HTTP/1.1" 200 3502 "-" "-"
192.168.200.220 - - [26/Apr/2013:21:12:16 +0800] "GET /production/file_metadatas/plugins?&links=manage&recurse=true&checksum_type=md5&ignore=---+%0A++-+%22.svn%22%0A++-+CVS%0A++-+%22.git%22 HTTP/1.1" 200 283 "-" "-"
192.168.200.220 - - [26/Apr/2013:21:12:17 +0800] "POST /production/catalog/client.domain.com HTTP/1.1" 200 1033 "-" "-"
192.168.200.220 - - [26/Apr/2013:21:12:17 +0800] "PUT /production/report/client.domain.com HTTP/1.1" 200 14 "-" "-"
已经有记录,    

8.调整
如果puppetmaster服务已经做成开机启动,记得关掉
# chkconfig puppetmaster off
# chkconfig nginx on

至此Puppet 负载均衡到此结束,nginx分别与passenger,mongrel的结合都做完了

本文出自 “TNT、运维之路” 博客,请务必保留此出处http://tntdba.blog.51cto.com/1199791/1187739

时间: 2024-10-25 19:43:09

puppet负载均衡之nginx+passenger的相关文章

Nginx对(apache+foreman+puppet)负载均衡

Nginx对(apache+foreman+puppet)负载均衡 一.前提准备 试验环境: OS:Centos 6.5_x86 puppet-server-3.8.3 foreman-1.9.2 foreman-proxy-1.9.2 httpd-2.2.15 服务器已经搭建好了apache+foreman+puppet详情请参考: http://4709096.blog.51cto.com/4699096/1710697 二.修改pupeptmaster相关配置 2.1修改puppetmas

反向代理负载均衡之nginx

一.集群 1.1 什么是集群 集群是一组相互独立的.通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理.一个客户与集群相互作用时,集群像是一个独立的服务器.集群配置是用于提高可用性和可缩放性. 和传统的高性能计算机技术相比,集群技术可以利用各档次的服务器作为节点,系统造价低,可以实现很高的运算速度,完成大运算量的计算,具有较高的响应能力,能够满足当今日益增长的信息服务的需求. 而集群技术是一种通用的技术,其目的是为了解决单机运算能力的不足.IO能力的不足.提高服务的可靠性.获

Kubernetes的负载均衡问题(Nginx Ingress)

Kubernetes关于服务的暴露主要是通过NodePort方式,通过绑定minion主机的某个端口,然后进行pod的请求转发和负载均衡,但这种方式下缺陷是 Service可能有很多个,如果每个都绑定一个node主机端口的话,主机需要开放外围一堆的端口进行服务调用,管理混乱 无法应用很多公司要求的防火墙规则 理想的方式是通过一个外部的负载均衡器,绑定固定的端口,比如80,然后根据域名或者服务名向后面的Service ip转发,Nginx很好的解决了这个需求,但问题是如果有新的服务加入,如何去修改

主备切换,双机热备,负载均衡,nginx

MySQL主备切换 数据库由主服务器和备份服务器组成,主备同时运行,主服务器有数据改动后,立刻会同步到备份服务器.在日常运维中,为了防患未然,切换的操作只需要将连接池中数据库服务器的IP换成备份服务器的IP就可以了.Nginx高性能的http和反向代理服务,能实现主备切换工作. 双机热备 双机热备特指基于高可用系统中的两台服务器的热备(或高可用),因两机高可用在国内使用较多,故得名双机热备,双机高可用按工作中的切换方式分为:主-备 方式(Active-Standby方式)和双主机方式(Activ

大数据高并发系统架构实战方案(LVS负载均衡、Nginx、共享存储、海量数据、队列缓存)

课程简介: 随着互联网的发展,高并发.大数据量的网站要求越来越高.而这些高要求都是基础的技术和细节组合而成的.本课程就从实际案例出发给大家原景重现高并发架构常用技术点及详细演练. 通过该课程的学习,普通的技术人员就可以快速搭建起千万级的高并发大数据网站平台. 亮点一:真实环境还原,课程采用了VM环境重现大网站集群服务器环境,真实环境还原再现. 亮点二:基础实用,细节决定成败,课程内容在演练过程中重点介绍各种细节,保证初级人员快速入门及高级进阶. 亮点三:讲师丰富的海量平台运作经验 讲师tom5多

终于等到你---订餐系统之负载均衡(nginx+memcached+ftp上传图片+iis)

又见毕业 对面工商大学的毕业生叕在拍毕业照了,一个个脸上都挂满了笑容,也许是满意自己四年的修行,也许是期待步入繁华的社会... 恰逢其时的连绵细雨与满天柳絮,似乎也是在映衬他们心中那些离别的忧伤,与对未来的憧憬和彷徨. 想起当年毕业时,来去匆匆,只留下一张全班合影照和寝室好友的一句:再见,珍重!有点小遗憾! 又见毕业,又是一年,感慨两句,珍惜时间,好好加油,废话完结,回到主题. 背景 自毕业以来,一直在现在公司做订餐系统的开发,那会儿没有口碑,没有饿了么,更别说美团外卖,百度外卖了...因为规模

分布式存储之MogileFS基于Nginx实现负载均衡(Nginx+MogileFS)

MogileFS分布式文件系统特点: 1.具有raid的性能 2.不存在单点故障 3.简单的命名空间: 每个文件对应一个key:用于domain定义名称空间 4.不共享任何数据 5.传输中立,无特殊协议:可以通过NFS或HTTP进行通信 6.自动文件复制:复制的最小单位不是文件,而class 7.应用层: 用户空间文件系统,无须特殊的核心组件 Nginx+MogileFS的好处: 1.将请求代理至后端MogileFS服务器集群中,能实现负载均衡的效果.  2.能对后端的tracker节点进行健康

nginx负载均衡、nginx ssl原理及生成密钥对、nginx配制ssl

1.nginx负载均衡 新建一个文件:vim /usr/local/nginx/conf/vhost/load.conf写入: upstream abc_com{ ip_hash; server 61.135.157.156:80; server 125.39.240.113:80;}server{ listen 80; server_name www.abc.com; location / { proxy_pass http://abc_com; proxy_set_header Host $

负载均衡 之 nginx+consul+consul template

前几篇先是记载了如何通过nginx配置服务负载均衡,后面记载了如何通过 ocelot 配置 服务负载均衡,分别介绍了用webapi注册服务以及配置文件注册服务,通过ocelot webapi + consul 配置负载均衡系列学习完毕. 然而nginx负载均衡没有服务发现,依然不能用生产环境,本篇将介绍如何通过 nginx+consul 配置多台服务器的负载均衡并支持服务发现. 试验背景和目的:一个微服务,有一个网关入口,如果网关出现故障,那么整个微服务马上瘫痪,那么我们有必要把网关布署在多台服