使用Nginx反向代理实现负载均衡

一、负载均衡

(一)为什么要使用负载均衡技术

随着产品的不断迭代和业务量的不断增长,基于各种网络传输协议的数据访问流量迅速增长,特别是对数据中心、大型企业和企业门户的访问,其访问流量甚至达到了10Gb/s。同时,随着技术的不断更新迭代,服务器为用户提供越来越丰富的服务数据和内容,服务器逐渐难以承受巨量的数据访问量。另外,由于大部分网站都要求服务器提供24小时不间断的服务,特别是电商平台等,任何服务的中断或者通信过程中的数据丢失都会造成直接或者间接的商业损失,这对服务器的高性能和高可靠性都提出了要求。

但是,相对与网络技术、网络带宽和应用服务的迅速发展,服务器处理速度和内存访问速度的提升显得力不从心,因此服务器性能成为了并发处理量提升的瓶颈。传统的单机服务器模式不能满足逐渐增长的业务需求。

针对以上情况的解决方案:

1、服务器进行硬件升级:采用高性能服务器替代现有的低性能服务器

改方案的弊端:

  • 高成本:
    高性能服务器成本高昂,需要高额成本投入;而原有低性能服务器被闲置,造成资源浪费。
  • 可扩展性差:
    每一次业务量的提升都需要升级硬件,导致开发成本越来越高,性能再卓越的设备最终也无法满足当前业务量的增长速度。
  • 无法解决单机服务器的可靠性问题:
    一旦服务器发生故障,依然会导致所有的服务无法再提供

2、组件服务器集群,利用负载均衡技术在服务器集群间进行业务访问请求的均衡分配

该方案的优势:

  • 低成本
  • 可扩展性
    当业务量增长时,只需要增加服务器即可满足需求,不影响原有业务,不降低服务质量。
  • 高可靠性
    单台服务器故障时,由负载均衡设备将对该服务器的访问请求转向其他服务器,保证服务提供不中断

(二)什么是负载均衡

1、负载均衡原理

系统的扩展可分为纵向(垂直)扩展和横向(水平)扩展。纵向扩展,是从单机的角度,通过增加硬件处理能力,如CPU处理能力,内存容量、磁盘读写速度等,实现服务器处理性能的提升,此方法不能满足大型分布式系统的大流量、高并发、海量数据的需求,因此需要采用横向扩展的方式,通过添加机器来满足大型网络系统服务的请求响应能力。一台机器无法满足并发需求,就增加机器数量,共同承担服务器压力。这就是典型的集群和负载均衡架构。如下图:
使用Nginx反向代理实现负载均衡_第1张图片

2、负载均衡的作用

  • 解决并发压力,提高应用处理能力
  • 提供故障转移,实现高可用
  • 通过增加或减少服务器数量,提供服务的伸缩性
  • 安全防护(负载均衡设备上做一些过滤,黑白名单等处理)

3、负载均衡分类

根据实现技术不同,可分为DNS负载均衡、HTTP负载均衡、IP负载均衡、反向代理负载均衡、链路层负载均衡。

4、负载均衡算法

轮询、随机、最少链接、Hash(原地址散列)、加权

二、反向代理

(一)正向代理

正向代理是指客户端向请求服务时,并不知道服务具体怎么找到服务,而是委托代理去请求服务,对于服务来说,他的用户就是代理。实际上服务器不知道用户发出了请求,以为是代理发出的请求。
使用Nginx反向代理实现负载均衡_第2张图片

(二)反向代理

反向代理是指用户向代理发送请求,代理响应请求。而实际上代理是将请求转发给了服务器,用户不知道是服务器响应的请求,只知道是代理响应了请求。
使用Nginx反向代理实现负载均衡_第3张图片

三、如何使用Nginx反向代理实现负载均衡

(一)nginx配置

进入nginx根目录下的conf文件夹,打开nginx.conf文件
在http{}模块下的server{}模块中配置代理的服务器,在server{}外配置被代理的服务器,如下图例子:
使用Nginx反向代理实现负载均衡_第4张图片
保存文件,开启被代理服务器上的项目,确认能够正常运行,通过start nginx命令开启nginx服务,然后访问配置文件中nginx监听的主机与端口号即将请求会转发到代理的服务器上,如上图例子中,应访问http://127.0.0.1:81/…
我在这里使用的nginx负载均衡算法是加权轮询算法,若有其他需要,见这篇博客:分布式系统常见负载均衡算法及其nginx实现

(二)nginx的开启与关闭

通过cmd进入nginx的根目录
开启:start nginx
关闭:nginx -s stop
重启:nginx -s reload

你可能感兴趣的:(#,分布式,分布式,负载均衡,反向代理,nginx)