Nginx实现负载均衡的几种方式
什么是负载均衡
将负载分发到不同的服务器上,就是我们说的负载均衡。
配置方式:
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
负载均衡的几种常用方式
1.轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream backserver {
server 192.168.0.1:8080;
server 192.168.0.2:8080;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://backserver ;
}
}
2.权重
指定每个服务的权重比例,weight和访问比率成正比,用于后端服务器性能不均的情况。将性能好的分配权重高来发挥服务器最大性能。轮询模式的默认权重都一样。
upstream backserver {
server 192.168.0.1:8080 weight=3;
server 192.168.0.2:8080 weight=7;
}
权重越高,在被访问的概率越大,如上例,分别是30%,70%。
3.iphash
每次请求都根据访问的hash结构分配,这样每次访客固定访问一个后端服务器。
upstream backserver {
ip_hash;
server 192.168.0.1:8080 weight=1;
server 192.168.0.1:8080 weight=1;
}
4.url_hash(第三方)
根据请求的url的hash值将请求分到不同的机器中,当后台服务器为缓存的时候效率高。
例如:
在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
upstream backend {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
5.最少连接(第三方)
将请求分配到连接数最少的服务上。
upstream backserver {
least_conn;
server 192.168.0.1:8080 weight=1;
server 192.168.0.2:8080 weight=2;
}
6.fair(第三方)
按照后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backserver {
fair;
server 192.168.0.1:8080 weight=1;
server 192.168.0.2:8080 weight=2;
}
设置后端负载均衡服务器的状态
- 1.down:表示当前的服务暂时不参与负载。
- 2.weight:默认为1 weight越大,负载的权重越大。
- 3.
max_fails
:允许请求失败的次数默认为1,当超过最大次数时,返回proxy_next_upstream
模块定义的错误。 - 4.
fail_timeout
:max_fails
次失败后,暂停的时间。 - 5.backup:备份机,其他所有的非backup机器down或者忙时,请求backup机。
#设定负载均衡服务器列表
upstream backserver {
#后端服务器访问规则
server 192.168.1.1:8080 weight=1; #server1
server 192.168.1.2:8080 down; #server2 不参与负载
server 192.168.1.3:8090 backup; #server3 备份机
}
server {
listen 80;
server_name 192.168.1.1;
location / {
proxy_pass http://backserver;
}
}
注意:
- backup不能和ip_hash同时配置。因为ip_hash只能访问同一台服务器,而backup是在只有所有参与
- 负载均衡的服务器出现故障时,才会请求备份机。当所有负载均衡的服务器出现故障了,ip_hash的将无法 请求了。
参考:https://www.jianshu.com/p/4c250c1cd6cd