HAProxy 概述及搭建群集

news2024/11/17 21:54:03

一、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的访问请求日志信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2075889.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cobalt Strike 4.8 用户指南-第三节-数据管理

3.1、概述 Cobalt Strike 团队服务器是行动期间 Cobalt Strike 收集的所有信息的中间商。Cobalt Strike 解析来自Beaconpayload 的输出,提取目标、服务和凭据。 如果想导出Cobalt Strike的数据,通过Reporting-->Export Data进行导出。Cobalt Strike…

DataX(Doris同步数据到SelectDB)

背景 由于之前的doris数仓在本地的服务器,当数据量越来越大,服务器的性能达不到要求,查询数据经常超时,故需要把本地的doris数仓部署到云上,本文以阿里云为例,迁移工具使用的阿里开源的datax。 datax官方文…

SpringBoot集成kafka开发-消息消费的分区策略(消费者如何判断从哪个分区中消费消息的?)

这里写目录标题 1、kafak消息者消费消息的4种分区策略2、kafka默认的消费分区策略1-RangeAssignor(均匀分配、默认分配策略)2.1、代码验证RangeAssignor的消息分区策略2.1.1、消费者2.1.2、生产者2.1.3、kafak配置类2.1.4、对象实体类2.1.5、项目配置文件…

LD3600F断路器LD3600F模块

LD3600F断路器LD3600F模块 LD3600F断路器LD3600F模块 LD3600F断路器LD3600F模块 LD3600F断路器LD3600F模块引脚线 LD3600F断路器LD3600F模块说明书 LD3600F断路器LD3600F模块接线图 LD3600F断路器是指能够关合、承载和开断正常回路条件下的电流并能在规定的时间内关合、承…

一款可以发送弹幕的播放器,快来看看

目录 介绍 一、基础使用 二、播放器配置 三、实现弹幕功能 四、总结 介绍 NPlayer是一款功能强大、响应式、可定制的播放器,基于TypeScript和Sass编写。NPlayer支持高定制,你可以轻松定制图标、主题颜色等,还可以集成插件,实…

C语言如何快速求值

题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 程序分析: 假设该数为 x。 1、则:x 100 n2, x 100 168 m2 2、计算等式:m2 - n2…

WPS 备注白条,演讲者模式看不到

问题描述: 演讲者模式的样子会变成白条,如: 解决方案: 清楚格式----清除备注的格式。因为之所以会出现这种情况,应该是备注变成了某种格式。 实现方式:

武汉流星汇聚:亚马逊跨境电商领航者,推动全球商业影响力新篇章

在全球化浪潮席卷而来的今天,跨境电商已成为推动世界经济一体化的重要力量,而亚马逊,作为这一领域的先驱与巨头,凭借其独特的商业模式、庞大的市场覆盖以及卓越的客户服务,在跨境电商市场中占据了举足轻重的地位。 亚…

28 支付服务Payment kit基本使用

新增订单(后续所有的操作都是基于订单) > 请求后端接口支付 携带订单id 请求后端支付接口(web组件的src)后端接受到请求后 会整合该笔订单所有信息 请求支付宝支付宝会返回一个该笔订单的支付链接由于我们使用的是web组件 这个支付链接会被打开 进入到支付流程支付完成后 支…

青龙面板本地部署流程结合内网穿透使用手机远程本地服务器薅羊毛

文章目录 前言一、前期准备本教程环境为:Centos7,可以跑Docker的系统都可以使用。本教程使用Docker部署青龙,如何安装Docker详见: 二、安装青龙面板三、映射本地部署的青龙面板至公网四、使用固定公网地址访问本地部署的青龙面板 …

NLP发展脉络-->特征优化阶段

NLP特征优化阶段 文本预处理特征提取降维与特征选择特征组合与扩展特征选择与评估特征工程的优化模型可解释性偏统计和规则的特征化阶段优缺点优点缺点 这是NLP的一个发展阶段。今天,我们就来了解一下NLP的特征优化阶段。特征优化在NLP的发展中曾经是一个至关重要的…

【案例58】WebSphere输出日志输出慢导致线程被阻塞

问题现象 系统非常卡顿 问题分析 分析javacore文件,寻找关键字,Flat locked by 3LKMONOBJECT org/apache/logging/log4j/core/appender/OutputStreamManager0x000000060FB6B3C0: Flat locked by "WebContainer : 3" (J9VMThread:0x0…

Ubuntu22.04安装深度学习的GPU环境详细教程(小白图文,显卡驱动、CUDA、cuDNN、PyTorch一步到位)

摘要:本博客详细介绍了如何在 Ubuntu 22.04 系统上安装和配置深度学习环境,包括 NVIDIA 驱动、CUDA Toolkit、cuDNN、Miniconda 及 PyTorch 等关键组件。文章从安装前的注意事项开始,逐步讲解了如何切换国内软件源以提升下载速度,…

【Android Studio】Webview 内核升级得三种方法(续)

【Android Studio】Webview 内核升级得三种方法(续) 前言对原理学习中对应的重点进行一个记录针对网页加载流量进行一个监控 前言 在之前的博文【Android Studio】Webview 内核升级得三种方法中,介绍了内核升级的三种方法,并提出…

ECCV2024|港中文提出文本生成3D方法DreamDissector,能够生成具有交互的多个独立对象。

DreamDissector 是一种文本生成3D对象的方法,通过将多对象文本生成的NeRF输入并生成独立的纹理网格,提供了对象级别的控制和多种应用可能性。 DreamDissector 可以生成具有合理交互的多个独立纹理网格,方便各种应用,包括对象级别的…

NFTScan | 08.19~08.25 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期:2024.08.19~ 2024.08.25 NFT Hot News 01/ CryptoPunk 5822 今日以未公开价格售出,曾在 2022 年以 8000 ETH 售出 8 月 19 日,据 nft now,CryptoPun…

企业终端电脑监控管理系统有哪些?推荐四款全功能级的电脑监控管理系统

企业终端电脑监控管理系统是现代企业管理中不可或缺的一部分,它们主要用于提升信息安全、防止数据泄露、提高工作效率,并确保企业合规性。以下是一些常见的企业终端电脑监控管理系统: 1. 安企神 7天试用免费版https://work.weixin.qq.com/ca…

学习笔记——IP组播——IP组播基本概述

二、IP组播基本概述 IP组播技术有效地解决了单播和广播在点到多点应用中的问题。组播源只发送一份数据,数据在网络节点间被复制、分发(PIM),且只发送给需要该信息的接收者。 1、前言 网络中存在各种各样的业务,从流…

★ OJ题 ★ 二叉树

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将和大家一起做一些二叉树的OJ题~ 目录 一 单值二叉树 二 相同的树 三 对称二叉树 四 二叉树的前序遍历 五 另一颗树的子树 六 二叉树遍历 一 单值二叉树 965. 单值二叉树 - 力扣&#xff08;LeetCode…

Android平台原生音视频编解码MediaCodec

MediaCodec介绍 MediaCodec是Android平台上的一个多媒体编解码器&#xff0c;它可以用于对音频和视频进行编解码。通过MediaCodec&#xff0c;开发者可以直接访问底层的编解码器&#xff0c;实现更高效的音视频处理。同时&#xff0c;MediaCodec也支持硬件加速&#xff0c;可以…