nginx中upstream模块的使用。

ops/2025/3/10 20:45:35/

upstream模块中的轮询算法

作用:将多台web服务器定义成一个upstream组,实现web服务的负载均衡。

后台的多个网站服务器,可以是多个不同的机器,也可以是多个不同的主机。

第一点:nginx在接受到客户端的访问请求后,按照什么样的规则去转交访问请求,是交给web1还是交给web2还是交给web3

如上图所示,轮询算法的含义就是将客户端的访问请求,依次交给web1和web2和web3

这样的轮询算法导致每个web服务器大致处理的访问请求数都是相同的。

从负载均衡的角度来讲,轮询算法的效果是最好的,每个请求交给不同的服务器处理,每个服务器处理的请求数大致相同。

轮询算法的缺点就是:

当公司在构建业务的时候,如果一台服务器是2万块钱买的,一台服务器也是2万块钱买的,一台服务器是10万块钱买的,每台服务器的性能不同,但是每台服务器处理的客户端的访问请求数大致相同,这就导致了一种资源的浪费。

解决轮询算法的方式是给不同性能的服务器设定不同的权重

为了避免因为服务器的性能不同,导致使用轮询算法导致资源浪费,upstream模块支持我们为后端服务器设定upstream组的时候,支持我们为后端的服务器设定不同的权重。而所谓的权重就是阿拉伯数据,在没有设定权重值的时候,每台机器的权重值都是一,

复习http协议中的cookie和session

对一个网站服务器而言,时时刻刻的在接收客户端请求,

作用是一样的,都是用来识别客户端登录身份。

其中cookie的验证方式是:如果客户端首次成功登录网站,网站服务器就会识别用户名密码正确,这时网站服务器就会生成一段随机数,连带着响应数据一起发送给客户端,然后客户端每次向网站服务器发送访问请求的时候,就会带上那串随机数,网站服务器接收到随机数的时候,就会判断这是一个已经登录成功的用户。

其中session【会话】的验证方式是让客户端A成功登录网站的时候,网站服务器就会在自己的记录里面记录上客户端A已经成功登录,让下一次客户端A再次向网站服务器发送请求的时候,网站服务器会在自己的记录里面去搜索一下,判断这个客户端A是否已经登录网站。

现在有一个问题???【如果网站服务器采用的是会话session的方式去记录客户端身份,并且调度算法采用的是轮询,会产生非常严重的问题。】【会话保持问题】

如上图所示,如果采用的是session的方式来保存客户端是否登录的信息,并且这个信息还是记录到了网站服务器上,如果客户端这次是通过nginx反向代理服务器,将访问请求交给web1,此时需要用户进行登录网站的操作,如果客户端这次是通过nginx反向代理服务器,将访问请求交给web3,此时还需要用户进行登录网站的操作。【这对于用户来说是一种非常不好的体验。】

如上图所示,这是在使用session记录客户端信息,并且使用轮询调度算法出现的会话保持问题,可以通过新购置一台服务器,在这个服务器上新搭建一个NOSQL数据库,来储存会话信息。以此来解决会话保持问题。

upstream模块中的ip_hash算法

nginx服务器接收到了客户端的访问请求,就会对这个请求中的原IP地址进行哈希运算,当nginx服务器再次接收到了客户端的访问请求时候,还会对这个请求中的原IP地址进行哈希运算,当两次对IP地址运算的哈希值一样时,就代表这是同一个客户端发送来的,这是就会把第一个请求和第二个请求转发到同一个服务器身上。

从技术的角度来讲,一段时间之内,同一个客户端的访问请求转发到同一个服务器的身上。

【ip_hash算法,好处就是在省成本的前提下去解决会话保持问题,坏处就是在一定程度上破坏了负载均衡效果。】

案例:基于upstream模块实现web服务的负载均衡

后端至少要有两个网站服务器

如上图所示,11和12上用阿帕奇软件作为后端服务器

如上图所示,这是阿帕奇的主配置文件/etc/httpd/conf/httpd.conf中去修改阿帕奇的日志文件中记录的客户端IP地址,

如上图所示,这是在nginx反向代理服务器的虚拟主机的配置文件中进行配置,去配置upstream组,以及设定这个组中每个机器的权重数值。

如上图所示,如果后端服务器全都挂了,那么就会显示502的错误。

如上图所示,可以在虚拟主机的配置文件中的upstream模块中设定一个备份服务器,当前面所有的服务器全部挂了之后,ngnx会使用backup服务器给客户端响应。

备份服务器可以在nginx上搭建一个虚拟主机,将这个虚拟主机写入到upstream组中充当备份服务器来使用。


http://www.ppmy.cn/ops/164751.html

相关文章

快手,蓝禾,得物,优博讯,三七互娱,顺丰,oppo,游卡,汤臣倍健,康冠科技,作业帮25届春招内推

快手,蓝禾,得物,优博讯,三七互娱,顺丰,oppo,游卡,汤臣倍健,康冠科技,作业帮25届春招内推 ①快手 【在招岗位】运营、市场、产品、战略分析、职能、工程、设计…

Elasticsearch如何删除字段

文章目录 1、问题描述2、案例讲解3、问题剖析4、解决方案4.1 注意:4.2 步骤:4.3 示例:4.3.1 创建一个新的索引4.3.2 reindex 重建索引4.3.3 恢复索引 5、彩蛋 & 坑5.1 坑5.2 使用 Pipline 6、总结 1、问题描述 在 Elasticsearch 中&…

uniApp实战二:仿今日相机水印功能

文章目录 1.最终效果预览2.页面实现 1.最终效果预览 2.页面实现 页面布局 <view click"handleTakePhotoNew">拍照</view><view v-if"!snapSrc"><canvas canvas-id"canvas" :style"{width:cvWidthpx,height:cvHeight…

利用可变参数模板,可打印任意参数和参数值。(C++很好的调式函数)

很酷的应用&#xff1a; &#xff08;1&#xff09; 如何获取可变参数名 代码例子&#xff1a; #define _test(...) (test_t(#__VA_ARGS__, __VA_ARGS__))template<typename... Args> void test_t(const char* names, Args... args) {std::cout << names <<…

C++20 中使用括号进行聚合初始化:新特性与实践指南

文章目录 1. 聚合初始化简介2. C20 中的括号聚合初始化2.1 指定初始化器&#xff08;Designated Initializers&#xff09;2.2 嵌套聚合初始化 3. 使用括号初始化数组4. 注意事项5. 实际应用场景6. 总结 在 C20 中&#xff0c;聚合初始化&#xff08;Aggregate Initialization&…

AI视频生成工具清单(附网址与免费说明)

以下是一份详细的AI视频制作网站总结清单&#xff0c;包含免费/付费信息及核心功能说明&#xff1a; AI视频生成工具清单&#xff08;附网址与免费说明&#xff09; 1. Synthesia 网址&#xff1a;https://www.synthesia.io是否免费&#xff1a;免费试用&#xff08;生成视频…

在Dify中访问Gemini等模型代理设置指南

问题背景 Google Gemini模型可纯免费使用&#xff0c;且性能也相当不错&#xff0c;一般个人使用或研究足够。但在在国内访问&#xff0c;需设置代理。在Docker部署Dify时&#xff0c;虽然按官方文档介绍设置代理环境变量&#xff0c;但实测发现并不生效。我们通过研究试验解决…

【Git】linux搭建Gitea配置mysql数据库

WindowsServer搭建内网Gitea【中文更方便使用】 1. 安装Gitea # 下载 wget https://dl.gitea.io/gitea/1.23.5/gitea-1.23.5-linux-amd642. 创建用户 # 创建 gitea 用户&#xff1a;这个命令的作用是创建一个名为 git 的系统用户&#xff0c;该用户使用 /bin/bash 作为默认 …