1、轮询(默认)
使用模块:ngx_http_upstream_round_robin
轮询策略是Nginx默认的负载均衡策略,每个客户端按时间顺序轮流分配到不用的服务器上,如果服务器不可用,自动跳过
upstream servers {
server 192.168.0.1:8080;
server 192.168.0.2:8080;
server 192.168.0.3:8080;
}
参数:
- fail_timeout :与max_fails结合使用
- max_fails :设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了
- fail_time :服务器会被认为停机的时间长度,默认为10s。
- backup :标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。
- down :标记服务器永久停机了。
2、加权轮询
使用模块:ngx_http_upstream_round_robin
权重基于轮询策略,但有别于轮询,它基于权重值进行轮询,权重越大,轮询到的几率越大 默认权重都是1,可以手动设置调整,权重越高,被分配的次数越多,weight权重和访问比例是成正比的,用于解决后端服务器性能不均衡时,调整访问比例。
upstream servers {
server 192.168.0.1:8080 weight=1;
server 192.168.0.2:8080 weight=2;
server 192.168.0.3:8080 weight=2;
}
注意:
- 权重越高分配到需要处理的请求越多。
- 此策略可以与least_conn和ip_hash结合使用。
- 此策略比较适合服务器的硬件配置差别比较大的情况。
3、ip_hash
使用模块:ngx_http_upstream_ip_hash_module
按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决共享session的问题。 使用此种策略可以解决请求上下文问题。 但需要注意,如果是压力测试或者多人同本地公网访问的情况,因为访问的源IP来自于同一IP,这会是负载都转移到同一台后端服务器上,造成过载情况
upstream servers {
ip_hash;
server 192.168.0.1:8080;
server 192.168.0.2:8080;
}
注意:
- 在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。
- ip_hash不能与backup同时使用。
- 此策略适合有状态服务,比如session。
- 当有服务器需要剔除,必须手动down掉(这样不利于更新和故障时候的响应)
4、最少连接
使用模块:ngx_http_upstream_least_conn_module
least_conn算法很简单,首选遍历后端集群,比较每个后端的conns/weight,选取该值最小的后端。 如果有多个后端的conns/weight值同为最小的,那么对它们采用加权轮询算法。 将请求转发给连接数较少的后端服务器。每个后端服务器配置可能不同,处理的请求也有可能不同,对于处理的请求有快有慢,least_conn是根据后端服务器的连接情况,动态的选择连接数量较少的一台服务器来处理当前的请求
upstream servers {
least_conn;
server 192.168.0.1:8080;
server 192.168.0.2:8080;
}