Nginx负载均衡之模块

 1.服务器配置指令

        Nginx 负载均衡是由代理模块和上游(upstream)模块共同实现的,Nginx 通过代理模块的反向代理功能将用户请求转发到上游服务器组,上游模块通过指定的负载均衡策略及相关的参数配置将用户请求转发到目标服务器上。上游模块可以与 Nginx 的代理指令(proxy_pass)、FastCGI 协议指令(fastcgi_pass)、uWSGI 协议指令(uwsgi_pass)、SCGI 协议指令(scgi_pass)、memcached 指令(memcached_pass)及 gRPC 协议指令(grpc_pass)实现多种协议后端服务器的负载均衡。

        Nginx 上游模块定义了 upstream 指令域,在该指令域内可设置服务器、负载均衡策略等负载均衡配置,配置样例如下,具体指令说明如下面表格中所示。

upstream backend {server backend1.example.com       weight=5;     # 被代理服务器端口号为80,权重为5server backend2.example.com:8080;               # 被代理服务器端口号为8080,默认权重为1server unix:/tmp/backend3;server backup1.example.com:8080   backup;       # 该被代理服务器为备份状态server backup2.example.com:8080   backup;       # 该被代理服务器为备份状态
}server {location / {proxy_pass http://backend;          # 将客户端请求反向代理到上游服务器组backend}
}
名称服务器指令
指令server
作用域upstream
配置格式address[parameters];
指令说明设定上游服务器组的服务器地址及连接参数

关于上表有以下几点需要注意:

  • 服务器地址可以是指定端口的 IP、域名或 Unix 套接字;
  • 如不指定端口,默认端口号为 80。
参数参数名称参数类型默认值参数说明
weight权重int1设置服务器的权重
max_fails最大失败数int1被代理服务器在 fail timeout 规定时间内的最大请求失败次数,超过设定值后,被代理服务器便被认为不可用。是否失败由 proxy_next_upstream、fastcgi_next_upstream、uwsgi_next_upstream、scgi_next_upstream、memcached_next_upstream 及 grpe_next_upstream 指令定义。0 表示关闭被代理服务器的失败检测功能
fail_timeout失败超时time10s被代理服务器被置为不可用的最长时间及被代理服务器被连续失败检测的最长时间
backup备份服务器----将被代理服务器标为备份状态,当其他非备份被代理服务器不可用时,会把请求转发给备份被代理服务器
down无效服务器----将被代理服务器标为不可用状态
max_conns最大连接数int0与被代理服务器建立活动连接的最大数量,默认值 0 表示没有限制
resolve动态解析----在被代理服务器域名对应的 IP 变化时,自动更新被代理服务器的 IP,该参数依赖 resolver 指令设置的域名解析服务器。仅对商业版本有效
serviceDNS SRV 记录name--DNS SRV 记录设置。仅对商业版本有效
slow_start慢恢复时间time0不可用服务器在设置时间内检测持续有效后便被恢复正常,默认关闭。仅对商业版本有效

其中,slow_start 参数不能与 Hash 负载均衡方法一同使用;若上游服务器组中只有一台被代理服务器,则 max_fails、fail_timeout 和 slow_start 参数都会被忽略,并且这个服务器将永远不会被置为无效。

名称共享内存区指令
指令zone
作用域upstream
配置格式name[size];
指令说明设定共享内存区域的名称及大小,用以在多个工作进程间共享配置及运行时的状态
名称长连接最大请求数指令
指令keepalive_requests
作用域upstream
指令格式number;
默认值100;
指令说明设置每个与被代理服务器建立的长连接中传输请求的最大数量,超过这个值后,该连接将被关闭
名称长连接缓存数
指令keepalive
作用域upstream
指令格式connections;
指令说明当 Nginx 与被代理服务器建立长连接时,设定每个工作进程可以缓存的与当前上游服务器组中被代理服务器保持长连接的数量。当超过设定值时,将根据最近最少使用算法(LRU)关闭连接

注意:该指令不会对活跃的 TCP 连接数有影响。

名称长连接缓存超时时间
指令keepalive_timeout
作用域upstream
指令格式timeout;
默认值60;
指令说明设置长连接缓存中,每个连接的超时时间,被缓存的连接超过这个时间仍未被激活使用时将被关闭

2.负载均衡策略指令 

        Nginx 支持多种负载均衡策略,如轮询(Round Robin)、一致性哈希(Consistent Hash)、IP 哈希(IP Hash)、最少连接(least_conn)等。Nginx 的默认负载均衡策略为轮询策略,不需要配置指令,轮询策略通过 server 的权重参数可实现手动分配的加权轮询策略。
        负载均衡策略配置指令均应编辑在 upstream 指令域的最上方,常见的配置指令如下面表格中所示。

名称哈希策略
指令hash
作用域upstream
指令格式key[consistent];
默认值--
指令说明设置用于哈希策略计算哈希值的键值,并对上游服务器组启用哈希的负载均衡策略。键值可以是文本、变量及其组合,当 consistent 参数被指定时,将启用 Ketama 一致性哈希的负载均衡策略
#配置样例如下:
upstream backend {hash $request_uri;              # 以客户端请求URI为计算哈希值的key...
}upstream backend {hash $request_uri consistent;   # 以客户端请求URI为计算哈希值的key,采用一致性哈希算法...
}
名称IP 哈希策略
指令ip_hash
作用域upstream
默认值--
指令说明设置启用 IP 哈希负载均衡策略,根据客户端的 IPv4 地址的前三个八位字节或整个 IPv6 地址作为哈希键计算哈希值,该方法确保同一客户端的请求总会被同一被代理服务器处理。当 IP 哈希值对应的被代理服务器不可用时,请求将被分配给其他服务器
#配置样例如下:
upstream backend {ip_hash;                # 启用IP哈希负载均衡策略server backend1.example.com;server backend2.example.com;server backend3.example.com down;server backend4.example.com;
}

        当服务器组中一台服务器被临时删除时,可使用 down 参数标记,那么客户端 IP 哈希值将会保留。

名称 最少连接策略
指令least_conn
作用域upstream
默认值 --
指令说明在考虑上游服务器组中各服务器权重的前提下,将客户端请求分配给拥有最少活跃连接被代理服务器的负载均衡策略
#配置样例如下:
upstream backend {least_conn;             # 启用最少连接负载均衡策略server backend1.example.com;server backend2.example.com;server backend4.example.com;
}
名称随机负载策略
指令random
作用域upstream
默认值--
指令说明在考虑上游服务器组中各服务器权重的前提下,将客户端请求分配给随机选择的被代理服务器
#配置样例如下:
upstream backend {random;                 # 每个请求都被随机发送到某个服务器server backend1.example.com;server backend2.example.com;server backend4.example.com;
}

        指令值参数 two,该参数表示随机选择两台被代理服务器,然后使用指定的负载策略进行选择,默认方法为 least_conn;可被指定的负载策略为 least_conn、least_time(仅对商业版有效)。 

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

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

相关文章

数据库回表及优化方法(附示例)

数据库回表及优化方法 什么是数据库回表如何优化回表1. 使用覆盖索引示例: 2. 减少查询列示例: 3. 适当增加索引示例: 4. 优化查询语句示例: 示例:优化回表的具体案例原始查询及索引:优化后的索引&#xff…

ThinkPHP 5.1.X 反序列化漏洞:深入分析与利用技巧

在Web应用开发中,框架的安全性至关重要。ThinkPHP作为广泛使用的PHP开发框架,其版本5.1.X中存在一个反序列化漏洞,允许攻击者执行任意代码。本文将深入分析该漏洞的原理、利用方法,并提供相应的防护措施。 漏洞背景 ThinkPHP 5.…

【three.js】设置canvas画布背景透明

通过Three.js渲染一个模型的时候,不希望canvas画布有背景颜色,也就是canvas画布完全透明,可以透过canvas画布看到画布后面叠加的HTML元素图文,呈现出来一种三维模型悬浮在网页上面的效果。 比如我们现在的模型背景是黑色的&#…

spring框架(SSM)

Spring Framework系统架构 Spring框架是一个开源的企业级Java应用程序框架,它为开发Java应用程序提供了一个全方位的解决方案。Spring的核心优势在于它的分层架构,这使得开发者可以灵活选择使用哪些模块而无需引入不需要的依赖。下面是Spring框架的一些关…

【每天学会一个渗透测试工具】AWVS安装及使用指南

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 ✨AWVS介绍 是应用漏洞扫描工具 💦使用docker安装 docker pull dockermi3aka/awvs启动镜像 docker run -dit …

数据采集项目1-用户行为数据同步

环境准备 linux配置、克隆103和104、编写集群分发脚本、ssh无密码登录配置、jdk安装、数据模拟集群日志数据输出脚本、xcall脚本、安装hadoop、zk安装、kafka安装、flume安装、mysql安装、maxwell安装、datax安装、hive安装 用户行为数据同步-总的数据流程图 第一层flume 数据…

Go基础编程 - 07 - 字典(map)及其约束

字典(map) 下一篇:结构体1. 声明2. nil 值字典3. 判断某个键是否存在4. 遍历5. delete() 删除键值对6. 约束7. 扩展 上一篇:指针 下一篇:结构体 map 是一种无序的基于 key-value 的数据结构,Go 语言中的 …

快速使用MetInfo搭建自己的官网

最近一直在找怎么样的开源项目可以用来搭建官网,不仅是个人官网还是企业官网,我发现使用MetInfo搭建官网非常适合,整体的步骤可以归纳为以下几步,我也一并描述清晰和准确: 准备域名和主机: 注册一个属于自…

JavaScript算法实现dfs查找省市区路径

需求 存在如下数组,实现一个算法通过输入区名,返回省->市->区格式的路径,例如输入西湖区,返回浙江省->杭州市->西湖区。 // 定义省市区的嵌套数组 const data [{name: "浙江省",children: [{name: "…

【百度智能体】零代码创建职场高情商话术助手智能体

一、前言 作为一个程序猿,工科男思维,走上职场后,总会觉得自己不会处理人际关系,容易背锅说错话,这时候如果有个助手能够时时刻刻提醒自己该如何说话如何做事情就好了。 而我们现在可以通过百度文心智能体平台构建各…

Pyinstaller 打包exe后,打开出现can‘t find package tkdnd 报错

这几天在用python做一个软件,过程中用到tkdnd这个模块 tkdnd 是一个用于 Tkinter 的拖放 (drag-and-drop) 扩展库,提供了在 Tkinter 应用程序中实现拖放功能的支持。Tkinter 是 Python 的标准 GUI 库,而 tkdnd 提供了额外的功能,…

Java基础——网络编程(一)

初识网络编程 网络编程:在网络通信协议下,不同计算机上运行的程序,进行的数据传输 应用场景:即时通信、网游对战、金融证券、国际贸易、邮件…… BS架构的优缺点: 1、不需要开发客户端,只需要页面服务端 2、…

计算机网络知识点全面总结回顾

物理层 OSI模型:数据链路层(流量控制),从传输层开始端到端;每一层的元素都称为实体,同一层的是对等实体;三个重要概念:服务(下层为上层提供调用)&#xff0c…

Python程序设计 2021秋计算和人工智能期中商科2

2021秋计算和人工智能期中商科2 第1关:矩形面积的计算 编写一个程序根据对角线长度和夹角度数计算矩形面积。 矩形面积如下所示 输入对角线长度和夹角度数,计算并显示矩形面积 要求结果显示两位小数 deval(input("对角线长度")) aeval(input(…

安全智能体的前沿技术研究与实践

安全底层技术演进经历了以下几个阶段:\n\n1. 规则驱动:在早期,安全技术主要依赖于人工编写的规则进行静态和动态分析,如基线核查规则、应用漏洞规则等。这种方式尽管在某些特定场景下有效,但面临着规则更新滞后和适应性…

1.Element的table表高度自适应vue3+js写法

解决方法 在页面table上添加id,动态计算每页table的最大高度 ,将高度保存在store中,每次切换路由时进行计算。 文章目录 解决方法前言一、页面table使用二、store状态库1.引入库 效果 前言 提示:状态管理使用的是pinia,用法参考…

腾讯云EdgeOne对比普通CDN的分别

EdgeOne架构图 普通CDN架构图 ​​​​​​​ 腾讯云EdgeOne对比普通CDN的不同点 服务范围和集成度 腾讯云EdgeOne是一体化的综合平台,不仅提供内容分发功能,还包括安全防护、性能优化和边缘计算等服务。EdgeOne提供了DDoS防护、WAF(Web应…

流媒体传输协议HTTP-FLV、WebSocket-FLV、HTTP-TS 和 WebSocket-TS的详细介绍、应用场景及对比

一、前言 HTTP-FLV、WS-FLV、HTTP-TS 和 WS-TS 是针对 FLV 和 TS 格式视频流的不同传输方式。它们通过不同的协议实现视频流的传输,以满足不同的应用场景和需求。接下来我们对这些流媒体传输协议进行剖析。 二、传输协议 1、HTTP-FLV 介绍:基于 HTTP…

基于springboot的大学计算机基础网络教学系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于springboot的大学计算机基础网络教学…

sqlite3模块的使用

1. SQLite数据库 SQLite是一个轻量级的, 基于磁盘的, 关系型的数据库管理系统(RDBMS). 它不需要一个独立的服务器进程或操作系统级别的配置. SQLite是D.Richard Hipp在2000年创建的, 并且由于其小巧, 快速, 可靠和易于使用的特性, 它在全球范围内得到了广泛的应用.以下是 SQLi…