HAProxy 概述及搭建群集

一、HAProxy概述

HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。HAProxy非常适用于并发大(并发达1w以上)web站点,这些站点通常又需要会话保持或七层处理。HAProxy的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护web服务器不被暴露到网络上

官网:https://www.haproxy.org/

1. HAProxy的主要功能

  • 负载均衡

    • TCP 和 HTTP 负载均衡:支持第 4 层 (TCP) 和第 7 层 (HTTP) 的负载均衡,可以在网络和应用层分发流量。
    • 多种负载均衡算法:支持轮询 (Round Robin)、最少连接 (Least Connections)、源地址哈希 (Source IP Hash) 等多种调度算法,灵活分配流量。
  • 高可用性

    • 健康检查:自动检测后端服务器的健康状态,如果某台服务器出现故障,HAProxy 会将流量重新分配到其他健康的服务器上。
    • 会话保持 (Session Persistence):支持基于 IP、Cookie 或其他标识的会话保持,确保用户的会话数据一致性。
  • 安全性

    • SSL/TLS 终止:可以在负载均衡器处终止 SSL/TLS 连接,减少后端服务器的负载,并集中管理证书。
    • 访问控制:基于 IP 地址、用户代理等条件的访问控制,限制不合法的流量。
  • 流量管理

    • 内容交换:根据 URL、头部信息等 HTTP 内容来决定将请求转发到哪个服务器。
    • 请求/响应修改:支持修改 HTTP 请求和响应,例如添加、删除或替换头部信息。
  • 性能和扩展性

    • 高并发处理:HAProxy 可以处理数千到数百万的并发连接,是高流量网站的理想选择。
    • 分布式架构支持:可以与其他负载均衡器和代理软件集成,形成分布式处理架构。
  • 日志和监控

    • 详细日志:支持生成详细的访问日志和错误日志,用于分析流量和故障排查。
    • 内置监控:提供统计信息和状态页面,实时监控后端服务器和流量状况。

2. HAProxy的负载均衡策略

  • Round Robin(轮询)

    • 策略描述:默认的负载均衡算法,按照服务器列表的顺序依次分发请求。每个新的连接或请求会被依次分配到下一个服务器,直到再次回到第一个服务器。
    • 适用场景:所有服务器具有相同的处理能力,适用于大多数情况。
  • Least Connections(最小连接数)

    • 策略描述:将请求分配给当前连接数最少的服务器。这样可以避免将请求分配到负载较高的服务器上,从而实现负载均衡。
    • 适用场景:服务器间的处理能力不均衡或者有长时间连接的应用场景,如长连接的 WebSocket 或者长时间保持连接的 HTTP 请求。
  • Source IP(源IP地址)

    • 策略描述:根据客户端的 IP 地址将请求分配到特定的服务器。同一个 IP 地址的请求总是被分配到相同的服务器,这有助于保持会话一致性。
    • 适用场景:需要维护会话状态或者保持与客户端的某种关联时,如缓存服务器或者特定的应用场景。
  • URI(基于URI的请求)

    • 策略描述:根据请求的 URI(Uniform Resource Identifier,统一资源标识符)将请求分配到服务器。例如,所有以 /api 开头的请求分配给特定的服务器。
    • 适用场景:根据不同的请求路径将流量路由到不同的服务器,如分流 API 请求和静态资源请求。
  • Static-RR(静态轮询)

    • 策略描述:与标准 Round Robin 类似,但在每个配置周期内,服务器列表不会更改。即使某些服务器不可用或者新增服务器,也不会影响当前周期内的分发。
    • 适用场景:当需要确保在整个周期内,同一请求总是被分配到同一个服务器时,可以使用这种策略。
  • Weighted Round Robin(加权轮询)

    • 策略描述:根据服务器的权重值分配请求。具有较高权重的服务器会接收到更多的请求。权重可以根据服务器的性能或者配置进行调整。
    • 适用场景:用于区分服务器性能不同的情况,确保资源更高效地利用。
  • Custom(自定义策略)

    • 策略描述:可以根据特定的需求和条件,通过配置 HAProxy 的 ACL(Access Control List,访问控制列表)和规则,实现自定义的负载均衡策略。
    • 适用场景:当以上内置策略无法满足特定需求时,通过自定义逻辑来实现更精确的负载均衡控制。

3.LVS、Nginx、HAProxy的区别

LVS(Linux Virtual Server)

  1. 类型

    • LVS 是一个基于 Linux 内核的负载均衡解决方案,属于四层(传输层)负载均衡器,工作在 OSI 模型的传输层。
  2. 工作原理

    • LVS 通过网络地址转换(NAT)、直接路由(DR)或 IP 隧道(Tunneling)等方式,将客户端请求分发到多台后端服务器上。它可以通过调度算法实现请求的分发,如轮询、加权轮询、最少连接等。
  3. 优点

    • 高性能:LVS 直接运行在 Linux 内核空间,处理效率高。
    • 可靠性:基于 Linux 内核的稳定性和成熟度。
  4. 适用场景

    • 大规模高并发的网络环境,如互联网服务提供商(ISP)、大型网站等。

Nginx

  1. 类型

    • Nginx 最初设计作为高性能的 Web 服务器,后来增加了反向代理和负载均衡的功能,既可以作为 Web 服务器,也可以作为负载均衡器。
  2. 工作原理

    • Nginx 作为反向代理和负载均衡器,可以通过 HTTP、HTTPS、TCP 和 UDP 协议进行流量转发和负载均衡。它支持的负载均衡策略包括轮询、IP 哈希、最少连接等。
  3. 优点

    • 多功能性:可以同时充当 Web 服务器和负载均衡器。
    • 易配置和灵活性:配置简单,性能稳定,支持的功能和模块丰富。
  4. 适用场景

    • Web 应用负载均衡、反向代理、静态文件服务等。

HAProxy

  1. 类型

    • HAProxy 是一个高性能的第七层(应用层)负载均衡器,工作在 OSI 模型的应用层。
  2. 工作原理

    • HAProxy 主要用于 HTTP 和 TCP 应用的负载均衡,支持高级的负载均衡算法和 ACL(访问控制列表)功能。它能够处理 HTTP、HTTPS、TCP 和 UDP 协议。
  3. 优点

    • 强大的负载均衡能力:支持多种负载均衡算法,如轮询、加权轮询、最少连接、源IP 等。
    • 高性能和稳定性:专注于负载均衡功能,性能优异。
  4. 适用场景

    • Web 应用负载均衡、应用程序负载均衡、SSL 加速等。

主要区别总结

  • 层次:LVS 是四层负载均衡器,Nginx 和 HAProxy 是七层负载均衡器。
  • 设计目标:Nginx 最初作为 Web 服务器设计,具备反向代理和负载均衡功能;HAProxy 专注于高级负载均衡功能;LVS 则是基于 Linux 内核的负载均衡解决方案。
  • 应用场景:LVS 适用于大规模网络环境;Nginx 适用于 Web 服务器和反向代理;HAProxy 适用于应用层的负载均衡需求。

二、HAProxy搭建Web群集

Haproxy服务器:192.168.192.20     
Nginx 服务器1:192.168.192.30     
Nginx 服务器2:192.168.192.40    

1.haproxy 服务器部署

1.关闭防火墙,将安装Haproxy所需软件包传到/opt目录下
systemctl stop firewalld
setenforce 0

haproxy-1.5.19.tar.gz

2.编译安装 Haproxy
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make

tar zxvf haproxy-1.5.19.tar.gz
cd haproxy-1.5.19/
make TARGET=linux3100 ARCH=x86_64
make install

TARGET=linux26    #内核版本,
#使用uname -r查看内核,如:2.6.18-371.el5,此时该参数用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628

ARCH=x86_64     #系统位数,64位系统

3.Haproxy服务器配置
mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/

cd /etc/haproxy/
vim haproxy.cfg
global        #全局配置,主要用于定义全局参数,属于进程级的配置,通常和操作系统配置有关
--4~5行--修改,定义haproxy日志输出设置和日志级别,local0为日志设备,默认存放到系统日志
        log /dev/log   local0 info        #修改   syslog
        log /dev/log   local0 notice    #修改
        #log loghost    local0 info
        maxconn 4096            #最大连接数,需考虑ulimit -n限制,推荐使用10240
--8行--注释,chroot运行路径,为该服务自设置的根目录,一般需将此行注释掉
        #chroot /usr/share/haproxy
        uid 99                    #用户UID
        gid 99                    #用户GID
        daemon                    #守护进程模式
        nbproc 1                #添加,设置并发进程数,建议与当前服务器CPU核数相等或为其2倍

defaults       #配置默认参数,这些参数可以被用到Listen,frontend,backend组件     
        log     global            #引入global定义的日志格式
        mode    http            #模式为http(7层代理http,4层代理tcp)
        option  httplog            #日志类别为http日志格式
        option  dontlognull        #不记录健康检查日志信息
        retries 3                #检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
        redispatch                #当服务器负载很高时,自动结束当前队列处理比较久的连接
        maxconn 2000            #最大连接数,“defaults”中的值不能超过“global”段中的定义
        #contimeout 5000        #设置连接超时时间,默认单位是毫秒
        #clitimeout 50000       #设置客户端超时时间,默认单位是毫秒
        #srvtimeout 50000       #设置服务器超时时间,默认单位是毫秒
        timeout http-request 10s     #默认http请求超时时间
        timeout queue 1m           #默认队列超时时间
        timeout connect 10s        #默认连接超时时间,新版本中替代contimeout,该参数向后兼容
        timeout client 1m        #默认客户端超时时间,新版本中替代clitimeout,该参数向后兼容
        timeout server 1m        #默认服务器超时时间,新版本中替代srvtimeout,该参数向后兼容
        timeout http-keep-alive 10s        #默认持久连接超时时间
        timeout check 10s        #设置心跳检查超时时间


--删除下面所有listen项--,添加
listen  webcluster 0.0.0.0:80    #haproxy实例状态监控部分配置,定义一个名为webcluster的应用
        option httpchk GET /test.html    #检查服务器的test.html文件
        balance roundrobin                #负载均衡调度算法使用轮询算法roundrobin
        server inst1 192.168.10.16:80 check inter 2000 fall 3        #定义在线节点
        server inst2 192.168.10.17:80 check inter 2000 fall 3
 

4.添加haproxy 系统服务
cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
chmod +x haproxy
chkconfig --add /etc/init.d/haproxy

ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
service haproxy start    或    /etc/init.d/haproxy start

(启动失败原因可能是①配置文件问题,②端口被占用,关闭占用服务)

(此页面是没有检测到后端的网页文件,也有可能是无法连接到后端服务器)

2.节点服务器部署

(192.168.192.30)

echo “this is 30” > /var/www/html/kgc.html

(192.168.192.40)

echo “this is 40” > /var/www/html/kgc.html

注意网页文件名称一定要和配置文件中一致

3.测试

访问haproxy服务器时需要加网页路径

不停刷新测试负载均衡效果

4.日志定义

①默认haproxy的日志是输出到系统的syslog中,查看起来不是非常方便,为了更好的管理haproxy的日志,我们在生产环境中一般单独定义出来。需要将haproxy的info及notice日志分别记录到不同的日志文件中。
vim /etc/haproxy/haproxy.cfg
global
    log /dev/log local0 info
    log /dev/log local0 notice

service haproxy restart

②需要修改rsyslog配置,为了便于管理。将haproxy相关的配置独立定义到haproxy.conf,并放到/etc/rsyslog.d/下,rsyslog启动时会自动加载此目录下的所有配置文件。
vim /etc/rsyslog.d/haproxy.conf
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
&~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~

#说明:
这部分配置是将haproxy的info日志记录到/var/log/haproxy/haproxy-info.log下,将notice日志记录到/var/log/haproxy/haproxy-notice.log下。“&~”表示当日志写入到日志文件后,rsyslog停止处理这个信息。

③systemctl restart rsyslog.service       #重启日志服务

访问网页多刷新几次,系统自动生成文件

tail -f /var/log/haproxy/haproxy-info.log        #查看haproxy的访问请求日志信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值