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方案