介绍
负载平衡是优化资源利用率、最大化吞吐量、减少延迟和确保容错配置的常用技术。
nginx可以作为一个非常有效的HTTP负载平衡器,将流量分配到多个应用服务器,提高Web应用程序的性能、可扩展性和可靠性。
负载均衡策略
nginx支持的负载均衡机制有以下几种
- round-robin
将请求以循环方式分发给应用服务器 - least-connected
下一条请求分配给活跃连接最少的服务器 - ip-hash
使用一个hash函数决定由哪个服务器处理下一条请求(基于客户端的IP地址)
默认的负载均衡配置
http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
#默认使用 round-robin 机制
nginx的反向代理实现包括http、https、fastcgi、uwsgi、scgi、memcached和grpc的负载平衡。
如果配置https的负载均衡,使用https协议即可。
当配置FastCGI
, uwsgi
, SCGI
, memcached
, gRPC
的负载均衡,分别使用 fastcgi_pass
, uwsgi_pass
, scgi_pass
, memcached_pass
, grpc_pass
命令。
最少连接的负载均衡
在某些请求需要更长时间才能完成的情况下,新的请求分发到不那么繁忙的服务器,这种机制可以实现更公平负载均衡。
要启用这种机制,加入least_conn
指令即可
upstream myapp1 {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
会话持续(session persistence)
如果需要将客户机绑定到特定的应用服务器,保证来自同一台客户端的请求总是被同一台服务器处理,可以使用ip-hash
负载均衡机制。
upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
加权负载平衡(Weighted load balancing)
可以与以上3中策略配合使用。
upstream myapp1 {
server srv1.example.com weight=3;
server srv2.example.com;
server srv3.example.com;
}
若是这种配置,假如来了5个新请求,那么有3个会分发给srv1,而srv2和srv3各处理一个请求。
健康检测
nginx的反向代理实现包括了服务器的健康检测。如果来自特定服务器的响应因出现错误而失败,nginx会将这个服务器标记为失败,并在一段时间内不会选择该服务器处理请求。
max_fails
指令记录发生在 fail_timeout
时间内与服务器交互连续不成功的次数。默认情况下,max_fails
设置为1,当设置为0时相应服务器取消健康检测。
fail_timeout
失败超时时间,也表示多久服务器被标记为失败。在服务器失败后的失败超时间隔之后,nginx将开始用客户机的请求优雅地探测服务器。如果探测成功,则将服务器标记为活跃。
网友评论