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.rhkb.cn/news/493920.html

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

相关文章

新版国标GB28181设备端Android版EasyGBD支持国标GB28181-2022,支持语音对讲,支持位置上报,开源在Github

经过近3个月的迭代开发&#xff0c;新版本的国标GB28181设备端EasyGBD安卓Android版终于在昨天发布到Github了&#xff0c;最新的EasyGBD支持了国标GB28181-2022版&#xff0c;还支持了语音对讲、位置上报、本地录像等功能&#xff0c;比原有GB28181-2016版的EasyGBD更加高效、…

YOLO-World:Real-Time Open-Vocabulary Object Detection

目录 摘要 Abstract YOLO-World 1 模型架构 1.1 Text Encoder 1.2 YOLO Backbone 2 RepVL-PAN 2.1 T-CSPLayer 2.2 I-Pooling Attention 2.3 预测 3 消融实验 3.1 预训练数据 3.2 RepVL-PAN的消融实验 3.3 文本编码器 4 效果展示 4.1 零样本 4.2 根据词汇表检…

MySQL -- 库的相关操作

目录 查看数据库 创建数据库 直接创建&#xff1a; 加约束条件 if not exists 字符集和校对规则 什么是字符集 什么是校对规则 校对规则的主要功能 校对规则的特性 查看指定的数据库使用的字符集和校对规则&#xff1a; 比较是否区分大小写字母差异 显示创建语句 …

【spring-cloud-gateway总结】

文章目录 什么是gateway如何导入gateway依赖路由配置gateway配置断路器导包配置 什么是gateway 在微服务架构中&#xff0c;gateway网关是一个服务&#xff0c;它作为系统的唯一入口点&#xff0c;处理所有的客户端请求&#xff0c;然后将这些请求路由到适当的服务。提供了几个…

mac iterm2 使用 lrzsz

前言 mac os 终端不支持使用 rz sz 上传下载文件&#xff0c;本文提供解决方法。 mac 上安装 brew install lrzsz两个脚本 注意&#xff1a;/usr/local/bin/iterm2-send-zmodem.sh 中的 sz命令路径要和你mac 上 sz 命令路径一致。 /usr/local/bin/iterm2-recv-zmodem.sh 中…

数智化医院分布式计算框架融合人工智能方向初步实现与能力转换浅析

人工智能中心计算机 一、引言 1.1 研究背景与意义 近年来&#xff0c;人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;与大数据技术的迅猛发展为医疗行业带来了前所未有的变革机遇。医疗领域积累了海量的数据&#xff0c;如电子病历&#xff08;Elec…

airflow docker 安装

mkdir -p /root/airflow cd /root/airflow && mkdir -p ./dags ./logs ./plugins ./configcd /root/airflow/ wget https://airflow.apache.org/docs/apache-airflow/2.10.4/docker-compose.yaml nano docker-compose.yamlAIRFLOW__CORE__LOAD_EXAMPLES: false #初始化…

【数据安全】如何保证其安全

数据安全风险 数字经济时代&#xff0c;数据已成为重要的生产要素。智慧城市、智慧政务的建设&#xff0c;正以数据为核心&#xff0c;推动城市管理的智能化和公共服务的优化。然而&#xff0c;公共数据开放共享与隐私保护之间的矛盾日益凸显&#xff0c;如何在确保数据安全的…

springboot463学生信息管理系统论文(论文+源码)_kaic

摘 要 使用旧方法对学生信息管理系统的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在学生信息管理系统的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次开发的学…

postman读取文件执行

要从文件获取的变量 text 在pre-request 中写从文件获取数据的脚本。脚本实现了&#xff0c;设置了text默认值&#xff0c;从文件读取text列&#xff0c;将text存入环境变量 //获取text参数 var text "济南天气"; if(data.text){ text data.text } pm.environment.…

我的个人博客正式上线了!

我的个人博客终于上线啦点此访问 经过一番折腾&#xff0c;我的个人博客终于上线啦&#xff01;这是一个属于我自己的小天地&#xff0c;可以用来记录生活点滴、技术分享以及一些随想。 在这里&#xff0c;我想分享一下搭建博客的整个过程和心得体会。 为什么要搭建博客&…

摩尔信使MThings的逻辑控制功能范例

数值自增控制 数值自增/自减控制流程可广泛应用于生产线控制、工业机器人轨迹跟踪、输送带速度调整、空间环境模拟、炼油厂加热炉温度控制、啤酒和制药发酵过程控制、造纸机水分和基重控制以及多回路瞬态热流跟踪控制等多个领域&#xff0c;通过精确调整和优化关键参数&#xf…

高效处理PDF文件的终极工具:构建一个多功能PDF转换器

在日常工作中&#xff0c;处理PDF文件几乎是每个人都不可避免的任务。无论是从PDF中提取数据、合并多个PDF文件&#xff0c;还是处理文件中的敏感信息和图像&#xff0c;PDF文件的处理都可能成为繁琐且耗时的工作。如果你是数据分析师、工程师&#xff0c;或者从事文档管理的工…

ROS1入门教程3:自定义消息

一、新建项目 # 创建工作空间 mkdir -p demo3/src# 创建功能包 catkin_create_pkg demo roscpp rosmsg message_generation# 打开功能包 cd src/demo 二、创建自定义消息 # 创建消息目录 mkdir msg# 打开消息目录 cd msg# 创建消息文件 vim User.msg# 定义消息字段 string n…

《Java核心技术I》Swing的滑动条

滑动条 组合框在离散值中选择&#xff0c;滚动条从连续值中选择。 构造滑动条最常用方法&#xff1a;var slider new JSlider(min,max,initaValue); 如果忽略参数&#xff0c;最大值&#xff0c;最小值&#xff0c;初始值分别为0,100,50. 垂直滑动条&#xff0c;new JSlid…

STM32单片机使用CAN协议进行通信

CAN总线&#xff08;控制器局域网总线&#xff09; 理论知识 CAN总线是由BOSCH公司开发的一种简洁易用、传输速度快、易扩展、可靠性高的串行通信总线 CAN总线特征 两根通信线&#xff08;CAN_H、CAN_L&#xff09;&#xff0c;线路少&#xff0c;无需共地差分信号通信&…

基础爬虫案例实战

我们已经学习了多进程、requests、正则表达式的基本用法,但还没有完整地实现过一个爬取案例。这一节&#xff0c;我们就来实现一个完整的网站爬虫&#xff0c;把前面学习的知识点串联起来&#xff0c;同时加深对这些知识点的理解。 准备工作 我们需要先做好如下准备工作。 安…

网络安全防范

实践内容 学习总结 PDR&#xff0c;$$P^2$$DR安全模型。 防火墙&#xff08;Firewall&#xff09;&#xff1a; 网络访问控制机制&#xff0c;布置在网际间通信的唯一通道上。 不足&#xff1a;无法防护内部威胁&#xff0c;无法阻止非网络传播形式的病毒&#xff0c;安全策略…

【QSS样式表 - ⑤】:QLineEdit控件样式

文章目录 QLineEdit控件样式QSS示例1 - select-QSS示例2 - read-onlyQSS示例3 - echoModeQSS示例4 - 自定义密码模式 QLineEdit控件样式 常用属性 常用选择器 QSS示例1 - select- 代码&#xff1a; QLineEdit{selection-color: red;selection-background-color: yellow…

ScottPlot学习的常用笔记-02

ScottPlot学习的常用笔记-02 写在前面Why&Target&#xff1a;这里记一些杂项。上下文&背景 先记一下这几个小时的新收获先说一下&#xff0c;为什么可开发可视工具缩放的问题ScottPlot5.0起步.net Core: WinExe.Net Framework也是可以的 写在前面 Why&Target&…