nginx负载均衡

一 nginx负载均衡:支持三种   

   (1)默认轮询round-robin  以轮询方式将请求分配到不同服务器上。


   (2)ip_hash(源地址hash)基于客户端的IP地址。散列函数被用于确定下一个请求分配到哪台服务器上。实现同一源地址重定向到该地址,注意:会破坏负载效果


   (3)least_conn(最少连接数) 将下一个请求分配到连接数最少的那台服务器上。  

    upstream www.cqelpay.com(名称) { 

        round-robin   #默认轮询

#ip_hash;     #实现同一源地址重定向到该地址,注意:会破坏负载均衡效果

#least_conn;  #最少连接数

        server 192.168.11.38:8081  weight=1(权重)  max_fails=2(最大检查次数)  fail_timeout=30s(检查持续时间); 

        server 192.168.11.34:8080  weight=2  max_fails=2    fail_timeout=30s; 

        server 127.0.0.1:8080 backup;  #当前面两个负载主机都宕机后,会启动这个错误页面.

    }

     

   server {                #每一个server对应一个虚拟主机

        listen       8080;    #监听端口

        server_name  localhost;   #域名

root /web/errorpages;

index   index.html;

      }

   [root@nginx-master /]# mkdir -pv /web/errorpages 

   [root@nginx-master /]#vim /web/errorpages/index.html  

   

   (4)nginx负载均衡最简单的配置如下:

  http { 


    upstream myapp1 { 


        server srv1.example.com;   可以是域名,ip地址,端口号和unix套接字


        server srv2.example.com; 


        server srv3.example.com; 


    } 

    server { 


        listen 80; 

        location / { 

            proxy_pass http://myapp1; 

        } 


    } 


}     

在上面的例子中,srv1,srv2,srv3。运行着相同的应用程序。如果没有特别指定负载均衡方法默认是以轮询方式。所有的请求被代理到服务组

myapp1,然后nginx负载均衡的分发请求。


nginx反向代理实现包括下面这些负载均衡HTTP、HTTPS、、FastCGI、uwsgi,SCGI和memcached。


要配置HTTPS的负载均衡,只需使用“https”开头的协议。


当要设置FastCGI,uwsgi,SCGI,或者memcached的负载平衡,分别使用fastcgi_pass,uwsgi_pass,scgi_pass和memcached_pass指令。


   (5)最少连接负载均衡

   在一些要求需要更长的时间才能完成的应用情况下,最少连接可以更公平地控制应用程序实例的负载。使用最少连接负载均衡,

   nginx不会向负载繁忙的服务器上分发请求,而是将请求分发到负载低的服务器上。

配置如下:

    upstream myapp1 { 


        least_conn; 


        server srv1.example.com; 


        server srv2.example.com; 


        server srv3.example.com; 


    }

  

   (6)会话持久性

    以轮询或最少连接的负载均衡算法,每个后续的客户端的请求,可以潜在地分配

    给不同的服务器上,并不能保证相同的客户端请求将总是指向同一服务器上。

    

这对于有会话信息的应用场景下,会有问题的。一般的做法是需要将session信息共享,如使用

   memcache来存放session。

    

如果将客户端的会话“粘性”或总是试图选择一个特定的服务器,也是可以的。负载均衡的ip-hash机制就可以实现。

配置如下:

upstream myapp1 { 


    ip_hash; 

    server srv1.example.com; 

    server srv2.example.com;

    server srv3.example.com; 

   (7)加权负载均衡   

     可以使用权重来进一步控制影响nginx负载均衡算法。

   在上面的例子中,都没有配置权重,这意味着所有指定的服务器都被视为同样的。

   当指定的服务器的权重参数,权重占比为负载均衡决定的一部分。权重大负载就大。

   配置如下:

   upstream myapp1 { 


        server srv1.example.com weight=3; 


        server srv2.example.com; 


        server srv3.example.com; 


    }

这种情况下,每5个新的请求将被分布如下:3 请求将被引导到SRV1,一个请求将去SRV2,另一个请求去srv3。

   

    (8)后端健康检测

     nginx反向代理包含内置的或第三方扩展来实现服务器健康检测的。如果后端某台服务器响应失败,

     nginx会标记该台服务器失效,在特定时间内,请求不分发到该台上。

     max_fails指令设置在fail_timeout期间内连续的失败尝试。默认情况下,max_fails为1。如果被设置为0,该服务器的健康检测将禁用。

     fail_timeout参数还定义了多长时间服务器将被标记为失败。在fail_timeout后,服务器还是failed,

     nginx将检测该服务器是否存活,如果探测成功,将标记为活的。

     

     (9)官方文档  

      upstream模块内容:http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server

      应用负载均衡:http://nginx.com/products/application-load-balancing/  

   

    (10)统计有多少人访问80: netstat -ant | awk '/:80\>/{S[NF]++}end{for(A in S) {print A,S[A]}}'


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章