# 负载均衡服务器
负载均衡的作用
- 请求转发: 将客户端请求转发到不同的应用服务器上,减轻单个服务器压力,提高整体的并发量
- 故障移除: 通过心跳检测,判断服务器是否正常工作,将请求转发到正常运行的服务器,保证体验
- 恢复服务: 检测到服务器恢复工作,自动将其添加到请求处理队伍中
# 负载均衡的实现
- 自动轮询: 每个请求按照事件顺序逐一分配,如果服务器 down,自动剔除
- 配置权重:通过配置权重,指定访问比率,应对服务器性能不均的情况
- 哈希管理: 每个请求按照访问 ip 的 hash 结果分配到固定的应用服务器,应对会话管理
# 配置负载均衡
upstream
参数说明
- down: 表示当前服务器不参与负载
- backup: 备用机器:其他机器忙的时候,会请求 backup 机器
- weight: 表示当前服务器的权重,权重越大,访问比例也大
- max_fails:表示允许请求失败的次数
- max_conns:限制最大的接收的连接数
- fail_timeout: 经过 max_fails 次失败后,服务暂停的时间
前级代理
server {
listen 9005;
server_name localhost;
location / {
proxy_pass http://clusters;
}
}
负载均衡
upstream clusters {
server 127.0.0.1:9001;
server 127.0.0.1:9002;
server 127.0.0.1:9003;
server 127.0.0.1:9004;
}
验证负载均衡是否起作用。
curl http://localhost:9005
# 调度算法讲解
轮询loop
:按时间顺序逐一分配到不同的后端服务器
upstream clusters {
server 127.0.0.1:9001;
server 127.0.0.1:9002;
server 127.0.0.1:9003;
server 127.0.0.1:9004;
}
权重weight
:默认为 1 weight 越大,匹配的机会越多
upstream clusters {
server 127.0.0.1:9001;
server 127.0.0.1:9002;
server 127.0.0.1:9003 weight=2; # 访问比率:40%
server 127.0.0.1:9004;
}
哈希ip_hash
:每个请求按访问 ip 的 hash 结果分配,这样来自同一个 ip 的固定访问一个后端服务器,可以解决服务端的用户 session 问题
upstream clusters {
ip_hash;
server 127.0.0.1:9001;
server 127.0.0.1:9002;
server 127.0.0.1:9003 weight=2; # 访问比率:40%
server 127.0.0.1:9004;
}
哈希url_hash
:按照访问的 url 的 hash 结果来分配请求,是每个 url 定向到同一个后端服务器,可以解决缓存失效问题
upstream clusters {
hash $request_uri;
# $request_uri是nginx内部抛出的变量,指的是除了域名的部分
server 127.0.0.1:9001;
server 127.0.0.1:9002;
server 127.0.0.1:9003 weight=2; # 访问比率:40%
server 127.0.0.1:9004;
}