nginx中upstream模块的使用。

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组中充当备份服务器来使用。

相关推荐
极简网络科技24 分钟前
Docker、Wsl 打包迁移环境
运维·docker·容器
黑客老李28 分钟前
JavaSec | SpringAOP 链学习分析
java·运维·服务器·开发语言·学习·apache·memcached
杨浦老苏29 分钟前
轻量级Docker管理工具Docker Switchboard
运维·docker·群晖
江湖有缘32 分钟前
【Docker管理工具】部署Docker可视化管理面板Dpanel
运维·docker·容器
这儿有一堆花1 小时前
安全访问家中 Linux 服务器的远程方案 —— 专为单用户场景设计
linux·服务器·安全
RussellFans2 小时前
Linux 文本三剑客(grep, awk, sed)
linux·运维·服务器
猴哥聊项目管理2 小时前
什么是DevOps智能平台的核心功能?
运维·项目管理·制造·devops·软件·项目管理软件·软件分享
Chuncheng's blog2 小时前
CentOS 7如何编译安装升级gcc至7.5版本?
linux·运维·c++·centos
听风吹等浪起2 小时前
CentOS在vmware局域网内搭建DHCP服务器【踩坑记录】
linux·服务器·centos
aitav02 小时前
⚡️ Linux Docker 基本命令参数详解
linux·运维·docker