haproxy七层代理总结

news2024/11/15 18:36:10

一、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  -y

        echo   webserver1 - 172.25.254.10  >  /user/share/nginx/html/index.html

        systemctl  enable  --now  nginx

        systemctl  stop  firewalld

server2:

       yum  install  nginx  -y

        echo   webserver2 - 172.25.254.20  >  /user/share/nginx/html/index.html

        systemctl  enable  --now  nginx

        systemctl  stop  firewalld

测试:

    curl  172.25.254.20
haproxy:
安装haproxy

dnf  install  haproxy  -y

修改/etc/haproxy/haproxy.cfg文件配置

vim /haproxy/haproxy.cfg

修改如下:

#
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
 frontend webcluster
    bind *:80
    mode http
    use_backend webcluster-host
 
 backend webcluster-host
    balance roundrobin
    server web1 172.25.254.10:80
    server 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来进行配置,默认等级为info

            chroot      /var/lib/haproxy       # 改变当前工作目录,基于安全性的考虑
            pidfile     /var/run/haproxy.pid  # 当前进程pid文件
            maxconn     4000                # 当前进程最大的连接数,很重要的一个参数,后面有详细的讲解。
            user        haproxy             # 启动服务所属用户
            group       haproxy             # 启动服务所属组
            daemon                            # 开启守护进程运行模式

            # turn on stats unix socket
            stats socket /var/lib/haproxy/stats        # haproxy socket文件
全局参数配置及日志分离:

多进程:

vim/etc/haproxy/haproxy.cfg

多线程:

五.proxies配置

参数说明:

defaults
    mode                    http    # http 七层
    log                     global  # 延用上面的设定
    option                  httplog # http 的日志
    option                  dontlognull  # 空连接的日志
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 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 webcluster
    bind *:80  
    mode http     
    balance roundrobin
    redirect prefix http://www.baidu.com/[转百度】
    server web1 172.25.254.10:80
    server web2 172.25.254.20:80

修改保存

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

Socat工具:

配置:

listen webcluster
    bind *:80  
    mode http     
    balance roundrobin
    server web1 172.25.254.10:80
    server 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.cfg
 
 
listen webcluster
    bind *:80
    mode http
    balance roundrobin    ---- 动态算法
    server web1 172.25.254.10:80 check inter 2 fall 3 rise 5 weight 2
    server web2 172.25.254.20:80 check inter 2 fall 3 rise 5 weight 1
    server web_sorry 172.25.254.100:8080 backup

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

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

相关文章

一篇文章带你学会向量数据库Milvus

一篇文章带你学会向量数据库Milvus 索引管理 Milvus 提供多种索引类型来对字段值进行排序&#xff0c;以实现高效的相似性搜索。它还提供三种度量类型&#xff1a;余弦相似度 (COSINE)、欧几里得距离 (L2) 和内积 &#xff08;IP&#xff09;来测量向量嵌入之间的距离。 建议…

零基础学会机器学习,到底要多久?

这两天啊&#xff0c;有不少朋友和我说&#xff0c;想学机器学习&#xff0c;但是之前没有基础&#xff0c;不知道能不能学得会。 首先说结论&#xff0c;只要坚持&#xff0c;就能学会&#xff0c;但是一定不能三天打鱼两天晒网&#xff0c;要持之以恒&#xff0c;至少每隔两…

小白零基础学数学建模系列-Day4-线性规划基础与案例分析

文章目录 1. 线性规划基础1.1 基本概念1.2 求解方法 2 线性规划经典问题2.1 生产计划问题2. 2 运输问题 案例1&#xff1a;生产计划问题背景模型建立模型求解 案例2&#xff1a;运输问题背景模型建立模型求解 案例3&#xff1a;货机货物装载问题问题背景假设条件问题要求模型建…

【微信小程序】WXSS 模板样式

1. 什么是 WXSS WXSS (WeiXin Style Sheets)是一套样式语言,用于美化 WXML 的组件样式,类似于网页开发中的 CSS。 2. WXSS 和 CSS 的关系 3.rpx (1). 什么是 rpx 尺寸单位 rpx(responsive pixel)是微信小程序独有的,用来解决屏适配的尺寸单位。 (2). rpx 的实现原理 …

哈希表 -四数相加II

454. 四数相加II 方法一&#xff1a;分组哈希表 /*** param {number[]} nums1* param {number[]} nums2* param {number[]} nums3* param {number[]} nums4* return {number}*/ var fourSumCount function(nums1, nums2, nums3, nums4) {const twoSumMap new Map();let coun…

【机器学习之深度学习】深度学习和机器学习的关系以及深度学习的应用场景

引言 深度学习和机器学习是人工智能领域的两个重要分支&#xff0c;它们之间既有联系也有区别 文章目录 引言一、深度学习和机器学习的关系1.1 联系1.2 区别1.2.1 模型复杂度1.2.2 数据需求1.2.3 特征提取1.2.4 训练速度和计算资源 二、深度学习有哪些应用场景2.1 计算机视觉2.…

Unity | AmplifyShaderEditor插件基础(第一集:简单了解ASE和初识)

前言 我本来老老实实的写着我的Shader&#xff0c;群里的小伙伴强烈建议我开始讲ASE&#xff0c;我只能说&#xff0c;我是一个听话的Up。 一、什么是ASE 全称AmplifyShaderEditor&#xff0c;是一个unity插件&#xff0c;存在于unity商城中&#xff0c;售价看他们心情。&am…

deepin V23 前瞻丨深度适配RISC-V架构,打造全面兼容与高性能的开源桌面操作系统

查看原文 中国工程院院士倪光南曾表示&#xff0c;RISC-V架构因其开放性和灵活性&#xff0c;已成为中国CPU领域最受欢迎的选择之一&#xff0c;并有望成为推动新一代信息技术发展的关键驱动力。目前&#xff0c;deepin&#xff08;深度&#xff09;社区已与RISC-V生态系统建立…

ECMAScript6语法:类

在 ES6 中新增了类的概率&#xff0c;多个具有相同属性和方法的对象就可以抽象为类。类和对象的关系如下&#xff1a; &#xff08;1&#xff09;类抽象了对象的公共部分&#xff0c;它泛指某一大类&#xff08;class&#xff09;。 &#xff08;2&#xff09;对象特指通过类…

haproxy 7000字配图超详细教程 从小白到入门

简介&#xff1a;HAProxy是一个免费的负载均衡软件&#xff0c;可以运行于大部分主流的Linux操作系统上。HAProxy提供了L4(TCP)和L7(HTTP)两种负载均衡能力&#xff0c;具备丰富的功能。HAProxy的社区非常活跃&#xff0c;版本更新快速,HAProxy具备媲美商用负载均衡器的性能和稳…

基于python理解最大似然MLE-(简单正态分布估计、高斯混合模型GMM)

最大似然法&#xff08;Maximum Likelihood Estimation&#xff0c;简称MLE&#xff09;是一种统计方法&#xff0c;用于估计概率模型的参数。其基本思想是寻找一组参数值&#xff0c;使得在这组参数下&#xff0c;观测数据出现的概率&#xff08;即似然性&#xff09;最大。这…

ARM64 在线仿真器

今天在晚上找到一个简单的ARM64在线仿真器&#xff0c;它非常适合学习ARM64的指令&#xff0c;在教学中应该很好用。网址ARM64 Online Simulatorhttp://163.238.35.161/~zhangs/arm64simulator/ 它是由康涅狄格州立大学的Shuqun Zhang教授开发的。软件基于Alexandro Sanchez开…

评价算法(topsis熵权法)

评价算法 熵权法 上面箭头的一步用到了带权重的距离公式。 上面是某种求权重的方法&#xff0c;合理就行。 但是在使用熵权法的时候&#xff0c;一定要注意用的是规范化矩阵再用熵权法求权重。 规范化之前一定要判断每一列的性质 #熵权法&#xff1a;import xlrd import num…

巴黎奥运会背后的8K国际公用信号制作

北京时间2024年8月12日凌晨3时&#xff0c;举世瞩目的巴黎奥运会闭幕式在法兰西体育场举行&#xff0c;闭幕式演出部分的主题为“记录”。BOSMA博冠首款8K 50P小型化广播级摄像机B1跟随中央广播电视总台“中国红”8K转播车&#xff0c;为田径比赛和闭幕式提供8K国际公用信号制作…

【Ajax使用说明】Ajax、Axios以及跨域

目录 一、原生Ajax 1.1 Ajax简介 1.2 XML简介 1.3 AJAX 的特点 1.3.1 AJAX的优点 1.3.2 AJAX 的缺点 1.4 AJAX 的使用 1.4.1AJAX的基本操作 1.4.2AJAX的传参 1.4.3 AJAX的post请求及设置请求体 1.4.4 AJAX响应json数据 1.4.5 AJAX请求超时与网络异常处理 1.4.5 AJ…

windows 使用Clion开发FreeSWITCH源码

1.准备环境 window安装clion可以编译freeswitch的docker镜像 2.clion配置ssh和Toolchain的配置 去这里看吧 3.makefile配置 Toolchain记得选ssh的 成功之后左下角有这个小锤子&#xff0c;这个小锤子就是生成makefile文件的&#xff0c;记得点击 同时就会出现这个东西 这样…

长文_ZATA

文章目录 环境配置问题miniconda安装torch报错OSError: [WinError 126] 找不到指定的模块。 环境配置问题 miniconda安装torch报错OSError: [WinError 126] 找不到指定的模块。 CSDN 原因&#xff1a;fbegmm.dll文件出现问题 解决方案&#xff1a; 使用依赖分析工具https:/…

SuccBI+低代码文档中心 —数据(数据连接、调度管理)

连接数据 数据加工和分析需要连接已存在的数据&#xff0c;通常是业务系统的数据或文件数据&#xff0c;业务系统数据一般存储在关系型数据库中。对于存储在json文件中的&#xff0c;也可以通过脚本数据加工的方式获取数据。 在数据模块下&#xff0c;点击新建&#xff0c;可以…

【Python机器学习】无监督学习——K-均值聚类算法

聚类是一种无监督的学习&#xff0c;它将相似的对象归到同一簇中&#xff0c;它有点像全自动分类。聚类方法几乎可以应用于所有的对象&#xff0c;簇内的对象越相似&#xff0c;聚类的效果越好。 K-均值聚类算法就是一种典型的聚类算法&#xff0c;之所以称之为K-均值是因为它…

【qt】QMainWindow下实现一个记事本

之前我们学过QWidget&#xff0c;QMainWindow会在ui界面多一个菜单 先实现ui界面 1.添加文本编辑&#xff0c;实现可以写多行 2.将文本编辑放大&#xff0c;拖动即可 3.编辑菜单栏 4.然后我们要实现对应子列表的功能&#xff0c;但是在这里不能转到槽&#xff0c;所以我们…