Nginx 负载均衡配置
介绍:
Nginx负载均衡的原理是把请求均匀地分摊给上游的应用服务器,这样即使某一个服务器宕机也不会影响请求的处理,或者当应用服务器扛不住了,可以随时进行扩容。Nginx在处理请求时,会根据负载均衡算法(如轮询、IP Hash等)将请求分发到不同的后端服务器上。Nginx支持多种负载均衡算法,可以根据实际需求进行选择。
负载均衡分类:HTTP负载均衡,TCP负载均衡,UDP负载均衡。HTTP负载均衡
在NGINX中配置如下:
upstream back{ server 192.168.1.1:80 weight=1;#默认权重1 server 192.168.1.2:8088 weight=2;#传输请求2倍 server 192.168.1.3:80 backup;#如果其它服务器不可用作为备份服务 } server { location / { proxy_pass http://back; } }
TCP负载均衡
nginx.config配置如下:stream与http同级,可以在其它文件目录导入配置。
stream {
include /etc/nginx/stream.conf.d/*.conf;
}
etc/nginx/stream.conf.d/socket.conf配置如下:
upstream socket_server {
server 192.168.1.33:3306 weight=2;
server 192.168.2.33:3306 backup;
}
server {
listen 3306;
proxy_pass socket_server;
}
UDP负载均衡
注意:只需要添加udp标识。如果需要服务器来回传输多个数据包需要添加reuseport。
stream {
upstream dns{
server dns.test.com:321 weight=1;
server dns.test2.com:321 backup;
}
server {
listen 321 udp reuseport;
proxy_pass dns;
}
}
负载均衡的常用方式
- 轮询(默认):每个请求会按时间顺序逐一分配到不同的后端服务器。如果服务器down掉了,会自动剔除该服务器。此策略适合服务器配置相当,无状态且短平快的服务使用。
- 权重:根据后端服务器的权重值来分配请求,权重值越高的服务器接收到的请求越多。此策略适合服务器配置不同,有状态且需要动态调整负载的情况。指令名称:weight=xxx
- IP哈希:根据客户端IP地址进行哈希计算,然后将请求分配到相应的后端服务器。此策略适合需要限制访问源IP地址的情况。指令名称:ip_hash,此方式支持HTTP。受weight指令影响。
- 最小连接:将请求分配到当前连接数最少的后端服务器。此策略适合需要保证后端服务器的稳定性和可靠性的情况。指令名称:least_conn。受weight指令影响。
- 基于URI哈希:根据请求URI进行哈希计算,然后将请求分配到相应的后端服务器。此策略适合需要进行会话保持的情况。指令名称:hash,可选参数:consistent。受weight指令影响。
upstream backend{
least_conn;
server backend.test.com;
server backend.test2.com;
}
被动健康检查
通过NGINX的max_fails指令超时重试次数(默认1次)和fail_timeout指令服务超时时间(默认10s),
upstream backend{
least_conn;
server backend.test.com max_fails=3 fail_timeout=3s;
server backend.test2.com max_fails=1 fail_timeout=5s;
}