Nginx负载均衡配置介绍

Nginx负载均衡配置参数

1. Nginx概述

Nginx是一个免费的,开源的,高性能的服务器和反向代理服务器软件,同时它也可以为IMAP和POP3服务器代理,以其高性能,稳定性,丰富的功能,结构简单,低资源消耗的特性换来广大运维者所喜爱。
Nginx与传统的服务器不同,不依赖线程来处理请求。相反,它使用一个更可扩展事件驱动架构(异步)。这种结构资源消耗较小,但更重要的是,可以承受较大的请求负荷。即使你不希望处理成千上万的请求,你仍然可以受益于Nginx的高性能和小的内存占用,以及其丰富的功能。

1.1 Nginx的反向代理

反向代理指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接到客户端,此时代理服务器对外就表现为一个服务器,而此种工作模式类似于LVS-NET模型。

反向代理也可以理解为web服务器加速,它是一种通过在繁忙的web服务器和外部网络之间增加的一个高速web缓冲服务器,用来降低实际的web服务器的负载的一种技术。反向代理是针对web服务器提高加速功能,所有外部网络要访问服务器时的所有请求都要通过它,这样反向代理服务器负责接收客户端的请求,然后到源服务器上获取内容,把内容返回给用户,并把内容保存在本地,以便日后再收到同样的信息请求时,它会将本地缓存里的内容直接发给用户,已减少后端web服务器的压力,提高响应速度。因此Nginx还具有缓存功能。

1.2 反向代理的工作流程

用户通过域名发出访问请求,该域名被解析为反向代理服务器的IP地址;

反向代理服务器接收用户的请求;

反向代理服务器在本地缓存查找是否存在当前用户所请求的内容,找到则直接把内容返回给用户;

如果本地没有用户请求的内容,反向代理服务器会以自己的身份去后端服务器请求同样的信息内容,并把信息内容发给用户,如果信息内容是可以被缓存的,则会将该内容缓存在代理服务器的本地缓存中。

1.3 反向代理的好处

解决了网站服务器对外可见的问题,提高了网站服务器的安全性;

节约了有限的IP地址资源,后端服务器均可使用私有IP地址与代理服务器进行通信;

加速了网站的访问速度,减轻了真是web服务器的负荷。

2. Nginx调度算法

Nginx的upstream指令用于指定proxy_pass和fastcgi_pass所使用的后端服务器,即nginx的反向代理功能,因此可以将两者结合起来使用以达到负载均衡的目的,而Nginx也支持多种调度算法:

2.1 轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,则会跳过该服务器分配至下一个监控的服务器。并且它无需记录当前所有连接的状态,所以它是一种无状态调度。

2.2 Weight

指定在轮询的基础上加上权重,weight和访问比率成正比,即用于表明后端服务器的性能好坏,若后端服务器性能较好则可将大部分请求分配给它,已实现其力所能及。

例如:
我后端服务器172.23.136.148配置:E55202 CPU,8G内存
后端服务器172.23.136.148配置:Xeon(TM)2.80GHz 2,4G内存
我希望在有30个请求到达前端时,其中20个请求交给172.23.136.148处理,剩余10个请求交给172.23.136.149处理,就可做如下配置:

upstream web_poll { server 172.23.136.148 weight=10; server 172.23.136.149 weight=5; } 2.3 ip_hash

每个请求按访问ip的hash结果分配,当新的请求到达时,先将其客户端IP通过哈希算法进行哈希出一个值,在随后的请求客户端IP的哈希值只要相同,就会被分配至同一个后端服务器,该调度算法可以解决session的问题,但有时会导致分配不均即无法保证负载均衡。

例如:

upstream web_pool { ip_hash; server 172.23.136.148:80; server 172.23.136.149:80; } 2.4 fair(第三方)

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

upstream web_pool { server 172.23.136.148; server 172.23.136.149; fair; } 2.5 url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法

upstream web_pool { server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32; }

每个设备的状态设置为:

down 表示当前的server不参与负载,用于ip_hash中

weight 默认为1.weight越大,负载的权重就越大。

max_fails 允许请求失败的次数默认为1.设为0则表示关闭该项功能,当超过最大次数时,返回proxy_next_upstream 模块定义的错误

fail_timeout 在max_fails定义的失败次数后,暂停的时间。

backup 可以将其理解为备机,其它所有的非backup机器down或者忙的时候,才会将请求分配给backup机器。所以这台机器压力会最轻。

nginx支持同时设置多组的负载均衡,用来给不用的server来使用。

3. Nginx指令使用

1. upstream

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/3dcdf70ba2805842829be615c757f3c5.html