nginx的负载均衡模块详解

Posted sky00747

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx的负载均衡模块详解相关的知识,希望对你有一定的参考价值。

反向代理与负载均衡的概念:

    nginx仅仅是作为nginx proxy反向代理使用,nginx其实是反向代理,只不过是有负载均衡的功能!

 

安装Nginx负载均衡

官网Nginx模块讲解

 

模块详解

upstream模块

upstream www {         #upstream是关键字,必须要写,后面的www是一个群组名字,自己起名
server 192.168.70.127:80 weight=1;   #  server固定关键字,后面可以接域名或者IP,如果不指定端口默认80.

                                                             #weight权重,数值越大被分配的请求越多,结尾有分号
server 192.168.70.126:80 weight=1 bakup;#bakcup相当于热备

server 192.168.79.128:80 weight=1 max_fails=2 fail_timeout=20s;#max_fails尝试连接后端主机失败的次数,这个值配合 proxy_next_upstream、                                                                                                                fastcgi_next_upstream和memcached_next_upstream这三个参数来使用。根据需求配置,不要太大建议1-3次

                                                                                     fail_timeout=20s 失败秒数,在达到max_fails尝试连接失败次数后,休息20秒,在次连接默认10秒,建议2-3秒

}

 

upstream模块调度算法

调度算法一份分为两类:

  第一类  静态调度算法

        分配的时候,不需要考虑后端节点服务器的情况(rr, wrr, ip_hash调度算法)

      第二类   动态调度算法

        根据自身的情况调度,根据后端节点状态是否响应很快进行调度(least_conn,fair等)

 

静态调度算法

  rr轮询(默认调度算法)

                   按照客户端请求顺序把客户端的请求逐一分配到不同后端节点服务器

    wrr权重轮序

                 在rr轮询算法的基础上加上权重,权重值越大,别转发的请求越多,可以根据服务器状态进行指定权重值大小

      ip_hash

                 每个请求按照客户端IP的hash结果分配,新的请求到达时,先将客户端IP通过哈希算法哈希出一个值,在随后的的客户端请求中,客户IP的哈希值只要相同,就会被分配至同一台服务器,该调度算法可以解决动态网页的session共享问题,但是会导致请求分配不均

      (在upstream里配置,如果是ip_hash,不能有weight和bakcup)

    

        upstream www{

                      ip_hash:

                            server xxxx

                         }

 

动态调度算法

fair

   fair算法会根据后端节点服务器的响应时间来分配请求,时间短的优先分配,必须下载nginx的相关模块upstream_fair

  upstream www{

 fair;

  server xxx;

 server xxx;

}

 

least_conn

   least_conn算法根据后端节点的连接数来决定分配情况,哪个机器连接数少就分发

 

url_hash算法(web cache)

   和ip_hash类似,一般用于web缓存,根据访问URL的hash结果来分配请求的,每个URL定向到同一个后端服务器,后端服务器为缓存服务器时效果明显。

upstream www{

server xxxx

hash $request_uri;

hash_method crc32;

}

 

一致性hash算法

    一致性hash算法一般用于代理后端业务为缓存服务(squid,memcached)的场景,通过将用户请求的URI或指定字符串进行计算,然后调度到后端服务器上,此后任何用户查找同一个RUI或者指定字符串都会被调度到这一台服务器上,此后后端的每个节点缓存的内容都是不同的。

http{

  upstream www{

     consistent_hash $request_uri;

      server xxxx id=1001  weigh=3;

 }

}

 

 

http_proxy_module模块

proxy_pass转发代理

    location /name/ {

               proxy_pass http://127.0.0.1/remote/;

}

 

相关参数

proxy_set_header     设置http请求header项传给后端服务器节点,可实现让代理后端服务器节点获取访问客户端用户真实IP地址       proxy_set_header Host  $host;

 

client_body_buffer_size  用于指定客户端请求主体缓冲区大小

 

proxy_connect_timeout   表示反向代理与后端节点服务器连接的超时时间

 

proxy_send_timeout        代理后端服务器的数据回传时间,在规定时间之内服务器必须传完所有数据,否则断开

 

proxy_read_timeout         设置nginx从代理的后端服务器获取信息时间,表示连接建立成功后,nginx等待后端服务器的响应时间

proxy_buffer_size     设置缓冲区大小,默认该缓冲区大小等于指令proxy_buffers设置大小

proxy_buffers              这是缓冲区的数量和大小,nginx从代理的后端服务器获取响应信息

proxy_busy_bufers_size  用于设置系统很忙时可以使用的proxy_buffers大小,官方推荐proxy_buffer*2

proxy_temp_file_write_size  临时缓存文件

 



以上是关于nginx的负载均衡模块详解的主要内容,如果未能解决你的问题,请参考以下文章

nginx如何做到TCP的负载均衡

Nginx代理功能与负载均衡详解

[转帖]Nginx服务器的六种负载均衡策略详解

Nginx代理功能与负载均衡详解

Nginx代理功能与负载均衡详解

Nginx代理功能与负载均衡详解