# 负载均衡服务器

负载均衡的作用

  1. 请求转发: 将客户端请求转发到不同的应用服务器上,减轻单个服务器压力,提高整体的并发量
  2. 故障移除: 通过心跳检测,判断服务器是否正常工作,将请求转发到正常运行的服务器,保证体验
  3. 恢复服务: 检测到服务器恢复工作,自动将其添加到请求处理队伍中

# 负载均衡的实现

  1. 自动轮询: 每个请求按照事件顺序逐一分配,如果服务器 down,自动剔除
  2. 配置权重:通过配置权重,指定访问比率,应对服务器性能不均的情况
  3. 哈希管理: 每个请求按照访问 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;
}