Nginx 提供轮询(round robin)、用户 IP 哈希(client IP)和指定权重 3 种方式。后端
轮询方式服务器
默认选项,当weight不指定时,各服务器weight相同, 每一个请求按时间顺序逐一分配到不一样的后端服务器,若是后端服务器down掉,能自动剔除。负载均衡
upstream bakend {ide
server 10.11.0.1; server 10.11.0.2; server 10.11.0.3;
}code
ip hash方式server
默认状况下,Nginx 会为你提供轮询做为负载均衡策略。可是这并不必定可以让你满意。好比,某一时段内的一连串访问都是由同一个用户A发起的,那么第一次 A 的请求多是 10.11.0.1,而下一次多是 10.11.0.2, 在大多数应用场景中,这样并不高效。固然,也正因如此,Nginx 为你提供了一个按照用户的 IP 来 hash 的方式,这样每一个 client 的访问请求都会被甩给同一个后端服务器。具体的使用方式以下:ip
upstream backend {hash
ip_hash; server 10.11.0.1; server 10.11.0.2; server 10.11.0.3;
}it
这种策略中,用于进行 hash 运算的 key,是 client 的 C 类 IP 地址(C 类 IP 地址就是范围在 192.0.0.0 到 223.255.255.255 之间,前三段号码表示子网,第四段号码为本地主机的 IP 地址类别)。这样的方式保证一个 client 每次请求都将到达同一个 server。固然,若是所 hash 到的 server 当前不可用,则请求会被转移到其余server。class
权重方式
还可使用指定权重(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 是不能同时使用的,缘由很简单,他们是不一样且彼此冲突的策略。