Nginx实现负载均衡

来源:互联网 发布:centos 新建目录 编辑:程序博客网 时间:2024/04/28 23:25

 

用NGINX做负载均衡重点问题,ref:http://wiki.nginx.org/HttpUpstreamModule

 

概述:nginx的HttpUpstreamModule提供基于(Round-Robin和client ip)的简单负载均衡功能,

Round-Robin(轮询调度算法):

轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,

从1开始,直到N(内部服务器个数),然后重新开始循环。

 

1 SESSION问题解决方法

    1)不用session用cookie

    2)将session放在独立的memcache或者TT,DB等存储

    3)用某请求的IP,主机名或者URL做HASH定位到主机池里固定的backend server上

    4)第三方软件和硬件均衡

2 负载均衡算法

    1)轮询(默认):按时间顺序逐一分配到不同的backend server

    2)权重(weight):指定轮询几率,手动给性能好的机器分配比较搞的的请求率

    3)IP hash分配:不同的请求IP的请求分配到固定的backend server上

    4)第三方 : 1 fair 按后端服务器的响应时间分配,处理快的机器被优先分配

               2 URL hash 和IP hash类似,只是不同的URL的请求被分配到固定backend server上

                 ,另外IP为class-C network address,并且Nginx要做第一台前端机器才能获得真正的IP。

3 负载均衡配置 样例:

 

在http中增加

 

upstream name {         //定义负载均衡设备的Ip及设备状态

ip_hash;

//负载均衡算法

server backup.shopex.cn:9090 down;     

//表示上面server暂时不参与负载

server 127.0.0.1:8080 weight=2; 

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

server 127.0.0.1:7070 backup;   

//所有的非backup机器down或者忙的时候,就请求backup机器。

server 127.0.0.1 max_fails=3  fail_timeout=30s;

//允许请求失败的次数和失败后暂停的时间 。

server unix:/tmp/backend3 weight=3;

}

 

在需要使用负载均衡的server中

 

server_name name;

server location / 中增加

proxy_pass        http://name;

//proxy_set_header   Host             $host;

//proxy_set_header   X-Real-IP        $remote_addr;

//proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

//proxy_set_header   host $http_host;

//proxy_set_header   ECOS_VARY        $cookie_vary;

 

日志格式中可用的变量:

$upstream_addr 

$upstream_cache_status 

$upstream_status 

$upstream_response_time 

$upstream_http_$HEADER 

例子

log_format timing 

'$remote_addr - $remote_user [$time_local]  $request '

'upstream_response_time $upstream_response_time '

'msec $msec request_time $request_time';