-
nginx支持以下负载均衡配置机制:
1、循环,请求被循环分发
2、最少连接,请求被分配给活动连接数最少的服务器
3、ip-hash,基于请求IP地址哈希计算,同一个IP客户端的请求被映射到固定服务器 -
循环(默认负载均衡配置)
http {
#srv1-srv3是三台独立运行的业务服务器
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
#nginx实现了http协议反向代理
#所有请求被代理到myapp1服务器组
proxy_pass http://myapp1;
}
}
}
补充
1、nginx同时实现了HTTP,HTTPS,FastCGI,uwsgi,SCGI,memcached,gRPC的反向代理
2、HTTPS代理配置,调整http为https即可(proxy_pass https://myapp1)
3、FastCGI,uwsgi,SCGI,memcached,gRPC代理配置,分别使用fastcgi_pass,uwsgi_pass,scgi_pass,memcached_pass,grpc_pass指令
- 最少连接
优势:针对可能存在个别请求响应时间周期长,使用最小连接配置模式,nginx可以更合理安排各个业务服务器负载情况
upstream myapp1 {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
- ip-hash
优势:循环、最小连接,两种配置方式不能保证同一个客户端发送的请求始终会由同一台业务服务器处理,这样会导致一些粘性数据丢失,比如cookie数据等。ip-hash通过哈希算法映射可以解决这个问题,相同请求IP地址会被代理到同一台业务服务器(服务器故障除外)
upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
- 补1:加权配置
说明:默认情况下各业务服务器权重相同,配置上支持业务服务器单独指定权重参数
upstream myapp1 {
#不配置weight参数,nginx将请求均匀得分配给srv1-srv3处理
#配置weight参数,平均来看,每5个请求,其中3个请求转到srv1,1个请求转到srv2,1个请求转到srv3
server srv1.example.com weight=3;
server srv2.example.com;
server srv3.example.com;
}
- 补2:连接检查
说明:nignx实现反向代理同时检查业务服务器响应状况,当业务服务器响应错误,nginx将标记该业务服务器,并在接下来一段时间内不再转发请求给它
upstream myapp1 {
#nginx在fail_timeout时间内,和srv1通信错误达到上限max_fails,nginx将标记srv1
#接下来的fail_timout时间内,不再转发请求到srv1
#超过fail_timeout时间"冷静期"后,nginx将再次尝试连接srv1,如正常响应,nignx取消标记
#否则继续"冷静"
server srv1.example.com max_fails=1 fail_timeout=10s;
server srv2.example.com;
server srv3.example.com;
}
- 补3:更多详情
Load Balancing with NGINX and NGINX Plus
Load Balancing with NGINX and NGINX Plus part 2