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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 3 入门基础知识【3】递归函数以及参数部分

在编码过程中除了使用Python内置的函数以外&#xff0c;我们也经常需要自己定义函数。今天来回顾python中的函数。 目录 1.定义函数 2.中函数的返回值 3.递归函数 4.Python函数参数 5.Python函数使用默认参数 6.Python函数使用可变参数 7.Python函数使用可变关键字参数 …

针对thinkphp站点的漏洞挖掘和经验分享

0x1 前言 浅谈 目前在学习和研究thinkphp相关漏洞的打法&#xff0c;然后最近对于thinkphp资产的收集方面有了一个简单的认识&#xff0c;然后写一篇新手看的thinkphp相关的漏洞收集和挖掘的文章来分享下。然后后面是给师傅们分享下后台文件上传&#xff0c;然后直接打一个ge…

WPF 资源、引用命名空间格式、FrameworkElement、Binding、数据绑定

资源 对象级别独立文件 静态资源使用(StaticResource)指的是在程序载入内存时对资源的一次性使用&#xff0c;之后就不再去访问这个资源了。 动态资源使用&#xff08;DynamicResource&#xff09;使用指的是在程序运行过程中仍然会去访问资源。 显然&#xff0c;如果你确定…

欧阳坚持每周一篇高质量文章,半年后收入1380.27元

前言 大家好&#xff0c;我是欧阳&#xff0c;到目前为止欧阳已经坚持连续高质量周更文章7个多月了。在第6个月时就想写一篇半年总结&#xff0c;但是因为拖延症直到现在才写这篇半年复盘文章。 我的成果 先来说一下连续周更半年取得的成果&#xff0c;分别是收入1380.27元、…

redis模块和ioredis的注意事项

redis模块和ioredis的注意事项 文章目录 redis模块和ioredis的注意事项前言一、ioredis和redis使用zrange的比较二、出现zrange结果不同的原因总结 前言 node.js在使用redis的时候有两个库可以选择&#xff0c;一个是redis、另一个是ioredis&#xff0c;我一直以来也没有太大关…

LeetCode之回溯

1.全排列 1.1 题目 1.2 题解 LeetCode 力扣官方题解 1.3 代码 class Solution {public List<List<Integer>> permute(int[] nums) {// 创建一个空的列表 res&#xff0c;用于存储所有的排列结果List<List<Integer>> res new ArrayList<>();/…

练习题PHP5.6+变长参数 ⇒ usort回调后门 ⇒ 任意代码执行

突破长度限制 使用usort上传后门 usort — 使用用户自定义的比较函数对数组中的值进行排序 paramusort(...$GET); ...为php设置可变长参数 在url地址栏中输入[]test&1[]phpinfo();&2assert 包含了phpiinfo&#xff08;&#xff09;命令执行 结合usort使用 assert…

SpringMVC快速入门

MVC模式 MVC&#xff08;Model-View-Controller&#xff09;模式是一种设计模式&#xff0c;用于分离应用程序的不同方面&#xff0c;以提高代码的组织性和可维护性。在Spring MVC框架中&#xff0c;MVC模式的作用是将应用程序的不同职责分开&#xff0c;从而简化开发和维护过…

Datawhale X 魔搭 AI夏令营第四期 AIGC方向 task02笔记

AI工具使用 1. baseline 代码2. 使用通义千问理解代码2.1 工作流程2.2 逐行释意 3. 使用通义千问生成 Prompt3.1 生成的 Prompt3.1 根据 Prompt 生成的图片 1. baseline 代码 !pip install simple-aesthetics-predictor!pip install -v -e data-juicer!pip uninstall pytorch-…

EasyBoss ERP上线TikTok热销数据功能,助力TikTok本土店卖家快速选品上货!

想要你的TikTok本土小店销量不断增长&#xff0c;选品至关重要。只有选品问题解决了&#xff0c;后续的投放、小店定调等动作才有意义。 因此&#xff0c;今天就来分享几种TikTok本土小店的选品策略。 一、TikTok Shop选品的底层逻辑 图源&#xff1a;TikTok Shop 在选品之前…

SpringBoot 自定义 starter

1. 官方文档 SpringBoot 版本 2.6.13&#xff0c;相关链接 Developing with Spring Boot 1.1 什么是 Starter Starters are a set of convenient dependency descriptors that you can include in your application. You get a one-stop shop for all the Spring and relate…

C++哪些变量在没有显式初始化的情况下会被初始化为0

首先&#xff0c;我们需要明白C程序编译链接后会包含以下几个主要段(Section)。 代码段(.text)&#xff1a;存放程序的可执行代码&#xff0c;通常是只读的数据段(.data)&#xff1a;存放已初始化的全局变量和静态变量BSS段(.bss)&#xff1a;存放未初始化的全局变量和静态变量…

Git文件管理技巧:轻松删除与查看文件,忽略不必要的文件与文件夹!

避免文件混乱&#xff1a;Git 文件操作技巧 一、Git工作原理概述二、删除文件三、查看指定文件的修改四、指定不需要 Git 管理的文件五、总结 一、Git工作原理概述 Git是一种分布式版本控制系统&#xff0c;其核心在于其高效的快照机制、强大的分支与合并功能、本地开发的灵活…

详细分析JWT的基本知识(附Demo)

目录 前言1. 基本知识2. JWT验证过程3. Demo 前言 对于Java的基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; 1. 基本知识 紧凑的、U…

《Kotlin核心编程》2021版复习记录

目录 0 前言1 基础语法1.1 数据类型1.2 数组1.3 集合1.4 遍历数据和集合1.5 函数声明返回值类型1.6 var 和 val 2 高阶函数和lambda表达式2.1 高阶函数2.2 方法和成员引用2.3 链式调用2.4 扩展函数2.5 面向表达式编程2.5.1 when表达式2.5.2 for循环2.5.3 in 2.6 字符串相等 3 面…

手撕初阶数据结构之---排序

1.排序概念及运用 排序&#xff1a;所谓排序&#xff0c;就是使⼀串记录&#xff0c;按照其中的某个或某些关键字的⼤⼩&#xff0c;递增或递减的排列起来的操作。 常见的排序算法 直接插入排序的时间复杂度是O(N^2) 这个是最差的情况下&#xff0c;就是大的在前面&#xff…

被老韭菜阴阳了?未来一个人最核心的能力:守脑如玉——早读(逆天打工人爬取热门微信文章解读)

tomato 版本TO&#xff1f; 引言Python 代码第一篇 洞见 未来一个人最核心的能力&#xff1a;守脑如玉第二篇 股友见闻结尾 &#xff08;你看出本质了吗&#xff1f;&#xff09; 引言 昨晚听别人的分析 好神奇 我会惊叹 为什么大家看到的都是同样的东西 而别人进行思考 思考…

Python 在PDF中添加条形码、二维码

在PDF中添加条码是一个常见需求&#xff0c;特别是在需要自动化处理、跟踪或检索PDF文件时。作为一种机器可读的标识符&#xff0c;PDF中的条码可以包含各种类型的信息&#xff0c;如文档的唯一标识、版本号、日期等。以下是一篇关于如何使用Python在PDF中添加条形码或二维码的…

Python开源项目周排行 2024年第13周

#2024年第13周2024年8月5日1roop一款基于深度学习框架TensorFlow和Keras开发的单图换脸工具包&#xff0c;提供了丰富的功能和简洁易用的界面&#xff0c;使得用户可以轻松实现单图换脸操作。支持多张人脸替换成同一个人脸&#xff0c;勾选多人脸模式即可 人脸替换 高清修复自…

SPDK源码剖析一hello_world程序

SPDK初识之hello_world程序分析 首先是hello_world程序整体框架分析 int main(int argc, char **argv) {rc parse_args(argc, argv, &opts);if (spdk_env_init(&opts) < 0) { // spdk环境初始化&#xff0c;最终调用dpdk环境初始化}// 扫描设备&#xff0c;将驱…