小白成长之路-haproxy负载均衡

文章目录

  • 一、概述
      • 1、HAProxy简介
      • 2、HAProxy特点和优点:
      • 3、HAProxy保持会话的三种解决方法
      • 4、HAProxy的balance 8种负载均衡算法
        • 1)RR(Round Robin)
        • 2)LC(Least Connections)
        • 3)SH(Source Hashing)
        • 4)uri(资源标识符)
        • 5)url\_param(资源定位符)
        • 6)rdp—cookie(name)
        • 7) source
        • 8) static-rr
      • 5、HAProxy 主要工作模式
  • 二、haproxy 负载均衡(基于nginx)
  • 三、KHN Triad
  • 总结


一、概述

1、HAProxy简介

官网:http://www.haproxy.com

HAProxy 是法国人Willy Tarreau开发的一个开源软件,是一款应对客户端10000以上的同时连接的高性能的TCP和 HTTP负载均衡器。其功能是用来提供基于cookie的持久性, 基于内容的交换,过载保护的高级流量管制,自动故障切换 ,以正则表达式为基础的标题控制运行时间,基于Web的报表,高级日志记录以帮助排除故障的应用或网络及其他功能。

HAProxy 提供高可用性、负载均衡以及基于TCP和HTTP的应用代理,支持虚拟主机,它是免费、快速并且可靠的一种负载均衡解决方案。适合处理高负载站点的 七层 数据请求。类似的代理服务可以屏蔽内部真实服务器,防止内部服务器遭受攻击。

2、HAProxy特点和优点:

  1. 支持原生SSL,同时支持客户端和服务器的SSL.
  2. 支持IPv6和UNIX套字节(sockets)
  3. 支持HTTP Keep-Alive
  4. 支持HTTP/1.1压缩,节省宽带
  5. 支持优化健康检测机制(SSL、scripted TCP、check agent…)
  6. 支持7层负载均衡。
  7. 可靠性和稳定性非常好。
  8. 并发连接 40000-50000个,单位时间处理最大请求 20000个,最大数据处理10Gbps.
  9. 支持8种负载均衡算法,同时支持session保持。
  10. 支持虚拟主机。
  11. 支持连接拒绝、全透明代理。
  12. 拥有服务器状态监控页面。
  13. 支持ACL(access control list)。

3、HAProxy保持会话的三种解决方法

HAProxy为了让同一客户端访问服务器可以保持会话。有三种解决方法:客户端IP、Cookie以及Session。

  1. 通过 客户端IP 进行Hash计算并保存,以此确保当相同IP访问代理服务器可以转发给固定的真实服务器。

  2. 依靠真实服务器发送客户端的 Cookie信息 进行会话保持。

  3. 将保存真实服务器的 Session 以及服务器标识 ,实现会话保持。

    (HAProxy只要求后端服务器能够在网络联通,也没有像LVS那样繁琐的ARP配置)

4、HAProxy的balance 8种负载均衡算法

1)RR(Round Robin)

RR算法是最简单最常用的一种算法,即轮询调度

理解举例:有三个节点A、B、C

第一个用户访问会被指派到节点A

第二个用户访问会被指派到节点B

第三个用户访问会被指派到节点C

第四个用户访问继续指派到节点A,轮询分配访问请求实现负载均衡效果

2)LC(Least Connections)

最小连接数算法,根据后端的节点连接数大小动态分配前端请求

理解举例: 有三个节点A、B、C,各节点的连接数分别为A:4 B:5 C:6

第一个用户连接请求,会被指派到A上,连接数变为A:5 B:5 C:6

第二个用户请求会继续分配到A上,连接数变为A:6 B:5 C:6;再有新的请求会分配给B,每次将新的请求指派给连接数最小的客户端

由于实际情况下A、B、C的连接数会动态释放,很难会出现一样连接数的情况

此算法相比较rr算法有很大改进,是米钱用到比较多的一种算法

3)SH(Source Hashing)

基于来源访问调度算法,用于一些有Session会话记录在服务端的场景,可以基于来源的IP、Cookie等做集群调度

理解举例 有三个节点A、B、C,第一个用户第一次访问被指派到了A,第二个用户第一次访问被指派到了B

当第一个用户第二次访问时会被继续指派到A,第二个用户第二次访问时依旧会被指派到B,只要负载均衡器不重启,第一个用户都会被指派到A,第二个用户访问都会被指派到B,实现集群的调度

此调度算法好处是实现会话保持,但某些IP访问量非常大时会引起负载不均衡,部分节点访问量超大,影响业务使用

4)uri(资源标识符)

表示根据请求的URI,做cdn(内容分发网络)需使用

5)url_param(资源定位符)

表示根据HTTP请求头来锁定每 一 次HTTP请求。

6)rdp—cookie(name)

表示根据据cookie (name)来锁定并哈希每一次TCP请求。

7) source

表示根据请求的源IP,类似Nginx的IP hash机制。

8) static-rr

表示根据权重,轮询

5、HAProxy 主要工作模式

tcp模式:在客户端和服务器之间将建立一个全双工的连接,且不会对7层的报文做任何处理的简单模式。 通常用于SSL、SSH、SMTP等应用层。

http模式(一般使用):客户端请求在转发给后端服务器之前会被深度分析,所有不与RFC格式兼容的请求都会被拒绝。

二、haproxy 负载均衡(基于nginx)

1.安装haproxy
2.配置文件

vim /etc/haproxy/haproxy.cfg
配置完后加入

listen stats #定义监控页面    mode httpoption httplogbind *:1080                   #绑定端口1080    stats refresh 30s             #每30秒更新监控数据    stats uri /stats              #访问监控页面的uri    stats realm HAProxy\ Stats    #监控页面的认证提示    stats auth admin:admin        #监控页面的用户名和密码

在这里插入图片描述
3.验证
启动服务
在这里插入图片描述
在这里插入图片描述

轮询:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

三、KHN Triad

使用 keepalive 监控 haproxy 实现 nginx 的 负载均衡
1.准备两台服务器,修改名称为kn1,kn2并安装安装 keepalive 与 haproxy
2.配置文件
kn1:

vim /etc/keepalived/keepalived.conf

在这里插入图片描述

vim /etc/haproxy/haproxy.cfg

在这里插入图片描述

kn2:

vim /etc/keepalived/keepalived.conf

在这里插入图片描述

vim /etc/haproxy/haproxy.cfg
在这里插入图片描述

3.脚本编写
kn1,kn2

cat check_khn_nginx.sh 
#! /bin/bashnumber=$(ps -C haproxy --no-headers | wc -l)
if [$number -eq 0 ];thensystemctl stop keepalivedexit 1else exit 0
fi       
kn1:cat add_dnat.sh 
#!/bin/bash
#将访问的 192.168.100.3的流量 DNAT 到192.168.100.100
iptables -t nat -A PREROUTING -d 192.168.100.3 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.100:80```bash
kn2:cat add_dnat.sh 
#!/bin/bash
#将访问的 192.168.100.3的流量 DNAT 到192.168.100.100
iptables -t nat -A PREROUTING -d 192.168.100.3 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.101:80#转发监控页面(1080)流量到 192.168.100.100
iptables -t nat -A PREROUTING -d 192.168.100.3 -p tcp --dport 1080 -j DNAT --to-destination 192.168.100.101:1080

#转发监控页面(1080)流量到 192.168.100.100
iptables -t nat -A PREROUTING -d 192.168.100.3 -p tcp --dport 1080 -j DNAT --to-destination 192.168.100.100:1080


```bash
cat remove_dnat.sh 
#!/bin/bash
#清理DNAT规则
iptables -t nat -F

4.启动服务并验证
在这里插入图片描述
在这里插入图片描述
5.故障模拟
停用kn1的haproxy

在这里插入图片描述
kn2变成主:
在这里插入图片描述
依然可以访问:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

以上就是haproxy负载均衡,希望可以帮助到其他小伙伴们

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

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

相关文章

Kafka 与 RocketMQ 消息确认机制对比分析

目录 生产者消息确认机制 Kafka 生产者 ACK 机制 RocketMQ 生产者确认机制 消费者消息确认机制 Kafka 消费者确认机制 RocketMQ 消费者确认机制 核心差异对比 选型建议 消息确认机制是分布式消息中间件的核心功能之一,它直接关系到消息传递的可靠性和系统性能…

C/C++---rdbuf()函数

在C中,rdbuf() 是I/O流库中的一个核心成员函数,主要用于访问和操作流对象的缓冲区。这个函数在底层数据处理、流重定向以及自定义流操作等场景中应用广泛。下面将从多个方面详细解析 rdbuf() 函数。 基本概念与函数原型 rdbuf() 是 std::basic_ios 类的成…

【LLM】从零到一构建一个小型LLM--MiniGPT

从零到一构建一个小型LLM (Small Language Model)暂时起名为MiniGPT。这个模型将专注于因果语言建模 (Causal Language Modeling),这是许多现代LLM(如GPT系列)的核心预训练任务。模型设计: 我们设计的模型是一个仅包含解码器 (Dec…

网络安全威胁下的企业困境与破局技术实践

前言:网络安全威胁下的企业困境 在数字化转型的浪潮中,企业对信息技术的依赖程度日益加深,但随之而来的网络安全威胁也愈发严峻。据统计,全球每年因网络安全事件造成的经济损失高达数万亿美元,其中中小企业更是成为了网…

[RAG system] 信息检索器 | BM25 Vector | Pickle格式 | HybridRetriever重排序

第六章:信息检索器 在上一章中,我们成功完成了知识库摄入流程。这是巨大的进步~ 我们精心准备了文档"块"(类似独立的索引卡),并将其存储在两套智能归档系统中:向量数据库(用于基于含…

Android 高通平台修改音频参数效果文件-优化音频效果

Android 高通平台如何音频效果 修改音频参数效果文件-优化音频效果 按如下方式修改。 开发云 - 一站式云服务平台 diff --git a/vendor/qcom/proprietary/mm-audio/audcal/family-b/acdbdata//MTP/workspaceFile.qwsp b/vendor/qcom/proprietary/mm-audio/audcal/family-b/acdb…

Install Docker Engine on UbuntuMySQL

Install Docker Engine on Ubuntu&&MySQL安装docker安装mysql客户端连接数据库我真气鼠了,今天得到一个血泪的教训,以后一定看官方文档!!!学的课用的centos,指令全是yum,我这边不通用&a…

智能人体感应模块HC-SR501应用指南---使用esp32

人体热释电探头红外感应模块 人体感应开关HC-SR501蓝板新款 绿板-淘宝网 HC-SR501 人体红外感应电子模块传感器热释电探头感应开关RD-624-tmall.com天猫 模块信息 HC-SR501人体感应开关是一种基于红外线技术的自动控制模块,广泛应用于安防、智能家居和自动控制等领…

加速度传感器方向校准方法

保持平板平放在桌面上,将后置摄像头保持在平板的左上后方,或者右上后方,此为机器的正方向 1、以一台重力方向正常的机器做测试,通过DeviceInfoHw这个软件的加速度测试功能【Accelerometer Test】我们可以知道 X方向数据测试&#…

【OpenHarmonyOS应用开发】

OpenHarmonyOS应用开发1.OpenHarmonyOS应用开发环境安装2.初始化项目3.连接润和软件的开发板套件1.OpenHarmonyOS应用开发环境安装 进入HarmonyOS下载鸿蒙应用开发工具DevEco Studio 5.0.7.200版本。 双击打开下载好的可执行文件,点击下一步。 如果已经安装过&am…

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | AutoTextEffect(自动打字机)

📅 我们继续 50 个小项目挑战!—— AutoTextEffect组件 仓库地址:https://github.com/SunACong/50-vue-projects 项目预览地址:https://50-vue-projects.vercel.app/。 利用 Vue 3 的 Composition API 和一些简单的 CSS 动画来构…

[RAG] LLM 交互层 | 适配器模式 | 文档解析器(`docling`库, CNN, OCR, OpenCV)

第二章:LLM 交互层 在上一章中,我们学习了作为"项目总控"的管道协调器,它负责协调 RAG 系统中各个功能模块。 其中最重要的协调对象之一,便是负责与大型语言模型(LLM)进行智能交互的LLM 交互层…

Golang 并发快速上手

文章目录1. 为什么要用协程?1.1 进程与线程1.2 协程1.3 线程和协程的区别线程协程1.4 Go 协程(goroutines)和协程(coroutines)2.Go 协程基本内容2.1 channel2.2 select2.3 future 模式3. 实践示例3.1 并发处理多个网络…

ESP32轻松实现UDP无线通信

ESP32支持UDP通信,这是一种轻量级、高效的通信协议,适用于需要快速数据传输但对数据可靠性要求不高的场景。以下是关于ESP32如何实现UDP通信的详细说明: 1. UDP协议简介及其适用场景 UDP(用户数据报协议)是一种无连接的…

Electron实现“仅首次运行时创建SQLite数据库”

在桌面应用中,SQLite因其轻量、嵌入式特性成为本地存储的热门选择。但若重复初始化数据库,会导致数据覆盖或冗余。本文将详解如何让Electron应用仅在首次启动时创建SQLite数据库,后续启动直接连接现有库。一、核心逻辑与实现原理 核心思路&am…

阿里开源AI大模型ThinkSound如何为视频配上灵魂之声

目录 前言 一、当AI解决视频配音的困境 二、引入“思维链”:让AI像专业音效师一样思考 三、背后的技术支撑 四、未来ThinkSound会如何改变我们的世界? 总结 🎬 攻城狮7号:个人主页 🔥 个人专栏:《AI前沿技术要闻…

图论(1):多叉树

多叉树一、基础知识1. 图 & 树2. 模板2.1 建图二、简单循环1. 【模板】树的路径求和2. 道路修建(改)3. 联合权值4. 毛毛虫树三、自顶向下/自底向上1. 医疗中心2. 【模板】树的直径3. 【模板】最大子树和4. 信号放大器一、基础知识 1. 图 & 树 …

楼宇自动化:Modbus 在暖通空调(HVAC)中的节能控制(一)

引言**在当今的建筑领域,楼宇自动化正扮演着愈发关键的角色,它致力于提升建筑的舒适度、安全性以及能源效率。而暖通空调(HVAC)系统作为楼宇自动化中的核心部分,其能耗在整个建筑能耗中占比相当高,据相关数…

【SpringBoot】注册条件+自动配置原理+自定义starter

注册条件注入到容器内实体类型对象的属性都是null,这些对象并没有什么实际的意义,因为实体类的对象就是来封装对象的,结果你这些对象中什么都没有;解决方法是1.给这些属性赋值然后再注入bean但是这些属性又是固定的不是很好&#…

Server reports Content-Length Mismatch 的根源与解决方案

“服务器声明604字节,Yum却期待28680字节”——当包管理器与仓库服务器之间的信任崩塌时,会发生什么?问题重现 yum install package_name ... Interrupted by header callback: Server reports Content-Length: 604 but expected size is: 28…