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版本或更高版本。

HAProxy安装配置用于TCP的负载均衡的更多相关文章

  1. Nginx基于TCP的负载均衡的配置例子

    原文:https://blog.csdn.net/bigtree_3721/article/details/72833955 nginx-1.9.0 已发布,该版本增加了 stream 模块用于一般的 ...

  2. Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived

    文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...

  3. Tomcat:利用Apache配置反向代理、负载均衡

    本篇主要介绍apache配置反向代理,介绍了两种情况:第一种是,只使用apache配置反向代理:第二种是,apache与应用服务器(tomcat)结合,配置反向代理,同时了配置了负载均衡. 准备工作 ...

  4. Haproxy+Keepalived搭建Weblogic高可用负载均衡集群

    配置环境说明: KVM虚拟机配置 用途 数量 IP地址 机器名 虚拟IP地址 硬件 内存3G  系统盘20G cpu 4核 Haproxy keepalived 2台 192.168.1.10 192 ...

  5. apache+jetty 配置web jsp服务器负载均衡

    首先,查找中文资料,貌似很少,有一个网友写了点,但是1版本过老,2有些地方有错误. 经过我自己摸索,记录一下.这个图很简洁明了 第一阶段 ,配置jetty 首先从 http://download.ec ...

  6. nginx如何做到TCP的负载均衡

    原文:https://blog.csdn.net/u011218159/article/details/50966861   TCP 的 负载均衡   这个片段描述了如何通过nginx plus进行负 ...

  7. 运维小知识之nginx---nginx配置Jboss集群负载均衡

      codyl 2016-01-26 00:53:00 浏览385 评论0 负载均衡 转自 运维小知识之nginx---nginx配置Jboss集群负载均衡-博客-云栖社区-阿里云https://yq ...

  8. [笔记]nginx配置反向代理和负载均衡

    1.nginx配置文件:源码安装情况下,nginx.conf在解压后的安装包内.yum安装,一般情况下,一部分在/etc/nginx/nginx.conf中,一部分在/etc/nginx/conf.d ...

  9. Windos环境用Nginx配置反向代理和负载均衡

    Windos环境用Nginx配置反向代理和负载均衡 引言:在前后端分离架构下,难免会遇到跨域问题.目前的解决方案大致有JSONP,反向代理,CORS这三种方式.JSONP兼容性良好,最大的缺点是只支持 ...

随机推荐

  1. Pandas日期功能

    日期功能扩展了时间序列,在财务数据分析中起主要作用.在处理日期数据的同时,我们经常会遇到以下情况 - 生成日期序列 将日期序列转换为不同的频率 创建一个日期范围 通过指定周期和频率,使用date.ra ...

  2. BZOJ 3931 [CQOI2015]网络吞吐量:最大流【拆点】

    传送门 题意 给你一个 $ n $ 个点,$ m $ 条边的无向网络,每条边有长度.每个点的流量限制为 $ c[i] $ . 要求流量只能经过从 $ 1 $ 的 $ n $ 的最短路.问你最大流是多少 ...

  3. Django进阶Model篇001 - mysql 数据库的配置

    django 默认支持sqlite.mysql.oracle.postgresql数据库,像db2和sqlserver之类的数据库需要第三方的支持,具体详见: https://docs.djangop ...

  4. 五十 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门搜索

    第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门 我的搜素简单实现原理我们可以用js来实现,首先用js获取到 ...

  5. iptables(二)iptables实际操作之规则查询

    如果你是一个新手,在阅读如下文章时,请坚持读到最后,读的过程中可能会有障碍,但是在读完以后,你会发现你已经明白了. 在进行iptables实验时,请务必在测试机上进行. 之前在iptables的概念中 ...

  6. New Concept English three (43)

    30 54 Insurance companies are normally willing to insure anything. Insuring public or private proper ...

  7. redux源码阅读之compose,applyMiddleware

    我的观点是,看别人的源码,不追求一定要能原样造轮子,单纯就是学习知识,对于程序员的提高就足够了.在阅读redux的compose源码之前,我们先学一些前置的知识. redux源码阅读之compose, ...

  8. C++复制构造函数的实现

    复制构造函数是一种特殊的构造函数,有一般构造函数的特性.它的功能是用一个已知的对象来初始化一个被创建的同类对象.复制构造函数的参数传递方式必须按引用来进行传递,请看实例: #include <i ...

  9. 2017年国内已经开设机器人工程专业(080803T)高校名单

    相关资料来源于教育部公布的2014年度和2016年度普通高等院校本科专业备案或审批结果的通知: 2014年批次 http://www.moe.edu.cn/publicfiles/business/h ...

  10. SQLServer2008导入Excel遇到的问题

    今天同事给客户处理基础物料信息,要把Excel中的几千行物料信息导入到数据库.觉得不是啥难事,写个SQL语句而已,没成想,实际一操作,出问题了. SELECT * FROM OPENROWSET('M ...