13916729435 发表于 2015-11-20 09:55:38

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

         电商以及门户网站首要的要求就是稳定,并且能够自动实现后端服务器的健康监测,在后端服务器出现故障时,能够自动切换到健康的服务器上来。作为前端代理的杰出产品,nginx以其高稳定和高可用性赢得了众多运维人员的青睐,纷纷采用这个来使用来做自己的前端代理,先说明一下 nginx 的代理配置:
        安装pcre插件,pcre是一个perl库,nginx 需要安装它,以便更好地支持配置中的正则表达式
           wgethttp://sourceforge.net/projects/pcre/files/pcre/8.32/pcre-8.32.tar.gz/download
           tar zxvfpcre-8.32.tar.gz &&cdpcre-8.32
           ./configure   &&    make    &&   make install


        下载 nginx 版本 , 当前稳定版本中最新的是 1.2.6 . wgethttp://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文件配置如下:


  

userwww www;
worker_processes 8;
error_loglogs/error.log crit;
pid      logs/nginx.pid;
worker_rlimit_nofile 51200;
events   
{
use epoll;
worker_connections 51200;
}
http   
{
include       mime.types;
default_typeapplication/octet-stream;
gzip on;
gzip_proxied any;
gzip_min_length1024;
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;
upstreamweb_test{
server 192.168.10.2:80;
server 192.168.10.3:80;
}
log_formatmain'$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
{
listen80;
server_nametest.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 500502 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.1local1 notice
maxconn 4096
chroot /opt/soft/haproxy
uid 504
gid 504
daemon
quiet
nbproc2
pidfile /opt/soft/haproxy/haproxy.pid
defaults
log   127.0.0.1 local0 err
mode    http
optionredispatch
optiondontlognull
optionhttplog
timeout connect 10000ms
timeout client 30000ms
timeout server 300ms
retries 1
maxconn 20000
listentest.com.cn   0.0.0.0:8020
mode    http
optionforwardfor
balance source
cookieSERVERID
optionhttpchk HEAD /quotedata/cachealert.aspx
serverserver_A 192.168.10.2:80 check inter 1500weight 10 cookie A
serverserver_B 192.168.10.3:80 check inter 1500weight 10 cookie B

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


  
        




        


        


        


        


  

页: [1]
查看完整版本: 特殊业务下haproxy负载均衡容错与nginx负载均衡容错对比