前言:
在我们了解了nginx的反向代理服务器的时候,涉及到一个问题,如何选择挂在它后面的哪一台具体服务器呢?这就涉及到Nginx的负载均衡及其配置了。
一、什么是负载均衡呢?
在了解负载均衡之前,需要先了解一下,为什么服务要集群部署?
大概了解一下,Tomcat
默认配置的最大并发请求是150
个,也就是说一个Tomcat
同时支持150
个并发请求,当然了,也可以将其改大,改大之后,对于每个请求的响应速度会受到影响,这种方法不是解决问题的根本方法。对于一些高并发的应用来说,服务器应该考虑集群部署(一般来说,当某个应用拥有250
个以上并发的时候,应考虑应用服务器的集群)。
只用一台服务器,这种架构模式对于早期的系统相对单一、并发请求相对较少的情况下是比较合适的,成本也低。但是,随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情况呢?
就像上面开始时说的,增加服务器物理配置来解决问题是一种方法,但不是根本的方法,也就是说纵向解决问题的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是所说的负载均衡,其原理图如下:
请求到达反向代理服务器后,反向代理服务器会将请求分发到后面挂载的每个真实的响应服务器。至于,到底选择哪一台作为响应,这就涉及负载的策略问题
。
负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。
二、如何配置
2.1 实现效果
游览器地址栏,输入地址http://192.168.17.129/edu/a.html,每次刷新页面,请求被平均到8080
和8081
端口中,也就是两个服务轮流响应。
2.2 准备工作
- 需要两台
tomcat
服务器,一台指定8080
端口,一台指定8081
端口; - 在两台
tomcat
里面webapps
目录中,分别创建名称是edu
文件夹,在8080
这台edu
文件夹中创建页面a.html
,向页面显示8080
,在8081
这台edu
文件夹中也创建页面a.html
,向页面显示8081
,这样便于区分请求被哪台服务响应。
2.3 修改Nginx配置文件
每次修改完配置文件,记得重启Nginx服务。
在nginx
的配置文件nginx.conf
中进行负载均衡的配置。
http {
upstream myserver{
server 192.168.17.129:8080;
server 192.168.17.129:8081;
}
server {
listen 80;
server_name 192.168.17.129;
location / {
proxy_pass http://myserver;
}
}
}
如果使用上面的配置,Nginx反向代理服务器会采用默认的轮询策略,将请求逐一分配到不同的后端服务器
。
2.4 Nginx分配服务器策略(nginx支持的几种负载策略)
- 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down
掉,能自动剔除,上面没配置,就是默认使用轮询策略。
weight
:代表权重,默认为1,权重越大被分配的客户端越多;
down
:表示当前的server
暂时不参与负载;
backup
:其他所有的非backup
机器down
或者忙的时候,请求backup
机器。
upstream server_pool{
server 192.168.5.21 weight=10;
server 192.168.5.22 weight=10;
}
- weight(权重):默认为1,权重越高,分配的请求越多;
- ip_hash
每个请求按访问ip
的hash
结果分配,这样每个访客固定访问一个后端服务器
,这种方式可以解决分布式系统中session
的问题。
upstream server_pool{
ip_hash;
server 192.168.5.21:80;
server 192.168.5.22:80;
}
- fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream server_pool{
server 192.168.5.21:80;
server 192.168.5.22:80;
fair;
}
三、总结
上面就是Nginx
负载均衡的介绍和配置。其实,负载均衡软件很多,Nginx
只是其中一个,在Linux
下有Nginx
、LVS
、Haproxy
等等服务可以提供负载均衡的服务。
参考博客:
Nginx配置——负载均衡 https://blog.csdn.net/zxd1435513775/article/details/102508542
Nginx入门教程 https://zhuanlan.zhihu.com/p/162773974