Linux 中间件Nginx upstream四种负载算法

作者 : 开心源码 本文共2022个字,预计阅读时间需要6分钟 发布时间: 2022-05-12 共185人阅读

nginx作为强大的web服务器,也可以作为一个反向代理商服务器,而且nginx还可以按照调度规则实现动态、静态页面的分离,可以按照轮询、ip哈希、URL哈希、权重等多种方式对后台服务器做负载均衡,同时还支持后台服务器的健康检查。

下面简单的详情下我用Nginx做负载的体会

Nginx负载均衡少量基础知识:

nginx 的 upstream目前支持 4 种方式的分配

1)、轮询(默认)

每个请求按时间顺序逐一分配到不同的后台服务器,假如后台服务器down掉,能自动剔除。

2)、weight

指定轮询几率,weight和访问比率成正比,使用于后台服务器性能不均的情况。

2)、ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后台服务器,可以处理session的问题。

3)、fair(第三方)

按后台服务器的响应时间来分配请求,响应时间短的优先分配。

4)、url_hash(第三方)

配置:

在http节点里增加:

#定义负载均衡设施的 Ip及设施状态

upstream myServer {

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;

}

在需要用负载的Server节点下增加

proxy_pass http://myServer;

upstream 每个设施的状态:

down 表示单前的server暂时不参加负载

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

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

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

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

Nginx还支持多组的负载均衡,可以配置多个upstream 来服务于不同的Server.

配置负载均衡比较简单,但是最关键的一个问题是怎样实现多台服务器之间session的共享

下面有几种方法(以下内容来源于网络,第四种方法没有实践.)

1) 不用session,换作cookie

能把session改成cookie,就能避开session的少量弊端,在从前看的一本J2EE的书上,也指明在集群系统中不能使用session,否则惹出祸端来就不好办。假如系统不复杂,就优先考虑是否将session去掉,改动起来非常麻烦的话,再使用下面的办法。

2) 应使用服务器自行实现共享

asp.net可以使用数据库或者memcached来保存session,从而在asp.net本身建立了一个session集群,使用这样的方式可以令 session保证稳固,即便某个节点有故障,session也不会丢失,适使用于较为严格但请求量不高的场合。但是它的效率是不会很高的,不适使用于对效率 要求高的场合。

以上两个办法都跟nginx没什么关系,下面来说说使用nginx该如何解决:

3) ip_hash

nginx中的ip_hash技术能够将某个ip的请求定向到同一台后台,这样一来这个ip下的某个用户端和某个后台就能建立起稳定的session,ip_hash是在upstream配置中定义的:

upstream backend {

server 127.0.0.1:8080 ;

server 127.0.0.1:9090 ;

ip_hash;

}

ip_hash是容易了解的,但是由于仅仅能使用ip这个因子来分配后台,因而ip_hash是有缺陷的,不能在少量情况下用:

1/ nginx不是最前台的服务器。ip_hash要求nginx肯定是最前台的服务器,否则nginx得不到正确ip,就不能根据ip作hash。譬如用的是squid为最前台,那么nginx取ip时只能得到squid的服务器ip地址,使用这个地址来作分流是一定错乱的。

2/ nginx的后台还有其它方式的负载均衡。如果nginx后台又有其它负载均衡,将请求又通过另外的方式分流了,那么某个用户端的请求一定不能定位到同一台session应使用服务器上。这么算起来,nginx后台只能直接指向应使用服务器,或者者再搭一个squid,而后指向应使用服务器。最好的办法是使用location作一次分流,将需要session的部分请求通过ip_hash分流,剩下的走其它后台去。

4) upstream_hash

为理解决ip_hash的少量问题,可以用upstream_hash这个第三方板块,这个板块多数情况下是使用作url_hash的,但是并不妨碍将它使用来做session共享:

如果前台是squid,他会将ip加入x_forwarded_for这个http_header里,使用upstream_hash可以使用这个头做因子,将请求定向到指定的后台

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Linux 中间件Nginx upstream四种负载算法

发表回复