设为首页 收藏本站
查看: 424|回复: 0

[经验分享] nginx upstream 调度策略

[复制链接]

尚未签到

发表于 2016-12-25 08:09:05 | 显示全部楼层 |阅读模式
  之前一直使用nginx 的upstream,今天有个哥们问我,upstream的调动算法是什么,我说我还真没注意过,使用Haproxy的时候倒是注意过,回来一查,原来也是round-robin,下面是nginx 官方文档给出的说明:



This module provides simple load-balancing (round-robin and client IP) across backend servers.

Example:

upstream backend {
server   backend1.example.com;
server   backend2.example.com;
server   backend3.example.com  down;
server   backend4.example.com;
}
  轮询调度算法(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;
  WiKi


  In computing, "round-robin" describes a method of choosing a resource
for a task from a list of available ones, usually for the purposes of load balancing
.
Such may be distribution of incoming requests to a number of
processors, worker threads or servers. As the basic algorithm, the
scheduler selects a resource pointed to by a counter from a list, after
which the counter is incremented and if the end is reached, returned to
the beginning of the list. Round-robin selection has a positive
characteristic of preventing starvation
,
as every resource will be eventually chosen by the scheduler, but may
be unsuitable for some applications where affinity

is desirable, for
example when assigning a process to a CPU
or in link aggregation
.
  当然nginx 不止提供这一种算法,还提供一种ip_hash的方法,这种方法把一个ip总是转发到同一个server上

ip_hash


  This directive causes requests to be distributed between upstreams based on the IP-address of the client.

The key for the hash is the class-C network address of the client.  This
method guarantees that the client request will always be transferred to
the same server. But if this server is considered inoperative, then the
request of this client will be transferred to another server.  This
gives a high probability clients will always connect to the same server.

  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*.


upstream backend {
ip_hash;
server   backend1.example.com;
server   backend2.example.com;
server   backend3.example.com  down;
server   backend4.example.com;
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-318953-1-1.html 上篇帖子: nginx.conf 常用设置 下篇帖子: nginx keepalive连接回收机制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表