nginx负载均衡策略

Nginx 提供轮询(round robin)、用户 IP 哈希(client IP)和指定权重 3 种方式。

轮询方式

默认选项,当weight不指定时,各服务器weight相同, 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

upstream bakend {

server 10.11.0.1;

server 10.11.0.2;

server 10.11.0.3;

}

ip hash方式

默认情况下,Nginx 会为你提供轮询作为负载均衡策略。但是这并不一定能够让你满意。比如,某一时段内的一连串访问都是由同一个用户A发起的,那么第一次 A 的请求可能是 10.11.0.1,而下一次可能是 10.11.0.2, 在大多数应用场景中,这样并不高效。当然,也正因如此,Nginx 为你提供了一个按照用户的 IP 来 hash 的方式,这样每个 client 的访问请求都会被甩给同一个后端服务器。具体的使用方式如下:

upstream backend {

ip_hash;

server 10.11.0.1;

server 10.11.0.2;

server 10.11.0.3;

}

这种策略中,用于进行 hash 运算的 key,是 client 的 C 类 IP 地址(C 类 IP 地址就是范围在 192.0.0.0 到 223.255.255.255 之间,前三段号码表示子网,第四段号码为本地主机的 IP 地址类别)。这样的方式保证一个 client 每次请求都将到达同一个 server。当然,如果所 hash 到的 server 当前不可用,则请求会被转移到其他server。

权重方式

还可以使用指定权重(weight)的方式,如下:

upstream backend {

server 10.11.0.1;

server 10.11.0.2 weight=4;

}

默认情况下 weight 为 1,对于上面的例子,第一个 server 的权重取默认值 1,第二个是 4,所以相当于第一个 server 接收 20% 的请求,第二接收 80% 的。要注意的是 weight 与 ip_hash 是不能同时使用的,原因很简单,他们是不同且彼此冲突的策略。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章