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. Search insert position, 查找插入位置

    问题描述:给定一个有序序列,如果找到target,返回下标,如果找不到,返回插入位置. 算法分析:依旧利用二分查找算法. public int searchInsert(int[] nums, int ...

  2. yii2:redis调用

    参照手册,调用redis,报错,真坑: Yii::$app->redis 后改改用: Yii::getRedis();

  3. yii2:多条件多where条件下碰到between时,between语句如何处理呢?

    yii2:多条件多where条件下碰到between时,between语句如何处理呢? 我有一张表:id,name,telphone,ticket_no,status,create_time等字段, ...

  4. 【python教程】Python JSON

    环境配置 在使用 Python 编码或解码 JSON 数据前,我们需要先安装 JSON 模块.本教程我们会下载 Demjson 并安装: $tar xvfz demjson-1.6.tar.gz $c ...

  5. File工具类

    package cn.itcast.bos.utils; import java.io.IOException; import java.net.URLEncoder; import sun.misc ...

  6. respond.js第六行 SCRIPT5: 拒绝访问。跨域问题

    问题描述:respond.js第六行 SCRIPT5: 拒绝访问.昨天为学弟学妹讲bootstrap,说到对ie78的兼容问题,解决办法中有引入html5shiv.js和respond.js两个文件夹 ...

  7. input预览上传图片

    html代码 <input type="file" name="file" id="file" > <img src=&q ...

  8. LeetCode OJ:First Missing Positive (第一个丢失的正数)

    在leetCode上做的第一个难度是hard的题,题目如下: Given an unsorted integer array, find the first missing positive inte ...

  9. 数据库基础 非关系型数据库 MongoDB 和 redis

    数据库基础 非关系型数据库 MongoDB 和 redis 1 NoSQL简介 访问量增加,频繁的读写 直接访问(硬盘)物理级别的数据,会很慢 ,关系型数据库的压力会很大 所以,需要内存级的读写操作, ...

  10. H264的start code是什么?

    H.264起始码 在网络传输h264数据时,一个UDP包就是一个NALU,解码器可以很方便的检测出NAL分界和解码.但是如果编码数据存储为一个文件,原来的解码器将无法从数据流中分别出每个NAL的起始位 ...