负载均衡 (Load Balancing) 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
nginx 可以按照 轮询、ip哈希、url哈希、权重等多种方式对后端服务器做负载均衡,负载均衡可以自动剔除挂掉的服务器。
nginx 可以按照 轮询、ip哈希、url哈希、权重等多种方式对后端服务器做负载均衡,负载均衡可以自动剔除挂掉的服务器。
nginx 的 upstream目前支持 4 种方式的分配
1)、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
3)、每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
4)、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5)、url_hash(第三方)
配置:
#在http节点里添加
#定义负载均衡设备的 Ip及设备状态
upstream www.abc.com{
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}
proxy_pass www.abc.com
upstream 每个设备的状态:
down 表示单前的server暂时不参与负载
weight 默认为1.weight越大,负载的权重就越大。
max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
fail_timeout:max_fails 次失败后,暂停的时间。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
负载均衡中实现多台服务器之间的session的共享:
1、不使用session,使用cookie;因为session的数据的存放在服务端,而cookie的数据存在客户端的web浏览器
2、服务器间自动实现共享,例如将session保存在数据库,但是会都数据库造成一定的压力。
3、用memcached来保存,memcached是高性能的分布式内存缓存服务器。 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。
4、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器。ip_hash仅仅是根据ip来分配后端服务器,所以必须满足以下的条件:a、naginx必须是最前端的服务器;b、nginx的后端不存在其他方式的负载均衡。不然很有可能客户端不能定位到同一台服务器,从而导致共享session失败。
5、url_hash
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。