一.概述

HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。
Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备、虚拟主机、基于TCP和HTTP应用代理等功能。其配置简单,维护方便,而且拥有很好的对服务器节点的健康检查功能(相当于keepalived健康检查),当其代理的后端服务器出现故障时,Haproxy会自动的将该故障服务器摘除,当服务器的故障恢复后,Haproxy还会自动将该RS服务器加入进来提供服务。
Haproxy特别适用于那些高负载、访问量很大。但又需要会话保持或七层应用代理的业务。Haproxy运行在普通的服务器硬件上,几乎不需要进行更多的优化就可以支 持数以万计的并发连接。并且它的运行模式使得它可以很简单、安全的整合到各种网站的架构中,同时,haproxy的代理模式,可以使得应用服务器不会暴露到网络中。

  • haproxy和nginx的区别
  • Nginx特点
    1.支持Http协议,工作在网络7层
    2.支持通过端口健康检测
    3.支持强大的正则匹配规则
    4.支持WebSocket协议
    5.支持Http Cache

  • Haproxy特点
    1.支持TCP与Http协议,工作在网络4层和7层
    2.支持Session共享、Cookies引导
    3.支持通过URL健康检测
    4.支持8种负载均衡策略
    5.支持心跳检测

  • HAProxy工作原理

HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发链接。事件驱动模型因为在有更好的资源和时间管理的用户端(user-space)实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以及使每个CPU时间片(Cycle)做更多的工作。

  • 负载均衡常用的调度算法

RR(Round Robin):算法是最简单最常见的一种算法,即轮询调度。

LC(Least Connections):算法即最小连接算法,根据后端的节点连接数大小动态分配前段请求。

SH(Source Hashing):SH基于来源访问调度算法,此算法用于一些有Session会话记录在服务器端的场景,可以基于来源IP,Cookie等做群集调度

二.案例

使用Haproxy搭建Web群集_第1张图片

使用Haproxy搭建Web群集_第2张图片

    1. 编译安装Nginx1服务器
[root@localhost ~]# yum -y install pcre-devel zlib-devel
[root@localhost ~]# useradd -M -s / sbin/nologin nginx
[root@localhost ~]# tar xf nginx-1 .12.0. tar.gz
[root@localhost ~]# cd nginx-1.12.0
[root@localhost nginx-1.12.0]# ./configure --prefix=/usx/1oca1/nginx --user=nginx --group=nginx
[root@localhost nginx-1.12.0]# make && make install

默认安装目录: /usr/local/nginx
默认日志: /usr/local/nginx/logs/
默认监听: 80。
默认Web目录: /usr/local/nginx/html

在客户端访问http://192.168.1.61/test. html测试,

使用Haproxy搭建Web群集_第3张图片

(2)搭建Nginx2.
编译安装的步骤与Nginx1相同,不同之处在于建立测试页面。

[ root@localhost html]# echo "Server 192.168.1.62" > test. html

在ke客户端访问http://192.168.162/test . html测试

使用Haproxy搭建Web群集_第4张图片

  • 2.编译安装Haproxy
[root@localhost ~]# yum -y install pcre-devel bzip2-deve1
[root@localhost ~]# tar xf haproxy-1.5.19. tar.gz
[root@localhost haproxy-1.5.19]# make TARGET=linux26         //64位系统
[root@localhost haproxy-1.5.19]# make install
  • 3.Haproxy服务器配置
    (1 )建立Haproxy的配置文件,
[root@localhost haproxy-1.5.19]# mkdir /etc/haproxy   / /创建配置文件目录
[root@localhost haproxy-1.5.19]# cp examples/haproxy . cfg /etc/haproxy/

//将haproxy.cfg文件复制到配置文件目录

(2) Haproxy配置项介绍。

Haproxy配置文件通常分为三个部分,即global. defaults 和listen。global 为全局配置,defaults 为默认配置,listen 为应用组件配置。

global配置项通常有下面配置参数

global
log 127.0.0.1 local0                  //配置日志记录, local0为日志设备,默认存放到系统日志
log 127.0.0.1 locall notice        //notice 为日志级别,通常有24个级别
maxconn 4096                         //最大连接数
uid 99                                       //用户uid
gid 99                                       //用户gid

defaults配置项配置默认参数.

defaults
log                      global         //定义日志为global配置中的日志定义
mode                  http            //模式为http 
option                  httplog      //采用http日志格式记录日志
retries 3                                //当服务器负载很高时,自动结束当前队列处理比较久的连接
maxconn 2000                      //最大连接数
cont imeout         5000          //客户端超时时间
cont imeout         50000        //服务器超时时间

listen配置项一般配置应用模块参数。

listen appli4-backup 0.0.0.0:10004     //定义一个appli4-backup的应用
option httpchk / index . html                //检查服务器的index.html文件
option persist                                      / /强制将请求发送到已经down掉的服务器
balance roundrobin                             //负载均衡调度算法使用轮询算法
server inst1 192.168.114.56:80 check inter 2000 fall 3   //定义在线节点
server    inst2 192.168.114.56:81 check inter 2000 fall 3 backup                   //定义备份节点

(3) 根据目前的群集设计,将haproxy, cfg配置文件的内容修改如下。

global
log 127 .0.0.1        loca10
1og 127.0.0.1        local1 notice
#log loghost           local0 info
maxconn 4096
uid 99
gid 99
da emon
#debug
#quiet

defaults

log global
mode                        http 
option httplog            
option dontlognull
retries 3
maxconn            2000
contimeout         5000
clitimeout            50000
srvtimeout          50000

listen webcluster 0.0.0.0:80 .
option httpchk GET / index . html
balance
roundrobin .
serve r
instl 192.168.1.61 :80 check inter 2000 fall 3
serve r
inst2 192.168.1.62:80 check inter 2000 fall 3
  • 4.创建自启动脚本
[root@localhost haproxy]# cp ~/haproxy-1.5. 19/examp1es/haproxy . init /etc/init
d/haproxy
[root@localhost haproxy]# ln -s /usx/1ocal/ sbin/haproxy /usr/ sbin/haproxy
[root@localhost haproxy]# chmod +x /etc/init. d/haproxy
[root@localhost haproxy]# chkconfig --add /etc/init. d/haproxy
[root@localhost haproxy]# /etc/init. d/haproxy start
Starting haproxy (via systemctl) :
[确定]
[root@localhost haproxy]# systemctl stop firewalld
  • 5. 测试Web群集

通过上面的步骤,已经搭建完成Haproxy的Web群集,接下来需要验证群集是否工作正常。一
个群集一般需要具备两个特性,第- -个是高性能,第二个是高可用。

1)测试高性能
在客户端使用浏览器打开http://192.168.1 60/test .html,浏览器显示信息如图所示。

使用Haproxy搭建Web群集_第5张图片

再次打开一个新的浏览器页面访问http://192.168.1. 60/test.html.浏览器显示信息如图所示

使用Haproxy搭建Web群集_第6张图片