Skip to content

Nginx 负载均衡

负载均衡:将多个请求分配给多个服务器,从而实现高可用和高性能。是计算机横向拓展的一种方式。

客户端先到达一个 负载均衡器,通过 调度算法, 将请求分配给目标服务器。

优点:

  • 通过健康检查,避免单点故障
  • 当发现节点故障时,从集群中移除,保证应用的高可用性

负载均衡的调度算法

  • 轮询:循环(从第一台服务器到最后一台服务器)依次分配请求
  • 权重:轮询的基础上,可以设置权重,权重高的服务器分配的请求更多
  • 最小连接:服务器的连接数在负载均衡服务器上是可以查询到的,在请求发来时,可以选择连接数最小的服务器进行分配
  • ip哈希:将请求的源 IP 地址进行哈希计算,将结果作为索引,将请求分配给对应的服务器
    • 这样做的好处是,ip哈希时得到的结果是固定的,一台客户端每次请求都会访问在同一台服务器上,可以解决session问题(粘性对话)

负载均衡

需求:当访问 192.168.1.20/lb/index.html 时,通过负载均衡,让请求平均分配到 8080 和 8081 端口中。

轮询调度

1)分别找到两个 tomcat 的安装目录,如 /usr/local/tomcat/webapps

  • 创建 lb 目录:mkdir lb
  • 创建访问页面:cp tomcat/index.html lb
  • 查看画面内容:cat lb/index.html

2)修改nginx.conf

conf
http {
    # 配置 upstream
    upstream myserver {
        server 192.168.1.20:8080;
        server 192.168.1.20:8081;
    }

    server {
        server_name  192.168.1.20;

        # 处理负载均衡请求
        location / { 
            # 将请求映射到负载均衡器中,参数为 upstream 的名称
            proxy_pass http://myserver;
        }
    }
}

权重

如果需要额外设置权重,可以设置 weightweight 越大权重越大,默认值是 1。

conf
# 配置 upstream
upstream myserver {
    server 192.168.1.20:8080 weight=2;
    server 192.168.1.20:8081 weight=1;
}

ip哈希

如果想要使用 ip哈希,可以在 upstream 中使用 ip_hash

conf
# 配置 upstream
upstream myserver {
    server 192.168.1.20:8080;
    server 192.168.1.20:8081;
    ip_hash;
}