特殊业务下haproxy负载均衡容错与nginx负载均衡容错对比

       电商以及门户网站首要的要求就是稳定,并且能够自动实现后端服务器的健康监测,在后端服务器出现故障时,能够自动切换到健康的服务器上来。作为前端代理的杰出产品,nginx以其高稳定和高可用性赢得了众多运维人员的青睐,纷纷采用这个来使用来做自己的前端代理,先说明一下 nginx 的代理配置:

        安装pcre插件,pcre是一个perl库,nginx 需要安装它,以便更好地支持配置中的正则表达式

         wget  http://sourceforge.net/projects/pcre/files/pcre/8.32/pcre-8.32.tar.gz/download

         tar zxvfpcre-8.32.tar.gz &&  cd  pcre-8.32

         ./configure   &&    make    &&   make install

        下载 nginx 版本 , 当前稳定版本中最新的是 1.2.6 . wget  http://nginx.org/download/nginx-1.2.6.tar.gz 

        解压缩,编译,安装:

        tar zxvf nginx-1.2.6.tar.gz   

        cd    nginx-1.2.6

        ./configure  --user=www --group=www --prefix=/opt/soft/nginx  --with-http_stub_status_module --with-http_ssl_module --with-pcre=../pcre-8.32 --with-pcre-jit

        nginx 编译时注意,nginx 1.2.1 版以上都不支持 pcre-8.30 以下的版本,故编译时候要指定 pcre 的位置:否则会报此类错误:ngx_regex.c:307: undefined reference to `pcre_free_study'

        编译完成之后,make   &&  make install  进行安装

         nginx.conf  文件配置如下:  

user  www www;  
    worker_processes 8;  
    error_log  logs/error.log crit;  
      
    pid        logs/nginx.pid;  
      
    worker_rlimit_nofile 51200;  
      
    events   
    {  
            use epoll;  
            worker_connections 51200;  
    }  
      
    http   
    {  
            include       mime.types;  
            default_type  application/octet-stream;  
            
            gzip on;  
            gzip_proxied any;  
            gzip_min_length  1024;  
            gzip_buffers     4 8k;     
            gzip_http_version 1.1;   
            gzip_types       text/plain text/css application/x-javascript application/javascript application/xml;  
      
            keepalive_timeout 120;  
            server_tokens off;  
            tcp_nodelay on;  
      
            client_header_buffer_size 4k;  
            open_file_cache max=51200 inactive=20s;  
            open_file_cache_valid 30s;  
            open_file_cache_min_uses 1;  
      
    upstream  web_test  {  
                  server 192.168.10.2:80;  
                  server 192.168.10.3:80;  
          }  
   log_format  main  '$remote_addr - $remote_user [$time_local] $request '  
                                    '"$status" $body_bytes_sent "$http_referer" '  
                                    '"$http_user_agent" "$http_x_forwarded_for" "$request_time" "$upstream_addr" ';  
                  access_log  /var/log/nginx/master.log main;  
      
          server  
          {  
                  listen  80;  
                  server_name  test.com;  
                  location / {  
                            proxy_next_upstream error timeout invalid_header http_404 http_502 http_503 http_504 http_500;  
                            proxy_pass        http://web_test;  
                            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_connect_timeout 200s;  
                            proxy_read_timeout 200s;  
                            proxy_send_timeout 200s;  
                  }


这样在后端某 server 发生故障时,如报404 500  502 503 等错误时,即可实现自动容错,切换到第二台server进行响应。

这是通常情况下的负载均衡容错,他是建立在后端的server不能再响应用户请求的情况下才进行切换的,我们在日常工作中碰到了这么一种情况

平时需要第三方的一台server上接收数据,将接受过来的数据已链接的形式反馈给用户使用,碰到的问题是,当第三方的接收有问题时,数据无法接收,但是我们自己 server 并没有异常,照常响应用户请求,由于没有接受过来数据,所以用户看到的反馈结果为空,这样严重影响了用户体验,故采用下面一种方法,首先 check 一个 url ,用于判断与第三方的通信情况,如果正常,则第二个反馈给用户的数据链接正常调用;如果异常,则将所有的用户请求都转发到下一台server中,我尝试利用 nginx 来实现,无奈的是没有操作成功,故这里采用 haproxy 来实现

wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.8.tar.gz

tar zxvf haproxy-1.4.8.tar.gz   &&    cd haproxy-1.4.8

make TARGET=linux26 PREFIX=/opt/soft/haproxy

make install PREFIX=/opt/soft/haproxy

创建haproxy账户及账户组,以专门用于启动haproxy进程

groupadd haproxy

useradd -g haproxy haproxy

haproxy配置如下:

global  
        log 127.0.0.1  local1 notice 
        maxconn 4096  
        chroot /opt/soft/haproxy  
        uid 504 
        gid 504 
        daemon  
        quiet  
        nbproc  2  
        pidfile /opt/soft/haproxy/haproxy.pid  
defaults  
        log     127.0.0.1 local0 err  
        mode    http  
        option  redispatch  
        option  dontlognull
	option  httplog
	timeout connect 10000ms
	timeout client 30000ms
	timeout server 300ms  
        retries 1
	maxconn 20000
listen  test.com.cn     0.0.0.0:8020
        mode    http
        option  forwardfor
        balance source
        cookie  SERVERID
        option  httpchk HEAD /quotedata/cachealert.aspx
        server  server_A 192.168.10.2:80 check inter 1500  weight 10 cookie A
        server  server_B 192.168.10.3:80 check inter 1500  weight 10 cookie B

这样,当server_A目录下的 cachealert.aspx 这个链接出现问题时,表示已无法接收第三方的数据,因此将所有的访问链接都转到server_B上


       

       

       

        

      


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值