nginx实现负载均衡

nginx作为开源免费软件与F5、A10等硬件负载均衡比可以省部分资金,虽然F5、A10价格昂贵但仍有很大市场,主要原因是F5、A10配置简单,有图形界面,会话保持等功能。

负载均衡主要目的是将流量分发给不同的服务器,以减少服务器的压力,效率可以有很明显的提高,这里就不多加赘述了。

一、轮循(非会话保持,相同用户的请求,会分发到不同的服务器上)

准备两台要负载的应用服务器。

upstream myServer {
        server 172.31.215.92:8881 weight=2;
        server 172.31.215.92:8882;
    }
    server {
        listen       8082;
        location / {
                proxy_pass http://myServer;
        }

    }

上图为简单的负载均衡。通过访问该地址得8082端口分发到myServer预先设置的两个地址上。

weight 为负载的配置。配置包括如下,连个参数之间空格隔开

1、down

    表示当前的server不参与负载;

2、weight

    表示当前的server的负载比重。默认为1,该值设置越大比重越大。

3、max_fails

    允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误

4、fail_timeout

    max_fails 次失败后,暂停的时间。

5、backup

    其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻

二、会话保持

upstream myServer {
        ip_hash;
        server 172.31.215.92:8881;
        server 172.31.215.92:8882;
    }
    server {
        listen       8082;
        location / {
                proxy_pass http://myServer;
        }

    }

加入参数ip_hash。

ip_hash算法的原理很简单,根据请求所属的客户端IP计算得到一个数值,然后把请求发往该数值对应的后端。

所以同一个客户端的请求,都会发往同一台后端,除非该后端不可用了。ip_hash能够达到保持会话的效果。

虽然可以实现会话保持,但是缺点很明显,该方案是用过IP实现会话保持的,如果同一局域网用户访问该网站则会负载不均衡了。实际使用中,如果使用nginx做负载均衡,不推荐使用该方案做会话保持。

推荐使用轮循方式,关于session的问题推荐使用共享session将session保存到redis或memcached。

下篇文章将介绍:php集群中共享session方案



你可能感兴趣的:(nginx实现负载均衡)