1. 简介:
加权轮询以轮询的方式对不同的服务器进行调度,并不记录当前服务器的状态,是一种无状态的调度方法。在Nginx中,当调度后的服务器执行失败后,会通过对权重的控制来简单控制服务器状态。
2. 主要变量:
控制权重的主要三个变量:
1) weight:表示配置的权重原始值,不参与实际调度过程,主要用于当服务器执行失败以后的权重衰减后恢复过程的最大值。
2) effect_weight:当前权重的有效值,初始化时设置为配置的权重值,当调度到的服务器执行失败后,有效权重会衰减,并在后续调度过程中逐渐恢复。
3) current_weight:当前的权重值,每轮调度时会加上有效权重,当服务器被选择时,会衰减一个值(本轮有效总权重)。
3. 轮询过程:
轮询主要在两个函数中完成,ngx_http_upstream_get_round_robin_peer是主要入口,主要处理了单机场景以及轮询结果的返回。ngx_http_upstream_get_peer这个函数实现实际的轮询过程。
1) ngx_http_upstream_get_round_robin_peer:
if (peers->single) {
peer