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. easyui扩展数据表格点击加号拓展

    $(function(){ $("#RepaymentInfoTab").datagrid({ view: detailview, detailFormatter:function ...

  2. Windows系统变量列表

    %ALLUSERSPROFILE% : 列出所有用户Profile文件位置. %APPDATA% :  列出应用程序数据的默认存放位置. %CD% :  列出当前目录. %CLIENTNAME% :  ...

  3. imageView图片放大缩小及旋转

    imageView图片放大缩小及旋转 一.简介 二.方法 1)设置图片放大缩小效果 第一步:将<ImageView>标签中的android:scaleType设置为"fitCen ...

  4. Lucene快速入门

    1. 什么是lucene lucene是Apache的一个全文检索工具,使用lucene能快速实现全文检索功能.Lucene是一个工具包,你可以调用它的函数, 但它不能独立运行,不单独对外提供服务. ...

  5. LeetCode OJ:Permutations(排列)

    Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...

  6. 软工作业-wc(Python实现)

    GitHub地址:GitHub PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划  30  40 · Esti ...

  7. C++中标准输入流cin与Ctrl+Z使用时的问题

    今天使用C++编写了一段小程序,练习使用标准库的算法,代码如下: #include <iostream> #include <algorithm> #include <v ...

  8. 采用Spring管理Bean和依赖注入

    1. 实例化spring容器和从容器获取Bean对象 实例化Spring容器常用的两种方式: 方法一: 在类路径下寻找配置文件来实例化容器 [推荐使用] ApplicationContext ctx ...

  9. Arcgis for JS扩展GraphicLayer实现区域对象的聚类统计与展示

    功能需求: 分省市统计并展示全国雨量站的数目与位置. 常规做法: 分省市雨量站的数目通过统计表的形式在页面端展示,位置根据XY坐标信息将雨量站标绘在图上. 优化做法: 去掉统计图的展示方式,直接将各省 ...

  10. Android数据库代码优化(1) - 从Google的数据库guide说起

    假如我们没有任何在Android上使用SQLite的经验,现在要开始在工作中用SQLite存储一些数据.OK, 我们去看google的官方培训文档吧,http://developer.android. ...