Nginx - 负载均衡及其配置(Balance)
一、概述
定义
:在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载目标
:最佳化资源使用、最大化吞吐率、最小化响应时间、避免过载功能
:使用多台服务器提供单一服务(服务器农场)- ⭐ 工作流程
- 负载均衡器(server)监听 1~n 个外部端口(port)
- 客户端访问端口,向服务器(server)发起请求
- 负载均衡器根据负载均衡策略选择后端内网服务器(upstream)
- 负载均衡器将用户请求发送到选定的后端内网服务器(upstream)
- 内网服务器将请求的响应返回给负载均衡器(server)
- 负载均衡器再将响应发送到客户端
- 优点
- 安全性:向客户端隐藏内网结构,阻止了用户直接访问后台(内网)服务器,可以阻止对核心网络栈和运行在其它端口服务的攻击
- 可用性:当所有后台服务器出现故障时,负载均衡器转发请求到一个备用的负载均衡器、显示一条关于服务中断的消息等,提高容错能力
二、上游服务器组(upstream)
⭐ 调度算法
算法 | 说明 |
---|---|
轮询(默认) | 请求按时间顺序逐一分配到不同的后端服务器,Weight 指定轮询权值,Weight 值越大访问机率越高,用于后端服务器性能不均的情况 |
ip_hash | 按访问 IP 的 hash 结果将请求分配给服务器,来自同一个 IP 的访客固定访问一个后端服务器,解决动态网页的 session 共享问题 |
fair | 根据后端服务器的响应时间来分配请求,响应时间短的优先分配(必须下载 Nginx 的 upstream_fair 模块) |
url_hash | 按访问 url 的 hash 结果将请求分配给服务器,每个 url 定向到同一个后端服务器,进一步提高后端缓存服务器的效率 |
least_conn | 将请求转发给当前连接数最少的后端服务器,能够有效地将请求分配给负载较轻的服务器 |
hash |
状态参数
状态参数 | |
---|---|
down | 当前服务器废了,当前的 server 暂时不参与负载均衡 |
backup | 预留的备份机器,当所有非 backup 机器故障或者繁忙时,才会请求 backup 机器,因此这台机器的压力最轻 |
max_fails | 允许请求失败的次数,默认为 1,当超过最大次数时,返回 proxy_next_upstream 模块定义的错误 |
fail_timeout | 经历 max_fails 次失败后,暂停服务的时间 |
注意:负载调度算法为 ip_hash 时,后端服务器在负载均衡调度中的状态不能有 backup server,因为ip_hash不会基于可用性分配,仍会分给目标服务器
backup 服务器
-
功能:所有服务器都不能提供服务时,避免降低用户体验,配置 backup 服务器显示错误信息
-
backup server 配置
- backup upstream 服务器错误时的备份服务器
- localhost:8080 upstream 服务器错误时访问的 IP 和端口号
- /data/www/errorpage/index.html:错误时显示的页面的地址
-
示例
upstream webservers {server 192.168.18.201 weight=1 max_fails=2 fail_timeout=2;server 192.168.18.202 weight=1 max_fails=2 fail_timeout=2;server 127.0.0.1:8080 backup; }server {listen 8080;server_name localhost;root /data/www/errorpage;index index.html; }server {... }
三、示例
-
功能
- 设置一个 backend 上游服务器组
- 设置一个 backup 备份服务器
-
代码实现
# 定义一个名为 `backend` 的上游服务器组 upstream backend {# 定义负载均衡算法,这里使用 `least_conn` 算法least_conn;# 定义上游服务器,并设置不同的状态参数server backend1.example.com weight=3 max_fails=2 fail_timeout=30s;server backend2.example.com weight=2 max_fails=3 fail_timeout=30s;server backend3.example.com weight=1 max_fails=2 fail_timeout=20s;# 定义一个备份服务器,当所有主服务器都不可用时,流量将转发到备份服务器server backup.example.com backup;}# 定义一个虚拟主机 server {listen 80;server_name www.example.com;# 配置静态文件路径location / {root /data/www;index index.html;}# 配置负载均衡location /api/ {# 将所有 /api/ 开头的请求代理到 `backend` 上游服务器组proxy_pass <http://backend>;# 传递必要的头部信息给上游服务器proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# 设置超时时间和连接选项proxy_connect_timeout 60s;proxy_send_timeout 60s;proxy_read_timeout 60s;proxy_buffering on;proxy_buffer_size 4k;proxy_buffers 4 32k;proxy_busy_buffers_size 64k;proxy_temp_file_write_size 64k;}# 配置错误页面处理error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}# 配置日志文件access_log /var/log/nginx/access.log;error_log /var/log/nginx/error.log warn; }
-
配置解析
- upstream backend
- least_conn: 使用最少连接数算法,优先选择连接数最少的服务器来处理请求。
- 服务器配置:
- weight: 指定服务器的权重,权重越高,被选中的概率越大。
- max_fails: 允许的最大失败尝试次数,超过这个次数后,服务器将被标记为不可用。
- fail_timeout: 如果服务器达到 max_fails 限制,将在指定的时间段内被标记为不可用。
- 备份服务器: 当所有主服务器都不可用时,请求将被转发到备份服务器 backup.example.com。
- server:
- 监听端口: 配置监听在 80 端口。
- 静态文件路径: 配置根目录为 /data/www,默认首页为 index.html。
- 负载均衡配置: 将 /api/ 路径下的请求代理到 backend 上游服务器组。
- 头部信息传递: proxy_set_header 指令用于传递客户端请求的头部信息到上游服务器。
- 超时和缓冲设置: 配置请求超时时间和缓冲区大小,以优化代理请求的性能。
- 错误页面处理: 当发生 500、502、503 或 504 错误时,重定向到 /50x.html 错误页面。
- 日志文件: 配置访问日志和错误日志的存储路径及日志级别。
- upstream backend
相关文章:
Nginx - 负载均衡及其配置(Balance)
一、概述 定义:在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载目标:最佳化资源使用、最大化吞吐率、最小化响应时间、避免过载功能:使用多台服务器提供单一服务(服务器农场&am…...
MySQL存储引擎-存储结构
Innodb存储结构 Buffer Pool(缓冲池):BP以Page页为单位,页默认大小16K,BP的底层采用链表数据结构管理Page。在InnoDB访问表记录和索引时会在Page页中缓存,以后使用可以减少磁盘IO操作,提升效率。 ○ Page根据状态可以分…...
数据资产入表 解锁智慧城市新潜力
在21世纪的科技浪潮中,智慧城市以信息技术为核心,以数据为血液,通过智能化、精细化的管理,让城市变得更加智慧、更加宜居。而数据资产入表,正是这一变革中的关键一环,它不仅推动了科技的进步,更…...
按类别调整目标检测标注框的写入顺序以优化人工审核效率
引言 在目标检测数据标注审核过程中,我们常常会遇到以下情况:某些小目标的检测框嵌套在大目标检测框内,而在模型进行预标注后,这些小目标的框可能被写入到了大目标框的下层。在人工审核阶段,标注审核人员需要手动移动…...
深入理解YOLO系列目标检测头的设定方式
目录 YOLOv1的检测头结构 1. 网络结构概述 2. 结构细节 3. 优缺点 YOLOv2的检测头结构 1. 网络结构概述 2. 结构细节 3. 优缺点 YOLOv3的检测头结构 1. 网络结构概述 2. 结构细节 3. 优缺点 总结:YOLO 系列检测头的结构演变 YOLOv1的检测头结构 1. 网络…...
智慧农业物联网解决方案:道品科技水肥一体化
在当今科技飞速发展的时代,农业也迎来了一场深刻的变革。智慧农业物联网解决方案中的水肥一体化技术,正逐渐成为现代农业发展的重要助推器。它不仅提高了农业生产效率,还实现了精准施肥和灌溉,为农业可持续发展带来了新的机遇。 …...
单片机上电后程序不运行怎么排查问题?
1.电源检查。使用电压表测量单片机的电源电压是否正常,确保电压在规定的范围内,如常见的5V。 2.复位检查。检查复位引脚的电压是否正常,在单片机接通电源时,复位引脚通常会有一个高电平,按下复位按钮时,复位…...
OceanBase 数据库分布式与集中式 能力
OceanBase分布式数据库与集中式数据库的差异 分布式数据库能解决金融行业最有挑战的高并发低延迟的核心交易系统的稳定性、扩展性、高性能问题。OB之所以一直强调分布式是说它具备很强的数据处理能力,当然从OB4.0开始也支持集中式了。 在实际业务场景中20%是分布式…...
C#多线程
C#中的多线程编程是开发高效并发应用程序的关键技术之一,它允许程序同时执行多个任务,从而提升应用程序的响应速度和性能。为了更好地理解C#中的多线程使用和定义,我们可以从以下几个方面来探讨:线程的基本概念、创建线程的方法、…...
Apache HTTP 服务器深度性能优化
引言 在前几篇文章中,我们讨论了基础和高级性能优化策略。现在,我们将深入探讨一些具体的优化实践,帮助您实现更精细的控制,并确保Apache服务器在各种复杂环境中都能保持最佳性能。 1. 细粒度的Apache配置调整 1.1 MPM参数微调…...
芯片级IO (Pad) Ring IP Checklist
SoC top顶层数字后端实现都会涉及到IO Ring (PAD Ring)的设计。这里面包括VDD IO,VDDIO IO, Signal IO, Corner IO,Filler IO,IO power cut cell等等。 数字后端零基础入门系列 | Innovus零基础LAB学习Day2 数字IC后端实现TOP F…...
无界wujie网址
文档网址:微前端是什么 | 无界 demo:https://wujie-micro.github.io/demo-main-vue/react17...
vulnhub靶场【DriftingBlues】之6
前言 靶机:DriftingBlues-6,IP地址192.168.1.63,因为重装靶机后期为192.168.1.64 攻击:kali,IP地址192.168.1.16 都采用虚拟机,网卡为桥接模式 主机发现 使用arp-scan -l或netdiscover -r 192.168.1.1…...
心情追忆- Nginx + OpenResty 构建高可用网关
之前,我独自一人开发了一个名为“心情追忆”的小程序,旨在帮助用户记录日常的心情变化及重要时刻。我从项目的构思、设计、前端(小程序)开发、后端搭建到最终部署。经过一个月的努力,通过群聊分享等方式,用…...
太速科技-527-基于3U VPX XCZU15EG+TMS320C6678的信号处理板
基于3U VPX XCZU15EGTMS320C6678的信号处理板 一、板卡概述 本板卡系我司自主研发的基于3U VPX风冷、导冷架构的信号处理板,适用于高速图像处理等。芯片采用工业级设计。 板卡采用标准3U VPX架构,板上集成一片Xilinx公司ZynqUltraScale系列F…...
Vue3源码笔记阅读1——Ref响应式原理
本专栏主要用于记录自己的阅读源码的过程,希望能够加深自己学习印象,也欢迎读者可以帮忙完善。接下来每一篇都会从定义、运用两个层面来进行解析 定义 运用 例子:模板中访问ref(1) <template><div>{{str}}</div> </template> <script> impo…...
多音轨视频使用FFmpeg删除不要音轨方法
近期给孩子找宫崎骏动画,但是有很多是多音轨视频但是默认的都是日语,电视上看没办法所以只能下载后删除音轨文件只保留中文。 方法分两步,先安装FFmpeg在转文件即可。 第一步FFmpeg安装 FFmpeg是一个开源项目,包含了处理视频的…...
AtomGit 开源生态应用开发赛报名开始啦
目录 1、赛项背景2、赛项信息3、报名链接4、赛题一:开发者原创声明(DCO)应用开发赛题要求目标核心功能 5、赛题二:基于 OpenHarmony 的开源社区应用开发简介赛题要求 6、参赛作品提交初赛阶段决赛阶段 7、参赛作品提交方式 1、赛项…...
使用 NVIDIA DALI 计算视频的光流
引言 光流(Optical Flow)是计算机视觉中的一种技术,主要用于估计视频中连续帧之间的运动信息。它通过分析像素在时间维度上的移动来预测运动场,广泛应用于目标跟踪、动作识别、视频稳定等领域。 光流的计算传统上依赖 CPU 或 GP…...
C语言学习day23:WriteProcessMemory函数/游戏内存数据修改工具开发
简言: 上一章我们说了获取应用进程的某数据(data),这一章我们就说说修改内存地址的数据。想要修改内存,那么就需要我们另一个WinAPI函数:WriteProcessMemory()函数。 WriteProcessMemory()函数 函数原型…...
利用 html_table 函数轻松获取网页中的表格数据
背景/引言 在数据爬取的过程中,网页表格数据往往是研究人员和开发者的重要目标之一。无论是统计分析、商业调研还是信息整理,表格数据的结构化特性都使其具有较高的利用价值。然而,如何快速、准确地从网页中提取表格数据始终是爬虫技术的一个…...
Postman接口测试:全局变量/接口关联/加密/解密
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 全局变量和环境变量 全局变量:在postman全局生效的变量,全局唯一 环境变量:在特定环境下生效的变量,本环境内唯一 …...
手机银行模拟器,一款高仿真银行app的模拟器,可以修改姓名 卡号 余额 做转账记录 做流水
📱手机银行模拟器让你自由定制你的金融生活。无论是流水账单、金额,还是个人信息,一切都可以按照你的意愿来模拟修改,让你体验模拟器带来的快乐! 链接:https://pan.quark.cn/s/c2f614f3447f 提取码&#…...
HT7183:16V, 4.5A的DC-DC升压转换器,常用在数码相机里
HT7183描述: HT7183是一款高功率异步升压转换器,集成120mΩ功率开关管,为便携式系统提供高效的小尺寸解决方案。具有2.6V至5.5V输入电压范围,可为各类不同供电的应用提供支持。该器件具备3A开关电流能力,并且能够提供高…...
Cobalt Strike 4.8 用户指南-第十四节 Aggressor 脚本
14.1、什么是Aggressor脚本 Aggressor Script 是Cobalt Strike 3.0版及更高版本中内置的脚本语言。Aggressor 脚本允许你修改和扩展 Cobalt Strike 客户端。 历史 Aggressor Script 是 Armitage 中开源脚本引擎Cortana的精神继承者。Cortana 是通过与 DARPA 的网络快速跟踪计…...
【Qt】QWidget中的常见属性及其功能(二)
目录 六、windowOpacity 例子: 七、cursor 例子: 八、font 九、toolTip 例子: 十、focusPolicy 例子: 十一、styleSheet 计算机中的颜色表示 例子: 六、windowOpacity opacity是不透明度的意思。 用于设…...
对象的克隆 单例模式
1) 如何实现对象的克隆? 1、为什么需要实现对象的克隆? 在某些情况下,需要创建一个与现有对象完全相同的副本,这就是对象克隆。 例如,在需要对对象进行备份、在不同的上下文中使用相同的类型的对象或者实现某些设计…...
预处理内容
预处理是干什么的呢? 分为三点: 1.宏替换 2.头文件导入 3.删除注释 #ifdef #include <iostream> // 定义一个宏,表示当前处于调试模式,在实际调试时可以定义这个宏,发布时取消定义#define DEBUG MODE int ma…...
Docker笔记
1 安装docker b11et3un53m.feishu.cn/wiki/Rfocw7ctXij2RBkShcucLZbrn2d 项目的资料地址(飞书) 当使用docker pull +名字 拉取镜像时报 Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for co…...
条件随机场(CRF)详解:原理、算法与实现(深入浅出)
目录 1. 引言2. 什么是条件随机场?2.1 直观理解2.2 形式化定义 3. CRF的核心要素3.1 特征函数3.2 参数学习 4. 实战案例:命名实体识别5. CRF vs HMM6. CRF的优化与改进6.1 特征选择6.2 正则化 7. 总结与展望参考资料 1. 引言 条件随机场(Conditional Ra…...
C++类与对象学习笔记(一)
https://www.bilibili.com/video/BV1jm4y1w7pa?spm_id_from333.788.player.switch&vd_sourcee8984989cddeb3ef7b7e9fd89098dbe8&p6 🚩🚩🚩来自b站“码农论坛”的视频“类与对象”做的笔记🚩🚩Ὢ…...
wrk如何测试post请求
wrk git地址 https://github.com/wg/wrk wrk 默认是针对 GET 请求的,但它也可以通过添加自定义的 HTTP 请求体和 头部信息来进行 POST 请求的压测。以下是详细的步骤: wrk -t4 -c100 -d30s -s post.lua http://example.com-t4:使用 4 个线…...
rust使用log与env_logger两个crate实现同时向控制台和文件输出日志。并在隔日自动创建新日志文件。
还是老习惯,不用太多的废话。直接上代码。 不过我之说一句话,这块需要自定义一个输出的Target来实现这个功能。 log = { version="0.4.22", default-features = false } env_logger = "0.11.5"pub(crate) fn setup_log_env(log_level: LevelFilter) {...
异步将用户信息存入 Redis 缓存
主要是为了解决Redis的缓存问题,异步将用户信息存入Redis缓存 首先我们需要引入一部线性池 核心概念 异步执行: 异步执行是指任务提交后不会立即等待其完成,而是立即返回并继续执行其他任务。任务将在后台执行,执行结果可以通过…...
WebRTC服务质量(05)- 重传机制(02) NACK判断丢包
WebRTC服务质量(01)- Qos概述 WebRTC服务质量(02)- RTP协议 WebRTC服务质量(03)- RTCP协议 WebRTC服务质量(04)- 重传机制(01) RTX NACK概述 WebRTC服务质量(…...
MySQL 存储过程与函数:增强数据库功能
一、MySQL 存储过程与函数概述 (一)存储过程的定义与特点 存储过程是一组预编译的 SQL 语句集合,它们被存储在数据库中,可根据需要被重复调用。例如,在一个电商系统中,经常需要查询某个时间段内的订单数据…...
丹摩|丹摩助力selenium实现大麦网抢票
丹摩|丹摩助力selenium实现大麦网抢票 声明:非广告,为用户体验 1.引言 在人工智能飞速发展的今天,丹摩智算平台(DAMODEL)以其卓越的AI算力服务脱颖而出,为开发者提供了一个简化AI开发流程的强…...
springcloud-gateway获取应用响应信息乱码
客户端通过springcloud gateway跳转访问tongweb上的应用,接口响应信息乱码。使用postman直接访问tongweb上的应用,响应信息显示正常。 用户gateway中自定义了实现GlobalFilter的Filter类,在该类中获取了上游应用接口的响应信息,直…...
Scala项目(一)
1,创建dao,models,service,ui等软件包 2,在各软件包下创建scala类 软件包dao里的代码 package org.app package daoimport models.BookModelimport scala.collection.mutable.ListBuffer//图书,数据操作…...
node(2) - npm run 原理
1. npm run 执行原理 npm run 命令的原理是执行 package.json 文件中定义的脚本。当你在命令行中运行 npm run 时,npm 会查找 package.json 文件中的 scripts 字段,然后执行对应的脚本命令。 2. 示例 2.1 以 dev:weapp 为例 运行 npm run dev:weapp 命令;npm 会查找 packa…...
概率论得学习和整理24:EXCEL的各种图形,统计图形
目录 0 EXCEL的各种图形,统计图形 1 统计图形 / 直方图 / 其实叫 频度图 hist最合适(用原始数据直接作图) 1.1 什么是频度图 1.2 如何创建频度图,一般是只选中1列数据(1个数组) 1.3 如何修改频度图的宽度 1.4 hist图的一个特…...
【zlm】 webrtc源码讲解三(总结)
目录 setsdp onwrite 编辑 play 参考 setsdp onwrite play 参考 【zlm】 webrtc源码讲解_zlm webrtc-CSDN博客 【zlm】 webrtc源码讲解(二)_webrtc 源码-CSDN博客...
YashanDB共享集群产品能力观测:细节足见功底
本文基于前泽塔数科研发总监-王若楠2024年11月在“2024年国产数据库创新生态大会”-“根”技术专场的演讲整理形成,主要对崖山共享集群YAC的架构、功能、高可用性、性能四大方面进行全面测试,并分享了测试环境和测试结论。 年初,基于某些商业…...
游戏引擎学习第50天
仓库: https://gitee.com/mrxiao_com/2d_game Minkowski 这个算法有点懵逼 回顾 基本上,现在我们所处的阶段是,回顾最初的代码,我们正在讨论我们希望在引擎中实现的所有功能。我们正在做的版本是初步的、粗略的版本,涵盖我们认…...
前端部署实战:从人工发布到全自动化流程
"又发错环境了!"周四下午,测试同学小李急匆匆地找到我。原来是开发人员手动部署时,不小心把测试代码发布到了生产环境。这已经是本月第二次类似的事故了。 回想起每次发布时的场景:手动打包、手动上传、手动替换文件...每一步都战战兢兢,生怕…...
JVM系列之内存区域
每日禅语 有一位年轻和尚,一心求道,多年苦修参禅,但一直没有开悟。有一天,他打听到深山中有一古寺,住持和尚修炼圆通,是得道高僧。于是,年轻和尚打点行装,跋山涉水,千辛万…...
如何用3个月零基础入门网络安全?_网络安全零基础怎么学习
🤟 基于入门网络安全/黑客打造的:👉黑客&网络安全入门&进阶学习资源包 前 言 写这篇教程的初衷是很多朋友都想了解如何入门/转行网络安全,实现自己的“黑客梦”。文章的宗旨是: 1.指出一些自学的误区 2.提供…...
易语言OCR证件照文字识别
一.引言 文字识别,也称为光学字符识别(Optical Character Recognition, OCR),是一种将不同形式的文档(如扫描的纸质文档、PDF文件或数字相机拍摄的图片)中的文字转换成可编辑和可搜索的数据的技术。随着技…...
【人工智能】基于Python的自然语言处理:深入实现文本相似度计算
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 文本相似度计算是自然语言处理(NLP)中的核心任务,广泛应用于搜索引擎、推荐系统、问答系统等领域。本文全面解析文本相似度计算的核心技术,使用Python中的spaCy和sentence-transformers库实现多种方法,包括基…...
基于wifi的火焰报警系统设计(论文+源码)
1 总体方案设计 在本次基于wifi模板的火焰报警系统中,整个系统架构如图2.1所示,其采用STM32F103单片机作为控制器,并结合DS18B20温度传感器,火焰传感器,ESP8266 WiFi通信模块,蜂鸣器,OLED液晶构成整个系统,…...