当前位置: 首页 > news >正文

《nginx》三、nginx负载均衡

负载均衡(Load Balance):其含义就是将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提供网络的可用性和灵活性。

在这里插入图片描述

upstream demo_server {
        server  192.168.184.20:8080;
        server  192.168.184.20:8081;
        server  192.168.184.20:8082;
}
server {
        listen 80;
        server_name  balance.kutian.edu;

        location /balance/ {
                proxy_pass  http://demo_server;
        }
}
一、常用策略 - 轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除

upstream demo_server_1 {
        server  192.168.184.20:10020;
        server  192.168.184.20:10010;
}
二、常用策略 - 哈希算法

哈希算法是将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值我们称之为哈希值,散落明文到哈希值的映射是不可逆的
语法:hash key [ consistent ]
默认值:无
上下文:upstream

upstream demo_server_1 {
        hash  $request_uri;
        server  192.168.184.20:10020;
        server  192.168.184.20:10010;
}
server {
        listen 80;
        server_name localhost;
        location / {
                proxy_pass  http://demo_server_1;
        }
}

同一个uri只会分配到同一个服务器,可以防止在每个服务器都产生缓存,增加服务器负担

三、常用策略 - ip_hash算法

语法:ip_hash;
默认值:无
上下文:upstream
含义:指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题

upstream demo_server_1 {
        ip_hash;
        server  192.168.184.20:10020;
        server  192.168.184.20:10010;
}
三、负载均衡算法 - 最少连接数算法

从上游服务器,挑选一台已建立连接数最少的分配请求
least_conn指令
模块ngx_http_upstream_least_conn_module,禁用通过–without-http_upstream_least_conn_module

  • 1.least_conn;
    默认值:无
    上下文:upstream
  • 2.zone name [ size ];
    默认值:无
    示例:zone test 10M;
    上下文:upstream
    含义:记录后端服务器连接情况,判断哪些服务器连接数最少,一般1M可以处理5000-6000个连接
四:其他参数
参数含义
down表示当前的server暂时不参与负载
weight默认为1,值越大,负载的权重越大
max_fails默认为1,允许请求失败的次数,当超过时,返回http_next_upstream 模块定义的错误
fail_timeoutmax_fails一次失败后,暂停的时间
backup备用,其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻
五、负载均衡场景下Nginx针对上游服务器返回异常时的容错机制
  • 1.proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | noidempotent | off;
    默认值:error timeout;
    上下文:http, server, location
    在这里插入图片描述在这里插入图片描述

非幂等请求表示会对服务器内容产生影响的请求,比如post,delete…

含义:当上游服务器返回何种错误值时转发到下一个服务器

  • 2.proxy_next_upstream_timeout times;
    默认值:0;
    上下文:http, server, location
    含义:当某个上游服务器返回错误时,将请求转发到下一个服务器的时间
  • 3.proxy_next_upstream_tries number;
    默认值:0;
    上下文:http, server, location
    含义:错误发生时,最多会转发几次请求,这里的0不是说一次也不转发,而是表示不限制转发
  • 4.proxy_read_timeout time;
    默认值:60s;
    上下文:http, server, location
    含义:设置读取响应的时间,指定时间内没有接收完响应会返回timeout错误
  • 5.proxy_intercept_errors on | off;
    默认值:on;
    上下文:http, server, location
    含义:上游返回响应码大于300时,是直接将上游响应码返回客户端还是按照error_page处理,如果按error_page处理,要定义error_page页面

相关文章:

  • 操作系统——程序地址空间
  • JavaScript-操作表单和前端加密
  • 使用disruptor队列实现本地异步消费
  • 在Windows中自动压缩备份文件和目录的脚本
  • 猿创征文|Java计算【生日工具类】看这篇就够了
  • 网络-电脑网络突然变成球形, 网络不可用
  • 848. 有向图的拓扑序列(BFS应用)
  • 物联网开发笔记(8)- 使用Wokwi仿真ESP32开发板实现模数转换和脉宽调制
  • 古怪的Lucene中文分词方案 —— CJKAnalyzer
  • SPDK vhost-user结合SPDK NVMe-oF RDMA性能调优
  • mysql 创建函数
  • 支持十亿级密态数据、低代码,蚂蚁集团发布隐语开放平台
  • 关于kafka常见名词解释,你了解多少?
  • 吴恩达深度学习笔记(四)——深度学习的实践层面
  • KNN-KG论文学习笔记
  • Android优雅地处理按钮重复点击
  • co.js - 让异步代码同步化
  • ES6语法详解(一)
  • Javascript Math对象和Date对象常用方法详解
  • jquery ajax学习笔记
  • Js基础——数据类型之Null和Undefined
  • JS专题之继承
  • React的组件模式
  • SAP云平台里Global Account和Sub Account的关系
  • vue自定义指令实现v-tap插件
  • Webpack 4 学习01(基础配置)
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 模型微调
  • 排序算法之--选择排序
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • ​马来语翻译中文去哪比较好?
  • #define,static,const,三种常量的区别
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (算法)Travel Information Center
  • (转)VC++中ondraw在什么时候调用的
  • *** 2003
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .Net Core 中间件验签
  • .net mvc部分视图
  • .net MVC中使用angularJs刷新页面数据列表
  • .net 简单实现MD5
  • .NET业务框架的构建
  • @EnableWebMvc介绍和使用详细demo
  • @vue/cli脚手架
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [20171113]修改表结构删除列相关问题4.txt
  • [CareerCup][Google Interview] 实现一个具有get_min的Queue
  • [Flutter]打包IPA
  • [Git].gitignore失效的原因
  • [Gradle] 在 Eclipse 下利用 gradle 构建系统
  • [Java]快速入门优先队列(堆)手撕相关面试题
  • [Kubernetes]4. 借助腾讯云TKE快速创建Pod、Deployment、Service部署k8s项目
  • [LeetCode]Spiral Matrix