- 0. 引言
- 1. 负载均衡
- 2. 如何配置
- 2.1 实现效果
- 2.2 准备工作
- 2.3 修改 Nginx 配置文件
- 2.4 Nginx 分配服务器策略
- 3. 小结
上一篇介绍了一下Nginx
的反向代理,在文章中,留下一个问题:反向代理服务器,怎么选择挂在它后面的哪一台具体服务器呢?下面就来学习一下 Nginx
的负载均衡及配置。
在学习之前,一如既往,如果没有 Linux
和 Nginx
环境 或者没有看过 Nginx
的反向代理,可以参考下面文章。
VirtualBox安装Centos7
在Centos7下安装Nginx
Nginx配置——反向代理
1. 负载均衡在学习负载均衡之前,我们要知道,为什么服务要集群部署?
大概了解一下,Tomcat
默认配置的最大并发请求是 150
个,也就是说一个 Tomcat
同时支持 150
个并发请求,当然了,也可以将其改大,改大之后,对于每个请求的响应速度会受到影响,这种方法不是解决问题的根本方法。对于一些高并发的应用来说,服务器应该要考虑集群部署(一般来说,当某个应用拥有 250
个以上并发的时候,应考虑应用服务器的集群)。
只用一台服务器,这种架构模式对于早期的系统相对单一、并发请求相对较少的情况下是比较适合的,成本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情况呢?
就像上面开始时说的,增加服务器物理配置来解决问题是一种方法,但不是根本的方法,也就是说纵向解决问题的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡,其原理图如下: 请求到达反向代理服务器后,反向代理服务器会将请求分发到后面挂载的每个真是的响应服务器。至于到底选择哪一台作为响应,这就涉及负载的策略问题。
- 浏览器地址栏输入地址 http://192.168.17.129/edu/a.html,每次刷新页面,请求被平均到
8080
和8081
端口中,也就是两个服务轮流响应。
- 需要两台
tomcat
服务器,一台指定8080
端口,一台指定8081
端口 - 在两台
tomcat
里面webapps
目录中,分别创建名称是edu
文件夹,在8080
这台edu
文件夹中创建页面a.html
,向页面显示8080
,在8081
这台edu
文件夹中也创建页面a.html
,向页面显示8081
,这样便于区分请求被哪台服务响应。
每次修改完配置文件,记得重启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 分配服务器策略-
轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器
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;
}
- 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;
}
3. 小结
上面就是Nginx
负载均衡的介绍和配置。其实,负载均衡软件有很多种,Nginx
只是其中的一个,在 Linux
下有 Nginx
、LVS
、Haproxy
等等服务可以提供负载均衡服务。