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

摘要:
HaProxy介绍Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备、虚拟主机、基于TCP和HTTP应用代理等功能。Haproxy特别使用与那些访问量很大。在一般的中小型公司,建议采用haproxy做负载均衡,而不要使用LVS或者Nginx。Haproxy软件的最大优点在于其7层的根据URL请求头应用过滤的功能,一般用在LVS软件的下一层,或者像官方推荐的可以挂在硬件负载均衡NS、F5下使用。

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/

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

一.环境准备

1操作系统

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

2Haproxy版本

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

3.拓扑图

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

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.1local0
        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:9124check
    server pos2 192.168.5.22:9123check
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.1local0 err  
maxconn 10
stats refresh 30s #统计页面自动刷新时间  
stats uri /stats
[test@iZwz9e1dh1nweaex8ob5b7Z ~]$ 

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

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

4Haproxy与tcp应用的心跳检测

HAProxy可以提供到对后端服务器的心跳检查(即端口监测),默认情况下没有,需要手动在配置文件中配置,例如:
backend new_server
server first10.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版本或更高版本。

免责声明:文章转载自《HAProxy安装配置用于TCP的负载均衡》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇c# 获取键盘的输入数据结构之线性表的链式存储结构下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【Nginx-HTTP-02】HTTP协议超级详解

HTTP协议简介 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。 HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wide Web Cons...

CDN调度器HAProxy、Nginx、Varnish

CDN功能如下:1、将全网IP分为若干个IP段组,分组的依据通常是运营商或者地域,目的是让相同网络环境中的用户聚集到相同的组内;2、依据CDN服务器们的网络和容量,确定哪些CDN服务器适合服务哪些IP段组;3、根据以上两步得到的结论,让用户去最适合他的服务器得到服务。 说白了,就是根据用户不同的来源IP把用户请求重定向到不同的CDN服务器上去。那么,如何实...

为什么多 TCP 连接比单 TCP 连接传输快

转自: 我观察到,客户端机器从单一服务器使用 HTTP 下载一个文件:1. 单连接下载,速度没有达到客户端网络的最大带宽;2. 多连接同时下载,传输速度有极大的提高,带宽被占满。假设如下前提:1. 服务器是单一的,没有使用提供相同文件的其它服务器,也没有使用同域名的其它服务器;2. 服务器不对单个连接限速。那么,是什么导致多连接下载的速度大为提高呢?换一种...

1.2 ribbon-客户端负载均衡

一. 客户端负载均衡器Ribbon 1. 什么是服务端负载均衡 之前研究nacos的时候也说过服务端负载均衡和客户端负载均衡. 其实我们常用的服务端负载均衡就是nginx 在负载均衡中维护一个可用的服务实例清单, 当客户端请求来临时, 负载均衡服务器按照某种配置好的规则(负载均衡算法), 从可用服务实例清单中, 选取其一去处理客户端请求, 这就是服务端负载...

Linux网络编程笔记(修订版)

我的网络编程笔记, 因为最近又要做Linux下的网络编程,故重新修订, 其中一些内容参考了文末的链接及文章 1.   基本概念 2.   基本接口 2.1.   打开一个socket 2.2.   将socket绑定定指定的端口—bind 2.3.   侦听socket—listen (服务器端) 2.4.   等待接收请求—accept (服务器端) 2...

系统架构之负载均衡【F5 ginxLVSDNS轮询】

在做系统架构规划的时候,负载均衡,HA(高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点,当活动节点出现故障的时候,由备用节点接管)都是经常需要考虑的方案。对应并发及单点故障,考虑负载均衡方案是必不可少的。如果并发不高只是应对单点故障,则通常使用HA方案。 负载均衡(Load Balance)是集群技术(C...