负载均衡
约 556 字大约 2 分钟
2025-08-28
负载均衡需要上游服务的支持,可以理解为多个车道(后端服务)到达同一个目的地(同一个业务),显然使每个车道的车辆密度一致能够最大化利用
http {
upstream backend_servers { # 后端服务器组
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}
server {
listen 80;
server_name ecommerce.com;
location / {
proxy_pass http://backend_servers; # 将客户端的请求转发到指定的后端服务器组
proxy_set_header Host $host;
proxy_set_header X - Real - IP $remote_addr; # 设置请求头信息,确保后端服务器能获取客户端的真实信息。
}
}
}定义一个upstream,即上游服务组,在路由转发中将请求转发至目标服务组中
策略
有了服务列表,Nginx 需要依据一定的策略选择请求转发的目的地
轮询(默认)
依据组中的顺序依次轮询,让每一个服务器轮流处理请求。例如:
upstream backend_servers { # 后端服务器组
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}第一个请求发送至192.168.1.100:8080,第二个请求发送至192.168.1.101:8080,以此类推
加权轮询
在轮询的基础上,为每个服务器添加权重(默认为 1),权重更大的服务器将会被转发更多的请求
upstream backend_servers {
server 192.168.1.100:8080 weight=6;
server 192.168.1.101:8080 weight=1;
}IP 哈希
将请求 IP 进行哈希,再与服务器组数量进行取模,这样能够保证同一个请求的 IP 总会发送到同一个同一个后端服务器
upstream backend_servers {
ip_hash;
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}最少连接
将请求发送至当前连接数最少的后端服务器,保证负载均衡 与轮询的区别:每个请求的耗时不一定相同,轮询总是按照顺序转发请求,而最少连接能够保证每一个服务器连接数的请求更一致
upstream backend_servers {
least_conn;
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}其他配置
健康检查
使用max_fails与fail_timeout参数进行健康检查,若发现某一服务器在fail_timeout时间内出现了超过max_fails次失败,则认为该服务器不可用,则在当前时间 + fail_timeout内不会向其发送请求
