HAProxy安装配置用于TCP的负载均衡

HaProxy介绍

  Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备、虚拟主机、基于TCP和HTTP应用代理等功能。其配置简单,而且拥有很好的对服务器节点的健康检查功能(相当于keepalived健康检查),当其代理的后端服务器出现故障时,Haproxy会自动的将该故障服务器摘除,当服务器的故障恢复后Haproxy还会自动将RS服务器假如。
Haproxy特别使用与那些访问量很大。但又需要会话保持或七层应用的业务。Haproxy运行在普通的服务器硬件上,仅仅进行简单的优化就可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合到各种网站的架构中,同时使得应用服务器不会暴露到网络中。
Haproxy软件引入了frontend,backend的功能,frontend(acl规则匹配)可以运维管理人员根据任意HTTP请求头做规则匹配,然后把请求定向到相关的backend(server pools等待前端把请求转过来的服务器组)。通过frontend和backup,我们可以很容易的实现haproxy的7层代理功能,haproxy是一款不可多得的优秀代理服务软件
Haproxy支持两种主要代理模式:
第一个:是4层tcp代理(例如:可用于邮件服务内部协议通信服务器、Mysql服务等)。
Haproxy软件的四层tcp代理应用非常优秀,配置非常简单方便,比LVS和Nginx要方便很多,因为不需要在RS端执行脚本即可实现应用代理。
说明:由于Haproxy采用的是NAT模式,数据包来去都会经过Haproxy,因此,在流量特别大的情况下,其性能不如LVS。
在一般的中小型公司,建议采用haproxy做负载均衡,而不要使用LVS或者Nginx。
 
第二个:是7层代理(如HTTP代理)。在4层tcp代理模式下,Haproxy仅在客户端和服务器之间双向转发流量。但是在7层模式下Haproxy会分析应用层协议,并且能通过运行、拒绝、交换、增加、修改或者删除请求(request)或者回应(reponse)里指定内容来控制协议。
Haproxy软件的最大优点在于其7层的根据URL请求头应用过滤的功能,一般用在LVS软件的下一层,或者像官方推荐的可以挂在硬件负载均衡NS、F5下使用。

haproxy的官网:http://www.haproxy.org/

 

一.环境准备

1  操作系统

Ubuntu 15.10 (GNU/Linux 4.2.0-42-generic x86_64)

Haproxy版本

截至haproxy稳定版本是1.7.8: http://www.haproxy.org/download/1.7/src/haproxy-1.7.8.tar.gz

3. 拓扑图

1.Haproxy安装

#下载

wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.8.tar.gz
#解压
tar -zxvf haproxy-1.7.8.tar.gz
cd haproxy-1.7.8
#安装
make TARGET=linux2628 ARCH=x86_64 PREFIX=/home/duanxz/haproxy178
make install PREFIX=/home/duanxz/haproxy178

#参数说明
TARGET=linux26 #内核版本,使用uname -r查看内核,如:2.6.18-371.el5,此时该参数就为linux26;kernel 大于2.6.28的用:TARGET=linux2628
ARCH=x86_64 #系统位数
PREFIX=/usr/local/haprpxy #/usr/local/haprpxy为haprpxy安装路径

 

 2. 配置文件

1)配置文件详解

默认安装目录下没有配置文件,只有doc,sbin,share三个目录,可手工创建目录及配置文件。

haproxy的配置文件主要是以下5部分:

global全局配置、defaults默认配置、监控页面配置、frontend配置、backend配置。

haproxy.cfg配置文件内容如下:

duanxz@tong6:~$ cat haproxy178/etc/haproxy.cfg 
global
        maxconn         20000
    ulimit-n    16384
        log             127.0.0.1 local0
        user            duanxz
        group           duanxz
        #chroot          /opt/haproxy
    nbproc        2
        daemon




frontend test-proxy
    bind        *:9123
        mode            tcp
        log             global
        #option          httplog
        option          dontlognull
        option          nolinger
        #option          http_proxy
        maxconn         8000
        #timeout client  30s
    stats uri     /stats
    default_backend test-proxy-srv


backend test-proxy-srv
    mode            tcp
    #timeout connect 5s
    #timeout server  5s
    #retries         2
    balance         roundrobin
    option          nolinger
    #option          http_proxy
    #option          forwardfor header X-Forwarded-For
    server pos1 192.168.5.22:9124 check
    server pos2 192.168.5.22:9123 check
duanxz@tong6:~$

启动:

./haproxy -f /home/duanxz/haproxy178/etc/haproxy.cfg

 3  增加监控:

配置文件后面加:

########统计页面配置########  
listen admin_stats  
bind 10.1.210.111:8099 #监听端口  
mode http         #http的7层模式  
option httplog    #采用http日志格式  
#log 127.0.0.1 local0 err  
maxconn 10  
stats refresh 30s #统计页面自动刷新时间  
stats uri /stats
[test@iZwz9e1dh1nweaex8ob5b7Z ~]$ 

重启后,访问页面:http://119.23.216.11:8099/stats

 4Haproxy与tcp应用的心跳检测

   HAProxy可以提供到对后端服务器的心跳检查(即端口监测),默认情况下没有,需要手动在配置文件中配置,例如:
     backend new_server
                  server first  10.1.1.1:1080 check inter 1000
                  server second 10.1.1.2:1080 check inter 1000

    check inter 心跳检查配置项,1000以毫秒为单位,总体意思为:每隔1000ms检查一次10.1.1.1:1080和10.1.1.2:1080进程是否存活。检查方式为:使用tcp连接后台服务器端口,如果能建立连接,就认为存活且马上关闭连接。

      然而,在使用中发现一个问题:
     1.4.23版本的haproxy在进行心跳检查后,关闭为了进行心跳时建立的tcp连接会发送一个RST分组。这个本身不会影响后端服务器的正常功能,但是绝大多数服务器收到这个分组后,会抛出异常,如果你的日志打印这种异常就会导致日志量很大(因为心跳很频繁,且每次心跳就会查收这个异常),且这种异常不容易定位,导致你”人心惶惶“!!!
      1.4.24版本中修复了这个问题,它在心跳检查tcp连接时,没有达成三次握手,不向服务器发送最后一个ack分组,就马上发送RST分组,这样服务器认为连接没有建立,不会抛出异常。

       如果大家要使用HAProxy建议使用1.4.24版本或更高版本。

posted on 2016-01-19 18:42  duanxz  阅读(3597)  评论(0编辑  收藏  举报