跳至主要內容

负载均衡

刘春龙原创...大约 3 分钟LinuxNginxWEB服务器教程文档

负载均衡是高可用网络基础架构的关键组件,通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性

就像宋小宝说的雨露均沾

upstream指令

upstream块不属于虚拟主机,只能在 http 块里配置,它定义了在反向代理时 Nginx 需要访问的后端服务器集群和负载均衡策略。

http {
    upstream  back_end {       # upstream 需要一个名字
        server 192.168.66.100 max_conns=2 fail_timeout=1s;
        server 192.168.66.101 weight = 1;
        server 192.168.66.102 weight = 1;
    }
    server{
        lisetn 80;
        server_name *.*;
        location / {
            proxy_set_header Host $host;  #转发原始请求的host头部
            proxy_pass http://back_end;  #转发到upstream块定义的服务器集群。
        }
    }
}

upstream 参数:

max_conns 节点的最大连接数
slow_start 缓慢启动时间
down 节点下线
backup 备用节点
max_fails 允许的最大失败数
fail_timeout 超过最大失败数后的等待时间

负载均衡算法

轮询(默认)

轮询方式,依次将请求分配到各个后台服务器中,默认的负载均衡方式。 适用于后台机器性能一致的情况。 挂掉的机器可以自动从服务列表中剔除。

http {
    upstream  back_end {       # upstream 需要一个名字
        server 192.168.0.14;
        server 192.168.0.15;
    }
    server{
        lisetn 80;
        server_name *.*;
        location / {
            proxy_set_header Host $host;  #转发原始请求的host头部
            proxy_pass http://back_end;  #转发到upstream块定义的服务器集群。
        }
    }
}


 
 










轮询加权重

根据权重来分发请求到不同的机器中,指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。

http {
    upstream  back_end {       # upstream 需要一个名字
        server 192.168.0.14 weight=20;
        server 192.168.0.15 weight=10;  ;
    }
    server{
        lisetn 80;
        server_name *.*;
        location / {
            proxy_set_header Host $host;  #转发原始请求的host头部
            proxy_pass http://back_end;  #转发到upstream块定义的服务器集群。
        }
    }
}


 
 










IP_hash

每个请求按访问 IP 的哈希结果分配,使来自同一个 IP 的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的 session 共享问题。俗称 IP 绑定。

http {
    upstream  back_end {       # upstream 需要一个名字
        server 127.0.0.1:8080 ;
        server 127.0.0.1:8081 ;
        ip_hash;
    }
    server{
        lisetn 80;
        server_name *.*;
        location / {
            proxy_set_header Host $host;  #转发原始请求的host头部
            proxy_pass http://back_end;  #转发到upstream块定义的服务器集群。
        }
    }
}


 
 
 










fair

比 weight、ip_hash 更加智能的负载均衡算法,fair 算法可以根据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间 来分配请求,响应时间短的优先分配。Nginx 本身不支持 fair,如果需要这种调度算法,则必须安装 upstream_fair 模块。

下载nginx-upstream-fair-master

wget -P /opt https://github.com/gnosek/nginx-upstream-fair/archive/refs/heads/master.zip

解压

cd /opt
unzip master.zip -d /usr/local

提示

如果没有请先安装 unzip

apt install unzip

安装

切换到 nginx 目录执行以下操作

./configure --add-module=/usr/local/nginx-upstream-fair-master

编译

make

此步骤可能出现异常:

nginx-upstream-fair/ngx_http_upstream_fair_module.c:543:28: error: ‘ngx_http_upstream_srv_conf_t’ has no member named ‘default_port’ if (us->port == 0 && us->default_port == 0)

解决方案:

我们在 nginx 的编译目录下找到 ngx_http_upstream.h 配置文件的 ngx_http_upstream_srv_conf_s 模块,新增一个 default_port 即可

新增 nginx 命令

cp objs/nginx /usr/local/nginx/sbin/nginx1

警告

已安装 Nginx,配置第三方模块时,只需要--add-module=/第三方模块目录,然后 make 编译一下就可以,不要 make install 安装。编译后复制 objs 下面的 nginx 到指定目录下

配置实现

http {
    upstream  back_end {       # upstream 需要一个名字
        fair;
        server 127.0.0.1:8080 ;
        server 127.0.0.1:8081 ;
    }
    server{
        lisetn 80;
        server_name *.*;
        location / {
            proxy_set_header Host $host;  #转发原始请求的host头部
            proxy_pass http://back_end;  #转发到upstream块定义的服务器集群。
        }
    }
}


 
 
 










启动

./sbin/nginx1
./sbin/nginx1 -s reload
上次编辑于:
贡献者: 刘春龙
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.7