Nginx 负载均衡配置
Nginx 重试次数限制
Nginx 超时重试
Nginx 负载均衡
负载均衡策略
- round-robin 轮循(默认方法)
- least-connected
- ip-hash
栗子1(轮循)
http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
栗子2(least-connected)
优点: 流量分配更公平.
缺点: 相对round-robin,需要去维护和计算各server的连接.
upstream myapp1 {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
栗子3(ip-hash)
根据请求客户端的ip进行hash找到对应的server.
特点是同一个ip发出的请求都由同一个server处理.(如果有这样特殊的场景可以采用)
缺点: 真实情况是容易造成各server的负载不一致.比如,只有一个人使用,就算机器很多,只会有一台机器服务.或者一个用户请求一个极耗内存的操作,比如说导出报表,所有请求都打到这台机器,那么这台机器很有可能会挂.若还有nginx超时重试等机器,可能还会有更严重的问题.
upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
负载均衡之权重
nginx可以指定各server流量分配的权重,如下配置,如果有5个request,会分配个srv1 3个请求.
upstream myapp1 {
server srv1.example.com weight=3;
server srv2.example.com;
server srv3.example.com;
}
Nginx超时重试策略
重试次数配置,防止无意义的重试。
业务场景: 为什么需要重试或者为什么要限制重试策略. 举一个栗子, 有一个实时导出报表的操作,需要生成一个超大的excel,需要大量的内存资源,并且耗时,如果请求处理时间超时了,而触发了nginx的重试策略,那么就会导致重复的请求打到相同或不同机器上,轻则浪费资源,重则导致机器宕机的蔓延.
proxy_next_upstream_tries 1;
Ningx转移配置
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
上面的配置表示,如果后端服务器如下情况,将会把请求转发到下一台后端服务器上。
- error - 在连接到一个服务器,发送一个请求,或者读取应答时发生错误。
- timeout - 在连接到服务器,转发请求或者读取应答时发生超时。
- invalid_header - 服务器返回空的或者错误的应答。
- http_502 - 服务器返回502代码。
- http_504 - 服务器返回504代码。
nginx完整配置
upstream tomcats {
server 10.11.32.96;
server 10.11.32.97;
}
server {
listen 80 default_server;
server_name 10.11.32.96;
root /usr/share/nginx/html;
location / {
proxy_pass http://tomcats;
proxy_connect_timeout 100s;
proxy_read_timeout 120s;
proxy_send_timeout 300s;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_buffer_size 256k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_max_temp_file_size 128m;
#重试次数配置,防止无意义的重试。
proxy_next_upstream_tries 1;
}
# Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
网友评论