(第十三章)小满zs-Nginx-负载均衡upstream

Nginx-负载均衡upstream

upstream是在http块下面的指令,跟server块是同级的。

基本语法

upstream的基本语法如下,一个upstream块需要设置一个名称,这个名称可以在server块里面的location块中当作proxy主机 (域名/ip) 使用,在upstream块中可以设置多个服务器地址

声明一个名称为nodeupstream

css 复制代码
upstream node {
    server 127.0.0.1:9001;
    server 127.0.0.1:9002;
    server 127.0.0.1:9003;
}

location中当作proxy主机 (域名/ip) 使用 :

arduino 复制代码
location / {
    proxy_pass http://node;
}

1.默认状态是按照轮询的方式去做负载均衡的

就像上面的配置中,配置了三个服务器的地址,如果你向 localhost 发起了90 次请求。那么这90 次请求都会代理到名称为nodeupstream设置的这三个服务器,并且请求的次数会平均分配给这三个服务器。也就是说每个服务器被请求的次数为30次。

示例:

127.0.0.1:9001

js 复制代码
const express = require('express')

const app = express()

var num = 1

app.get('/api/test', (req, res) => {
    console.log(req.ip)
    res.send({
        code: 200,
        message: '访问成功!'
    })
    console.log('Nginx 9003 负载均衡 28', num)
    num++
})

app.listen(9001, () => {
    console.log('服务成功运行!')
})

127.0.0.1:9002

js 复制代码
const express = require('express')

const app = express()

var num = 1

app.get('/api/test', (req, res) => {
    console.log(req.ip)
    res.send({
        code: 200,
        message: '访问成功!'
    })
    console.log('Nginx 9003 负载均衡 28', num)
    num++
})

app.listen(9002, () => {
    console.log('服务成功运行!')
})

127.0.0.1:9003

js 复制代码
const express = require('express')

const app = express()

var num = 1

app.get('/api/test', (req, res) => {
    console.log(req.ip)
    res.send({
        code: 200,
        message: '访问成功!'
    })
    console.log('Nginx 9003 负载均衡 28', num)
    num++
})

app.listen(9003, () => {
    console.log('服务成功运行!')
})

然后使用postman服务器发送请求:

我们总共请求了90次,可以看到上面设置的三个服务器地址都被请求了30次,这就是负载均衡的默认轮询的方式。

这里补充一下:

http://101.200.242.117/api/test这个地址是node服务器的接口的地址,当请求路径中出现/,就会被代理分发到名称为nodeupstream中设置的服务器地址。

使用postman对接口进行压测(一键发送多次请求):

2.权重weight

upstream中的 server 设置的权重越大的,接收的请求次数越多,设置的越小的接收的请求次数就越少。

ini 复制代码
upstream node {
    server 127.0.0.1:9001 weight=3;
    server 127.0.0.1:9002 weight=2;
    server 127.0.0.1:9003 weight=1;
}

效果:

我的理解是,我们依次为三个服务器地址分配了权重:3、2、1 ,那么总的权重就是6 ,然后我们总共的请求数量是90次,那么就是把总的请求数量90分成了6份,那么一份就是15,所以,权重为3的服务器被请求了45次,权重为2的服务器被请求了30次,权重为1的服务器被请求了15次。

3.fail_timeout、 backup

fail_timeout:故障等待超时时间(等待多少秒后未请求成功)。

backup:备用服务器修饰符,可以为一个upstream设置一个backup的server,在生产server全部都出问题之后,可以自动切换到备用server上,为回复服务争取时间。

ini 复制代码
upstream node {
    server 127.0.0.1:9001 fail_timeout=60;
    server 127.0.0.1:9002 fail_timeout=30;
    server 127.0.0.1:9003 backup;
}

上述配置表达的意思是:当请求第一个server127.0.0.1:9001 的服务器的时间超过60秒,就切换备用服务器(使用backup修饰的服务器),当请求第二个server127.0.0.1:9001 的服务器的时间超过30秒,就切换备用服务器(使用backup修饰的服务器)。

演示:

由于我们的所有请求都没有超时,所以没有请求备用服务器

相关推荐
小二·6 分钟前
Python Web 开发进阶实战:AI 伦理审计平台 —— 在 Flask + Vue 中构建算法偏见检测与公平性评估系统
前端·人工智能·python
走粥14 分钟前
选项式API与组合式API的区别
开发语言·前端·javascript·vue.js·前端框架
We་ct17 分钟前
LeetCode 12. 整数转罗马数字:从逐位实现到规则复用优化
前端·算法·leetcode·typescript
方安乐26 分钟前
react笔记之useMemo
前端·笔记·react.js
清风细雨_林木木34 分钟前
react 中 form表单提示
前端·react.js·前端框架
小二·41 分钟前
Python Web 开发进阶实战:边缘智能网关 —— 在 Flask + MicroPython 中构建轻量级 IoT 边缘推理平台
前端·python·flask
TOPGUS42 分钟前
解析200万次对话数据:ChatGPT引用内容的核心特征与优化策略
前端·人工智能·搜索引擎·chatgpt·seo·数字营销
羊仔AI探索1 小时前
前端已死,未来已来,谷歌Gemini 3 Pro杀回来了!
前端·人工智能·ai·aigc
快起来搬砖了1 小时前
UniApp/Vue2 通用工具函数库(完整版):覆盖校验、格式、业务全场景
前端·uni-app
GGGG寄了1 小时前
HTML——图像标签及多媒体标签
前端·html