Nginx配置——负载均衡

0. 引言

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

在学习之前,一如既往,如果没有 LinuxNginx环境 或者没有看过 Nginx的反向代理,可以参考下面文章。

VirtualBox安装Centos7

在Centos7下安装Nginx

Nginx配置——反向代理

1. 负载均衡

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

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

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

就像上面开始时说的,增加服务器物理配置来解决问题是一种方法,但不是根本的方法,也就是说纵向解决问题的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡,其原理图如下:
在这里插入图片描述
请求到达反向代理服务器后,反向代理服务器会将请求分发到后面挂载的每个真是的响应服务器。至于到底选择哪一台作为响应,这就涉及负载的策略问题。

2. 如何配置

2.1 实现效果

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

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 分配服务器策略

  • 轮询(默认)
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 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
    每个请求按访问 iphash结果分配,这样每个访客固定访问一个后端服务器,这种方式可以解决分布式系统中 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下有 NginxLVSHaproxy等等服务可以提供负载均衡服务。


版权声明:本文为zxd1435513775原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。