(第十三章)小满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修饰的服务器)。

演示:

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

相关推荐
啃火龙果的兔子4 分钟前
前端直接渲染Markdown
前端
z-robot11 分钟前
Nginx 配置代理
前端
用户479492835691518 分钟前
Safari 中文输入法的诡异 Bug:为什么输入 @ 会变成 @@? ## 开头 做 @ 提及功能的时候,测试同学用 Safari 测出了个奇怪的问题
前端·javascript·浏览器
没有故事、有酒30 分钟前
Ajax介绍
前端·ajax·okhttp
朝新_34 分钟前
【SpringMVC】详解用户登录前后端交互流程:AJAX 异步通信与 Session 机制实战
前端·笔记·spring·ajax·交互·javaee
裴嘉靖36 分钟前
Vue 生成 PDF 完整教程
前端·vue.js·pdf
毕设小屋vx ylw28242639 分钟前
Java开发、Java Web应用、前端技术及Vue项目
java·前端·vue.js
冴羽2 小时前
今日苹果 App Store 前端源码泄露,赶紧 fork 一份看看
前端·javascript·typescript
蒜香拿铁2 小时前
Angular【router路由】
前端·javascript·angular.js
brzhang2 小时前
读懂 MiniMax Agent 的设计逻辑,然后我复刻了一个MiniMax Agent
前端·后端·架构