Nginx配置——负载均衡

lz 1年前 ⋅ 1011 阅读

一、引言

上一篇介绍了一下Nginx的反向代理,在文章中,留下一个问题:反向代理服务器,怎么选择挂在它后面的哪一台具体服务器呢?带着这个问题,下面就来学习一下 Nginx 的负载均衡及配置。

二、负载均衡

在学习负载均衡之前,我们要知道,为什么服务要集群部署?

我们大概了解一下,Tomcat 默认配置的最大并发请求是 150 个,也就是说一个 Tomcat 同时支持 150 个并发请求,当然了,也可以将其改大,改大之后,对于每个请求的响应速度会受到影响,这种方法不是解决问题的根本方法。对于一些高并发的应用来说,服务器应该要考虑集群部署(一般来说,当某个应用拥有 250 个以上并发的时候,应考虑应用服务器的集群)。

只用一台服务器,这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情况呢?

就像上面开始时说的,增加服务器物理配置来解决问题是一种方法,但不是根本的方法,也就是说纵向解决问题的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡,其原理图如下:

请求到达反向代理服务器后,反向代理服务器会将请求分发到后面挂载的每个真实的响应服务器。至于到底选择哪一台作为响应,这就涉及负载的策略问题,下面一同学习。

三、如何配置

1、实现效果

(1)、浏览器地址栏输入地址 http://192.168.17.129/edu/a.html,每次刷新页面,请求被平均到8080和 8081 端口中,也就是两个服务轮流响应。

2、准备工作

(1)、需要两台 tomcat 服务器,一台指定 8080端口,一台指定 8081端口
(2)、在两台 tomcat 里面 webapps 目录中,分别创建名称是 edu 文件夹,在8080这台 edu 文件夹中创建页面 a.html,向页面显示8080,在8081这台 edu 文件夹中也创建页面 a.html,向页面显示8081,这样便于区分请求被哪台服务响应。

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 反向代理服务器会采用默认的轮询策略,将请求逐一分配到不同的后端服务器。

4、nginx 分配服务器策略

(1)、 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除,上面没配置,就是默认使用轮询策略。

(2)、 weight
==weight 代表权重,默认为 1,权重越高被分配的客户端越多, 例如:

upstream server_pool{
	server 192.168.5.21 weight=10;
	server 192.168.5.22 weight=10;
}

(3)、 ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,这种方式可以解决分布式系统中 session 的问题。 例如:

upstream server_pool{
	ip_hash;
	server 192.168.5.21:80;
	server 192.168.5.22:80;
}

(4)、 fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream server_pool{
	server 192.168.5.21:80;
	server 192.168.5.22:80;
	fair;
}

四、小结

上面就是Nginx负载均衡的介绍和配置。其实,负载均衡软件有很多种,Nginx 只是其中的一个,在 Linux 下有 Nginx、LVS、Haproxy 等等服务可以提供负载均衡服务。

 

--end--

 

版权 本着开源共享、共同学习的精神,本文转载自 https://thinkingcao.blog.csdn.net/article/details/103045629 , 如果侵权之处,请联系博主进行删除,谢谢~