当前位置: 首页 > news >正文

haproxy七层代理总结

一、HAProxy概念

1.1 什么是HAProxy?

     HAProxy是一款开源、高性能的负载均衡器和代理服务器,专为TCP和HTTP应用而设计。它可以将客户端的请求分发到多台后端服务器,从而提高应用的可用性和性能。HAProxy支持多种负载均衡算法和健康检查机制,是构建高可用性系统的理想选择。

1.2 HAProxy的优势
高性能:HAProxy采用事件驱动模型,能够处理大量并发连接。
灵活性强:支持多种负载均衡算法和调度策略,适应不同的应用场景。
高可用性:通过健康检查和故障转移机制,确保服务的连续性。
丰富的功能:支持SSL终止、HTTP重写、压缩等多种功能。

二、HAProxy架构
2.1 HAProxy整体架构
HAProxy的整体架构主要包括以下部分:

前端(Frontend):接受客户端请求,并根据配置的规则进行处理。
后端(Backend):定义一组服务器,处理前端转发的请求。
服务器(Server):实际处理请求的后端服务器。
监听器(Listener):在前端监听特定的IP和端口,等待客户端的连接请求。

2.2 HAProxy的组件
配置文件(haproxy.):HAProxy的核心配置文件,定义了前端、后端和监听器等组件。
统计报告(Statistics Report):HAProxy提供丰富的统计信息,便于监控和调试。
日志(Log):HAProxy支持详细的日志记录,帮助分析和诊断问题。

2.3 HAProxy的工作流程
HAProxy的工作流程如下:客户端发送请求到HAProxy的前端。
前端根据配置的规则,选择合适的后端。
后端将请求分发到具体的服务器进行处理。
服务器处理请求并返回结果,通过后端和前端返回给客户端。

三.实验

1.haproxy基本部署负载均衡的实现

实验工具:四台红帽9,网络设置在NAT模式下配置IP

实验要求:

客户机:172.25.254.100(ping通haproxy)

haproxy:172.25.254.100(下载haproxy)

server1:172.25.254.10(nginx配置部署好)

server2:172.25.254.20(同上)

server1:

 yum  install  nginx  -yecho   webserver1 - 172.25.254.10  >  /user/share/nginx/html/index.htmlsystemctl  enable  --now  nginxsystemctl  stop  firewalld

server2:

       yum  install  nginx  -yecho   webserver2 - 172.25.254.20  >  /user/share/nginx/html/index.htmlsystemctl  enable  --now  nginxsystemctl  stop  firewalld

测试:

    curl  172.25.254.20
haproxy:
安装haproxydnf  install  haproxy  -y修改/etc/haproxy/haproxy.cfg文件配置vim /haproxy/haproxy.cfg

修改如下:

#
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------frontend webclusterbind *:80mode httpuse_backend webcluster-hostbackend webcluster-hostbalance roundrobinserver web1 172.25.254.10:80server web2 172.25.254.20:80

重启服务:

systemctl  restart  haproxy

总测试:

测客户机是否可以ping....

[root@localhost ~]# curl 172.25.254.100
webserver1 - 172.25.254.10
[root@localhost ~]# curl 172.25.254.100
webserver2 - 172.25.254.20
[root@localhost ~]# curl 172.25.254.100
webserver1 - 172.25.254.10

测server的nginx:

将server1,2的nginx全部停止:

[root@localhost ~]# curl 172.25.254.100
webserver2 - 172.25.254.20
[root@localhost ~]# curl 172.25.254.100
webserver2 - 172.25.254.20
[root@localhost ~]# curl 172.25.254.100
webserver2 - 172.25.254.20

在将其重启:

[root@localhost ~]# curl 172.25.254.100
webserver1 - 172.25.254.10
[root@localhost ~]# curl 172.25.254.100
webserver2 - 172.25.254.20
[root@localhost ~]# curl 172.25.254.100
webserver1 - 172.25.254.10
[root@localhost ~]# curl 172.25.254.100
webserver2 - 172.25.254.20
[root@localhost ~]# 

四.haproxy的基本配置

配置文件位置:

/etc/haproxy/haproxy.cfg

参考配置参数说明:

global        # 对全局参数的说明log         127.0.0.1 local2    # 全局的日志配置,使用log关键字,此日志需要借助rsyslog来进行配置,默认等级为infochroot      /var/lib/haproxy       # 改变当前工作目录,基于安全性的考虑pidfile     /var/run/haproxy.pid  # 当前进程pid文件maxconn     4000                # 当前进程最大的连接数,很重要的一个参数,后面有详细的讲解。user        haproxy             # 启动服务所属用户group       haproxy             # 启动服务所属组daemon                            # 开启守护进程运行模式# turn on stats unix socketstats socket /var/lib/haproxy/stats        # haproxy socket文件
全局参数配置及日志分离:

多进程:

vim/etc/haproxy/haproxy.cfg

多线程:

五.proxies配置

参数说明:

defaultsmode                    http    # http 七层log                     global  # 延用上面的设定option                  httplog # http 的日志option                  dontlognull  # 空连接的日志option http-server-closeoption forwardfor       except 127.0.0.0/8option                  redispatchretries                 3timeout http-request    10stimeout queue           1mtimeout connect         10stimeout client          1mtimeout server          1mtimeout http-keep-alive 10stimeout check           10smaxconn                 3000

 Proxies配置-defaults:

bind:指定HAProxy的监听地址,可以是IPV4或IPV6,可以同时监听多个IP或端口,可同时用于listen字
段中
#格式:
bind [<address>]:<port_range> [, ...] [param*]

frontend 参数:
示例:
frontend webcluster
    bind *:80   #----所有80端口都开启
    mode http
    use_backend webcluster-host         #----使用什么后端 

backend 参数:
定义一组后端服务器,backend服务器将被frontend进行调用。
注意: backend 的名称必须唯一,并且必须在listen或frontend中事先定义才可以使用,否则服务无法启动

mode http|tcp #指定负载协议类型,和对应的frontend必须一致
option #配置选项
server #定义后端real server,必须指定IP和端口

server参数:

check #对指定real进行健康状态检查,如果不加此设置,默认不开启检查,只有check后面没有其它配置也可以启用检查功能
      #默认对相应的后端服务器IP和端口,利用TCP连接进行周期性健康性检查,注意必须指定端口才能实现健康性检查

addr <IP> #可指定的健康状态监测IP,可以是专门的数据网段,减少业务网络的流量
port <num> #指定的健康状态监测端口
inter <num> #健康状态检查间隔时间,默认2000 ms
fall <num> #后端服务器从线上转为线下的检查的连续失效次数,默认为3

示例:
backend webcluster-host
    balance roundrobin
    server web1 172.25.254.10:80
    server web2 172.25.254.20:80

实验:-重定向网络实例

进入配置文件

listen webclusterbind *:80  mode http     balance roundrobinredirect prefix http://www.baidu.com/[转百度】server web1 172.25.254.10:80server web2 172.25.254.20:80

修改保存

进入浏览器,输入IP地址:

Socat工具:

配置:

listen webclusterbind *:80  mode http     balance roundrobinserver web1 172.25.254.10:80server web2 172.25.254.20:80

使用方法说明:

#修改配置文件
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
stats socket /var/lib/haproxy/stats mode 600 level admin
#查看帮助
haproxy ~]# socat -h
haproxy ~]# echo "help" | socat stdio /var/lib/haproxy/stats
The following commands are valid at this level:
help : this message
prompt : toggle interactive mode with prompt
quit : disconnect
。。。省略 。。。
enable server : enable a disabled server (use 'set server' instead) #启用服务器
set maxconn server : change a server's maxconn setting
set server : change a server's state, weight or address #设置服务器
get weight : report a server's current weight #查看权重
set weight : change a server's weight (deprecated) #设置权重
show startup-logs : report logs emitted during HAProxy startup
how peers [peers section]: dump some information about all the peers or this
peers section
set maxconn global : change the per-process maxconn setting
set rate-limit : change a rate limiting value
set severity-output [none|number|string] : set presence of severity level in
feedback information
set timeout : change a timeout setting
show env [var] : dump environment variables known to the process
show cli sockets : dump list of cli sockets
show cli level : display the level of the current CLI session
show fd [num] : dump list of file descriptors in use
。。。省略 。。。
启用backup:

(两台主机没问题时,不会启用)注意

启用backup   ---- 两台服务器状态OK的情况下,不会访问这个vim /etc/httpd/conf/httpd.conf --------- 里面修改sorry server的端口vim/etc/haproxy/haproxy.cfglisten webclusterbind *:80mode httpbalance roundrobin    ---- 动态算法server web1 172.25.254.10:80 check inter 2 fall 3 rise 5 weight 2server web2 172.25.254.20:80 check inter 2 fall 3 rise 5 weight 1server web_sorry 172.25.254.100:8080 backup

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SpringBoot参数校验详解
  • PyTorch 基础学习(6)- 自动微分
  • Android Studio设置 offline 模式
  • 解决 Windows 任务栏图标不更新问题:深入解析与解决方案
  • C++初阶_2:引用
  • docker中调用GPU算力(debain12系统)
  • Spring 事务机制
  • Linux中针对文件权限的解析
  • FairyGUI-egret 优化ui资源加载
  • Linux--C语言之输入输出函数及格式控制输出
  • 如何在Shopify开发中高度还原Figma设计稿
  • 操作系统信号集与信号屏蔽
  • 社交工程攻击:心理操纵的艺术与防范策略
  • Nginx 服务器配置 SSL(HTTPS)的教程
  • 【langchain学习】从零开始掌握 JSONLoader:轻松解析复杂 JSON 数据
  • CSS居中完全指南——构建CSS居中决策树
  • iOS 系统授权开发
  • JSDuck 与 AngularJS 融合技巧
  • Laravel Telescope:优雅的应用调试工具
  • Linux后台研发超实用命令总结
  • Logstash 参考指南(目录)
  • Netty 4.1 源代码学习:线程模型
  • React16时代,该用什么姿势写 React ?
  • Redis字符串类型内部编码剖析
  • SOFAMosn配置模型
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Webpack 4x 之路 ( 四 )
  • 工程优化暨babel升级小记
  • 那些被忽略的 JavaScript 数组方法细节
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 小程序开发之路(一)
  • 一文看透浏览器架构
  • 智能网联汽车信息安全
  • ​configparser --- 配置文件解析器​
  • #1014 : Trie树
  • #stm32整理(一)flash读写
  • #传输# #传输数据判断#
  • (+4)2.2UML建模图
  • (1)(1.9) MSP (version 4.2)
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (7)STL算法之交换赋值
  • (a /b)*c的值
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .gitattributes 文件
  • .Net 4.0并行库实用性演练
  • .NET CLR Hosting 简介
  • .Net 路由处理厉害了
  • .net 使用ajax控件后如何调用前端脚本
  • .net 验证控件和javaScript的冲突问题
  • .net(C#)中String.Format如何使用
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)