锁定老帖子 主题:nginx upstream 调度策略
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2011-08-17
之前一直使用nginx 的upstream,今天有个哥们问我,upstream的调动算法是什么,我说我还真没注意过,使用Haproxy的时候倒是注意过,回来一查,原来也是round-robin,下面是nginx 官方文档给出的说明:
Example:
轮询调度算法(Round-Robin Scheduling) 轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。 算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。 轮询调度算法流程 假设有一组服务器N台,S = {S1, S2, …, Sn},一个指示变量i表示上一次选择的服务器ID。变量i被初始化为N-1。其算法如下:
j = i; do { j = (j + 1) mod n; i = j; return Si; } while (j != i); return NULL;
当然nginx也不止round-robin 这一种策略还有ip_hash 一种,这种好处就是一个ip总是被转发同一server
ip_hashsyntax: ip_hash default: none context: upstream This directive causes requests to be distributed between upstreams based on the IP-address of the client. It is not possible to combine ip_hash and weight methods for connection distribution. If one of the servers must be removed for some time, you must mark that server as *down*. For example:
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-08-24
随机, 一致性, 源地址, 轮询, 平均负载 就这么几个简单算法.
|
|
返回顶楼 | |
发表时间:2011-08-26
Nginx的upstream目前支持5种方式的分配
1 轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 2 weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 例如: upstream bakend { server 192.168.0.88 weight=10; server 192.168.0.89 weight=10; } 3 ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以 解决session的问题。 例如: upstream bakend { ip_hash; server 192.168.0.88:80; server 192.168.0.89:80; } 4 fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。 例如: upstream bakend { server 192.168.0.88:80; server 192.168.0.89:80; fair; } 5 url_hash(第三方) 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务 器为缓存时比较有效。 例如: upstream backend { server 192.168.0.88:3128; server 192.168.0.89:3128; hash $request_uri; hash_method crc32; } |
|
返回顶楼 | |
发表时间:2011-08-29
greatwqs 写道 Nginx的upstream目前支持5种方式的分配
1 轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 2 weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 例如: upstream bakend { server 192.168.0.88 weight=10; server 192.168.0.89 weight=10; } 3 ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以 解决session的问题。 例如: upstream bakend { ip_hash; server 192.168.0.88:80; server 192.168.0.89:80; } 4 fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。 例如: upstream bakend { server 192.168.0.88:80; server 192.168.0.89:80; fair; } 5 url_hash(第三方) 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务 器为缓存时比较有效。 例如: upstream backend { server 192.168.0.88:3128; server 192.168.0.89:3128; hash $request_uri; hash_method crc32; } 受教了,谢谢分享 :) |
|
返回顶楼 | |
发表时间:2011-08-30
这个好。。。受教。。。
|
|
返回顶楼 | |
浏览 7081 次