Nginx使用ngx_http_upstream_module实现负载均衡功能示 |
||||||||||||||||||||||||
目录
负载均衡介绍
什么是负载均衡负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。
为什么需要负载均衡当单台web服务器直接面向用户,可能要承载着大量的并发请求,单台服务器可能难以负荷,我们需要使用多台web服务器组成一个集群,利用Nginx负载均衡功能,将请求分发给不同的后端服务器,实现负载的流量分发,提升整体性能、以及系统的容灾能力。
代理是代理一台服务器基于URI调度,调度到不同功能的应用节点 负载均衡是将客户端请求通过proxy_pass代理至一组upstream资源池
实现负载均衡功能需要使用两个模块:
示例:一个官方的的负载均衡展示
?
示例:自己完成一个小例子
?
负载均衡调度算法轮询调度 按顺序逐一分配到不同的后端节点,也是默认算法。(简单来说就是1:1:1) 加权轮询
?
以上这个例子是说每4个请求会分配给10.3三个,10.4一个,以此循环。 ip_hash 根据用户请求的IP,对该IP进行hash运算,陆零物理机,根据运算的值将请求分配给后端特定的一台节点进行处理。 取值范围为ipv4地址的前三个8位或ipv6的整个地址作为哈希键,确保来自从一个客户端的IP始终传递给同一台服务器,除非次服务器不可用。(简单来说就是172.16.20.1与172.16.20.2取前三个8位都是172.16.20) ip_hash运算公式:hash(ip)%node_counts=index ip_hash带来的问题: 示例:注意ip_hash与权重不可同时使用
?
一致性hash 为了避免上述问题,所以诞生了一致性hash,使用取模的方式,但不对服务器节点数量取模,而是对2的32次方取模,hash函数值为0~2^32-1。(形成一个虚拟圆环,用户请求会发给顺时针相邻的节点)
?
url_hash 根据用户的url进行hash取模,根据运算值,将请求分配给一台特定的后端服务器。clent——nginx——url_hash——cache1——app 1.用户请求nginx负载均衡,通过url算法,请求调度至cache1
?
least_conn 哪台服务器的连接数最少,就将请求调度到这台服务器
?
负载均衡后端节点状态down 将服务器节点标记为不可用状态,一般用于停机维护。
?
backup 备用节点,正常情况不会调度到此节点;当正常工作节点全部不可用时,会启用此节点;当节点恢复时此节点会继续恢复备用状态。
?
max_conns 用来限制每个后端节点接收到的最大的TCP连接数,如果超出限制就会抛出错误。
?
一台可以连接10.两台是20,超过20就会出错。 keepalived 与后端服务器激活缓存,也就是长链接,提升网站吞吐量。
?
max_fails与fail_timeout max_fails=2:服务器通信失败两次,认为服务器不可用
?
|