Nginx与LUA(2)

news2024/11/19 20:40:31

您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~


除了反向代理,Nginx另一个主要的功能就是「负载均衡」。

所谓负载均衡,就是将请求分摊到多个服务器上执行,从而减轻单台服务器的访问压力。负载均衡一般都需要同时配置反向代理,通过反向代理跳转到指定的服务器上。

Nginx目前支持自带三种负载均衡策略,还有两种常用的第三方策略。

先准备好环境:

1、先安装三台Linux虚拟机,每台虚拟机上安装好JDK环境(不想装虚拟机,docker也可以)

2、开发一个最简单的SpringBoot应用

3、分别部署到其中两台服务器上,一台叫server01,一台叫server02

4、另一台服务器安装Nginx,做负载均衡,叫做server03

在application.properties文件中增加:server.port=8080

修改启动类,排除数据源的自动加载:

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

增加Controller类:

打包应用,并上传到server02,启动应用

java -jar nginx-0.0.1-SNAPSHOT.jar

修改Controller类

打包应用,并上传到server03,启动应用

java -jar nginx-0.0.1-SNAPSHOT.jar

访问server01和server02(或者docker)的地址:

http://172.16.185.130:8080/test?username=test1

http://172.16.185.131:8080/test?username=test1

使用Nginx的默认方式,也就是轮询:每个请求按顺序轮流地分配到不同的后端服务器。如果某些后端服务器宕机或离线,也能自动剔除。

修改配置:

重新加载Nginx:

cd /usr/local/nginx/sbin/

./nginx -s reload

访问server03的地址:http://172.16.185.136/test?username=test1

结果是:

第n次访问会返回「server02」

第n+1次访问会返回「server03」

或者相反。

说明配置已生效。

现在给轮询增加一下权重,避免平均主义:每个请求指定轮询几率,weight和访问比率成正比。这可以用于后端服务器性能不均的情况,如果某些后端服务器宕机或离线,也能自动剔除。

修改配置,增加weight关键字:

重新加载Nginx:

cd /usr/local/nginx/sbin/

./nginx -s reload

再访问server03:http://172.16.185.136/test?username=test1

连续访问多次的结果:

多数访问会返回「server02」

少数访问会返回「server03」

大概就是三七开,说明配置已生效。

轮询和权重的方式只能满足无状态的或者幂等的业务应用。但很多时候业务需要满足一个客户只能访问一个服务器的条件因此,这种情况就需要采用iphash方式来分配后端服务器。

修改配置,增加ip_hash关键字:

重新加载Nginx:

cd /usr/local/nginx/sbin/

./nginx -s reload

再次访问server03:http://172.16.185.136/test?username=test1

连续访问多次的结果:如果每次访问都只返回了「server01」或者「server02」,则说明配置已生效。

除了轮询、权重和iphash,另外还可以通过第三方插件来设置负载均衡的方式:

如果需要按后端服务器的响应时间来分配请求的话,可以使用第三方插件fair。

1、下载地址:https://github.com/gnosek/nginx-upstream-fair

(或者https://www.nginx.com/resources/wiki/modules/index.html)

2、下载后解压到/home/work/upstream-fair/

3、安装时增加参数:./configure --add-module=/home/work/upstream-fair/

4、错误「'ngx_http_upstream_srv_conf_t'没有名为'default_port'的成员」的解决办法:

cd /home/work/upstream-fair/

Linux输入:sed -i 's/default_port/no_port/g' ngx_http_upstream_fair_module.c

mac输入:sed -i '' 's/default_port/no_port/g' ngx_http_upstream_fair_module.c

修改配置,将关键字ip_hash改为fair:

重新加载Nginx:

cd /usr/local/nginx/sbin/

./nginx -s reload

访问server03:http://172.16.185.136/test?username=test1

连续访问多次的结果:

有时返回「server02」

有时返回「server03」

既不是轮询、也不是权重和ip,这说明配置已生效。

另外一种第三方插件是「一致性hash」:它可以根据参数采取不同的方式,将请求均匀映射到后端服务器:

1、根据客户端ip映射;

2、根据客户端uri映射;

3、根据客户端参数映射。

安装插件:

1、下载:https://github.com/replay/ngx_http_consistent_hash

(或者https://www.nginx.com/resources/wiki/modules/index.html)

2、下载后解压到/home/work/upstream-hash/

3、安装时增加参数:./configure --add-module=/home/work/upstream-hash/

4、修改配置,将关键字fair改为consistent_hash $request_uri

重新加载Nginx:

cd /usr/local/nginx/sbin/

./nginx -s reload

访问server03:http://172.16.185.136/test?username=test1

连续访问多次的结果:每次访问都只返回了「server01」或者「server02」

说明配置已生效。


感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~

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

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

相关文章

使用 ADManager Plus 管理Microsoft 365许可证

作为 Microsoft 365 管理员,管理用户的 Microsoft 365 许可证,为新员工分配适当的 Microsoft 365 许可证,在员工离开组织时释放 Microsoft 365 许可证,以及将释放的许可证重新分配给其他用户,构成了日常活动的重要组成…

YGG 在 Branch.gg 的免费游戏 Castaways 中购买了 Genesis NFT

YGG 在 Branch.gg 的第一款免费 web3 游戏 Castaways 中购买了 NFT 资产。Branch.gg 是一家开发开放世界沙盒大型多人在线游戏(MMO)的游戏初创公司,玩家通过合作来确保他们的生存。 在公开市场购买时,YGG 已经获得了 1,000 个 Cas…

ShareSDK 常见问题

QQ-分享报错901111,9001010等 由于QQ现在需要审核后才可以分享(之前分享不需要审核),所以此错误解决方法只需通过腾讯开放平台的审核即可,另外要检查注册好的应用的基本信息,包名、md5签名和Bundle id是不…

上半年要完成的博客50

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

C++ 优先级队列的vector实现

前段时间在研究Astar算法,里面涉及到几个重要的知识点,链表数据结构、优先队列数据结构,在以前的工作中没有接触到,学习后发现真是好东西,对C的认知更深了一步,不废话了,下面正文: …

【正点原子FPGA连载】第十一章U-Boot使用实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第十一章U-Boot使…

ESP32接入米家-小爱同学-IDF环境-巴法平台

0 引言 冬天床边没有开关,睡觉懒得关灯,想通过小爱同学控制灯的开关,但是不想换开关。 所以 想用ESP32接入米家,控制一个舵机实现开关控制。 文章目录0 引言1 MQTT协议2 ESP32 MQTT例程2.1 ESP-MQTT 库2.2.1 配置结构体 esp_mqt…

【Python基础】字符串基本操作(切片、格式化、编码)

文章目录一. 字符串1.1 字符串切片操作1.2 格式化字符串1.2.1 内容填充1.2.2 宽度精度1.3 编码解码一. 字符串 1.1 字符串切片操作 字符串是不可变类型 不具备增、删、改操作切片操作将产生新的对象,但如果是相同的字符串,对象不变。 操作格式&#xf…

③电子产品拆解分析-充电宝台灯

③电子产品拆解分析-充电宝台灯一、功能介绍二、电路分析以及器件作用1、TP4056锂电池充电电路分析2、锂电池保护电路分析3、台灯灯光控制电路一、功能介绍 ①可进行两档调光;②长按按键可显示电池电量;③可进行Macio USB安卓接口充电以及USB接口输出放…

【图文教程】云服务器上,Linux安装VSFTPD组件及遇到的问题

服务器做迁移,从AXX云迁移到Txx云上,迁移的话,需要把图片服务器也迁移过去。之前使用的是VSFTPD这次也还用这个吧。这里就记录下FTP服务器安装及遇到的问题。 1:安装VSFTP组件 使用yum命令安装。安装命令如下: yum -y install …

Ubuntu18.04 利用Systemback制作ISO系统镜像和还原

Ubuntu18.04 利用Systemback制作系统镜像和还原1、安装Systemback2、利用Systemback制作Live镜像3、 将大于4G的sblive文件转换成 ISO 文件(Systemback的界面中的转换选项不可用的情况)4、利用Systemback还原系统(利用Systemback还原系统出现…

一文详解 Linux Crontab 调度任务

最近接到这样一个任务: 定期(每天、每月)向“特定服务器”传输“软件服务”的运营数据,因此这里涉及到一个定时任务,计划使用Python语言添加Crontab依赖写一个定时任务的脚本,实现每天、每月向服务器上传运营数据。 这篇文章是我在…

界面控件DevExpress WPF中文指南 - 用主题设计器的后台视图升级主题

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。DevExpress WPF的Theme…

Chevereto v4 专业版搭建个人图床图文教程(博主自用)

Chevereto 是一个优秀的图床程序,有免费版和付费版之分,目前,Chevereto 已更新至 V4 版本,今天为大家分享一下使用 Chevereto v4 最新专业版搭建个人图床的过程。1. 准备工作PHP 版本要求 8.0 及以上,MySQL 版本支持 5…

.net5项目集成百度富文本编辑器umeditor最全教程(含源码)

目前百度的umeditor已经停止维护了,net版本的分支源码包也停留在了net farmework4左右的版本,对于想要集成这款富文本编辑器到net5平台,具有较大难度,主要体现在以下几个方面:umeditor源码需要改造,需要具有…

【每日随笔】北京 MBA 学校选择

文章目录一、第一梯队二、第二梯队三、第三梯队四、MBA 的全日制和非全日制区别一、第一梯队 第一梯队 MBA : 招人非常严格 , 本科学历背景 , 薪资 , 工作年限 , 管理年限 , 要求很高 ; 二、第二梯队 第二梯队 MBA : 对外经贸大学 MBA 推荐 对外贸易 相关行业 , 对英语要求较高…

Dubbo高级特性

dubbo-admin安装 ●dubbo-admin管理平台,是图形化的服务管理页面 ●从注册中心中获取到所有的提供者 /消费者进行配置管理 ●路由规则、动态配置、服务降级、访问控制、权重调整、负载均衡等管理功能 ●dubbo- admin是一个前后端分离的项目。前端使用vue&#xff0…

[NeurIPS 2022] 消除视觉Transformer与卷积神经网络在小数据集上的差距

本文简要介绍NeurIPS 2022录用的论文“Bridging the Gap Between Vision Transformers and Convolutional Neural Networks on Small Datasets”的主要工作。该论文旨在通过增强视觉Transformer中的归纳偏置来提升其在小数据集上从随机初始化开始训练的识别性能。本文通过多种操…

M1pro 下通过Docker 安装 Redis

Mac M1pro 下通过Docker 安装 Redis 1、Redis镜像拉取,最新版本的镜像 启动Docker,打开终端输入命令:docker pull redis:latest 耐心等待拉取完毕 2、查看本地镜像,Redis是否下载成功 命令:docker images 3、运行启…

又一重要进展发布!OpenMMLab算法仓支持昇腾AI训练加速

近日,上海人工智能实验室的浦视开源算法体系(OpenMMLab)团队基于昇腾AI发布了MMDeploy 0.10.0版本,该版本已支持OpenMMLab算法仓库在昇腾异构计算架构CANN上的推理部署。而在最新发布的MMCV 1.7.0和MMEngine 0.3.0版本中&#xff…