Nginx负载均衡在OpenStack中的应用

一、负载均衡的介绍

1.1.负载均衡概述

负载均衡是高可用网络基础架构的一个关键组成部分,在负载均衡的作用下,应用服务器可以部署多台,负载均衡会将用户的请求分发到不同的应用服务器上,从而提高服务的性能以及可靠性。

1.2.负载均衡架构

1.2.1.没有负载均衡机制的Web架构:

1.2.2.容易出现的问题:

(1)在服务器发生宕机的情况下,用户的请求会得不到响应,这就是著名的单点故障问题;

(2)当服务器工作正常,但多用户同时访问该服务器时,服务器的处理能力会不够,会出现响应速度慢甚至无法连接的情况,这也是用户无法接受的。 负载均衡通过引入一个负载均衡器和至少两个Web服务器,可以有效地解决上面两个问题。

1.2.2.负载均衡的架构:

1.2.3.负载均衡架构解读:

如上图架构,App 01即使宕机了,负载均衡会将用户的请求转发到正常工作的App 02 上,这解决了上面的单点故障问题;其次,根据业务需要,负载均衡后端的App可以很方便地扩展,这样就能解决上面的多请求压力问题。

1.2.4.负载均衡选择后端服务器的原理:

(1)通过运行健康检查服务筛选出正常工作的服务器。

(2)根据预先设置的负载均衡算法从健康服务器池中优选出后端服务器。

1.2.5.常用的负载均衡算法

(1)轮询:为第一个请求选择健康池中的第一个后端服务器,然后按顺序往后依次选择,直到最后一个,然后循环。

(2)最小连接:优先选择连接数最少,也就是压力最小的后端服务器,在会话较长的情况下可以考虑采取这种方式。

(3)散列:根据请求源的IP的散列(hash)来选择要转发的服务器。这种方式可以一定程度上保证特定用户能连接到相同的服务器。 如果应用要求用户能连接到和之前相同的服务器,选择这种算法比较合适。

二、Nginx负载均衡

2.1.Nignx介绍

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAPPOP3)代理服务器,其特点是占有内存少,并发能力强,Nginx处理并发能力确实在同类型的网页服务器中表现较好,中国大陆使用Nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

2.2.Nginx有三大功能(反向代理、内容缓冲、负载均衡)

2.2.1.反向代理

Nginx的代理过程是将请求发送给Nginx,然后将请求转发给后端服务器,后端服务器处理完毕之后将结果再发给Nginx,Nginx再把结果发送给客户端。后端服务器可在远程也可在本地,也可以是Nginx服务器内部定义的其他虚拟主机。这些接收Nginx转发的服务器被称为上游(upstream)。Nginx可以处理大量并发连接,请求到来后,Nginx可将其转发给任意数量的后台服务器进行处理,这等于将负载均衡分散到整个集群。

2.2.2.内容缓冲

Nginx也提供了缓冲的机制,用于提高性能。没有缓冲的情况下,数据直接从后端服务器发送给客户端。缓冲的作用是在Nginx上临时存储来自后端服务器的处理结果,从而可以提早关闭Nginx到后端的连接,减少IO的损耗。一般内容存放在内存当中,但当内容过多,造成的内存不够时,会把内容存放在临时文件目录下。

2.2.3.负载均衡

负载均衡也是Nginx常用的一个功能,负载均衡其意思就是分摊到多个操作单元上进行执行,从而共同完成工作任务。简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。而Nginx目前默认支持轮询、权重、IP Hash三种负载均衡策略,同时也支持第三方负载均衡策略如fair(根据服务器响应时间分配请求)、url_hash等。

2.3.不同策略下的配置

1、轮询策略,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。配置示例如下所示:

2、权重策略,通过配置服务器权重指定轮询几率,weight和访问比率成正比,该策略一般用于后端服务器性能不均的情况,配置示例如下所示(这种配置下,客户端发出10次访问请求一般只会有1次会访问到8081,而有9次会访问到8080.):

3、IP Hash策略,上面的2种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了Session 保存数据),这时候就有一个很大的问题了,比如把登录信息保存到了Session中,那么跳转到另外一台服务器的时候就需耍重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用IP Hash了,IP Hash的每个请求按访问P的Hash结果分配,这样每个访客固定访问一个后端服务器,可以解决Session的问题。配置方式如下:

三、OpensStack上部署 Nginx 应用实现负载均衡

步骤一:搭建网络拓扑,两台虚拟机用于WEB服务器,一台虚拟机用于Nginx服务器。

步骤二:分别在两台WEB服务器的目录 /var/www/html 下创建web html 文件。

步骤三:重启两台服务器的web服务:service apache2 restart

步骤四:编辑nginx配置文件 /etc/nginx/nginx.conf,使其负载分担到两台web 服务器。

 步骤五:为nginx服务器创建浮动IP,保障外网可以访问。

步骤六:为nginx所在的安全组添加允许外网访问的规则。

步骤七:使用curl进行验证使用轮循的负载分担结果。

步骤八:更改配置文件,使其采用基于权重的负载分担,并重加载服务 nginx -s reload。

步骤九:使用curl进行验证基于权重的负载分担结果正确性。

步骤十:更改nginx配置文件,使用基于IP HASH的负载,配置完重新加载nginx服务 nginx -s reload。

步骤十一:使用curl进行验证基于IP HASH的负载分担结果正确性。

猜你喜欢

转载自blog.csdn.net/m0_73901077/article/details/134802143