Nginx1/4---负载均衡

1.Nginx简介

(1)支持系统

Nginx (engine x) 是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器, 在BSD-like 协议下发行,代码完全用C语言从头写成,可以在UNIX 、GUN/Linux 、BSD、 Mac OS X 、Solaris 以及Microsoft Windows等操作系统中运行。

  • 几乎可以在所有的系统中BU部署和提供服务。

(2)作者

Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的(用于解决C10k问题)。事实上Nginx的并发能力确实在同类型的网页服务器中表现比较好。

  • C10k:(C:concurrent,k:1万)1台服务器上提供10万并发的Web服务器提供能力。现在已经达到C100k甚至更高。

(3)特点

Nginx 是一个很强大的高性能Web和反向代理服务。其特点是高性能(C语言开发,编译形式部署,模块直接和Nginx 编译在一起)、高并发(网络是NIO性能特别高)、低内存占用(类似于零拷贝机制,减少内存占用和数据复制)。

  • 基于反向代理,Nginx 作为负载均衡主要有以下优点:

高并发连接、
配置文件非常简单、
成本低廉、
支持Rewrite重写规则、
内置的健康检查功能、
节省带宽、
稳定性高
内存消耗小(大量自带数据结构,采用C语言数组设计,数据结构紧凑;数据拷贝:网络连接到服务器的请求处理,中间有数据拷贝,采用零拷贝机制,提高内存内部数据流转)。

  • 其他常用Web服务器

Apache:可增加PHP模块,支持PHP动态脚本。
Tomcat:本身实现Java的servlet协议,可以运行Java代码、脚本,例如jsp。
Nginx :作为静态Web服务器(和Apache、Tomcat功能类似):服务器、解析js、html脚本,目前不支持动态语言。

  • 经常用Nginx 做反向代理,通过web stream等把前端请求,转到后端业务服务器上。网络是NIO性能特别高。

2.正向代理和反向代理

(1)正向代理(对外):

正向代理类似于一个跳板机,代理访问外部资源。
在这里插入图片描述

(2)反向代理(对内):

实际运行方式是指代理服务器来接受internet上的连接请求,然后请求转发给内部网络上的服务器,并将从服务器上得到的结构返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
在这里插入图片描述
反向代理作用
保证内网的安全(作为一个盾牌),可以使用反向代理提供WAF功能,阻止Web攻击。大型网站通常将反向代理作为公网访问地址,Web服务器是内网。
负载均衡,通过反向代理服务器来优化网站的负载。
在这里插入图片描述

3.负载均衡

(1)原理

负载均衡:N台服务器平均分担负载,不会因为某台服务器负载高宕机和某台服务器闲置的情况。那么负载均衡的前提就是要2台以上服务器才能实现。

4中方案配置:

  • 轮询
    轮询即Round Robin,根据Nginx配置文件中顺序,一次把客户端的Web请求分发到不同的后端服务器上。

  • 最少连接least_conn
    Web请求会被转发到连接数量少的服务器上。

  • IP地址哈希ip_hash
    前述的两种负载均衡方案中,同一客户端连续的web请求可能会被分发到不同的后端服务器进行处理,因此如果涉及到会话Session,那么会话会比较复杂。常见的是基于数据库的会话持久化。要客服上面的难题,可以使用基于IP地址哈希的负载均衡方案。这样,同一客户连续的web请求会被转发到同一服务器进行处理。

  • 基于权重weight
    基于权重的负载均衡即weighted Load Balancing,这种方式下,我们可以配置Nginx把请求更多地分发到高配置的后端服务器上,把相对较少的请求分发到低配置服务器。

(2)配置

  • 配置基于Round Robin轮询的负载均衡(默认策略)

需要注意以下几点:

缺省配置就是轮询策略
nginx负载均衡支持http和https协议,只需要修改proxy_pass后协议即可。
nginx支持FastCGI,uwsgi,SCGI,memcached的负载均衡,只需将proxy_pass改为fastcgi_pass,uwsgi_pass,scgi_pass,memcached_pass即可。
此策略适合服务器配置相当,无状态且短平快的服务使用。
在这里插入图片描述

  • 配置基于ip_hash的负载均衡

需要注意以下几点:
ip哈希负载均衡使用ip_hash指令定义;
nginx使用客户端的ip地址进行哈希计算,确保同一个服务器响应请求。
此策略适合有状态服务,比如session
在这里插入图片描述

  • 配置基于least_conn的负载均衡

需要注意以下几点:
最少连接负载均衡通过least_conn指令定义;
此负载均衡策略适合请求处理长短不一造成服务器过载的情况。
在这里插入图片描述

  • 配置基于权重的负载均衡

需要注意以下几点:
权重负载均衡需要使用weight指令定义;
权重越高分配到需要处理的请求越多;
此策略可以与最少连接负载和ip哈希策略结合使用;
此策略比较适合服务器的硬件配置差别比较大的情况。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/a954553391/article/details/107585589