Nginx基于ngx_dynamic_upstream插件实现动态摘量

Nginx 基于 ngx_dynamic_upstream 插件实现动态摘量
介绍

在高流量的网络环境中,负载均衡是确保系统高可用性和性能的关键组成部分。Nginx 是一个强大的开源反向代理服务器,通过其模块化的结构,我们可以实现各种负载均衡策略。本文将介绍如何使用 ngx_dynamic_upstream 插件,将 Nginx 转变为一个动态负载均衡的解决方案。

准备工作

在开始之前,确保你已经安装了 Nginx 并且具备基本的配置经验。此外,我们需要安装 ngx_dynamic_upstream 插件。你可以通过以下步骤安装:

1.下载 ngx_dynamic_upstream 插件:

git clone https://github.com/cubicdaiya/ngx_dynamic_upstream.git

2.编译和安装插件

# 如果有其他插件,带上其他插件
./configure --add-module=../ngx_dynamic_upstream/

# 只编辑即可,不执行 make install,防止直接覆盖原有 nginx 文件
make

# 检查是否已添加 ngx_dynamic_upstream 插件
/usr/local/src/nginx-1.25.3/objs/nginx  -V
nginx version: nginx/1.25.3
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
configure arguments: --add-module=../ngx_dynamic_upstream-master/

# 备份现有 nginx 执行文件,有问题可以进行回滚操作
mkdir -p /data/backup/20231218
cp /usr/local/nginx/sbin/nginx /data/backup/20231218/

# 停止 nginx 并替换新的 nginx 执行文件
killall nginx
cp /usr/local/src/nginx-1.25.3/objs/nginx /usr/local/nginx/sbin/nginx

# 启动
/usr/local/nginx/sbin/nginx

3.确保插件已经安装成功


# 确保输出中包含 --add-module=../ngx_dynamic_upstream-master/
/usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.25.3
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
configure arguments: --add-module=../ngx_dynamic_upstream-master/

 

配置 ngx_dynamic_upstream 插件

现在我们将配置 ngx_dynamic_upstream 插件,启用动态负载均衡。以下是一个简单的配置示例:

# 主要添加以下 server 配置:
   server {
        listen 6000;
        
        location /dynamic {
            dynamic_upstream;
        }
    }

# 完整的 nginx.conf 配置
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        charset utf-8;
        location / {
            root   /data/package/;
            fancyindex on;
            fancyindex_localtime on;
            fancyindex_exact_size off;
            fancyindex_header "/Nginx-Fancyindex-Theme-dark/header.html";
            fancyindex_footer "/Nginx-Fancyindex-Theme-dark/footer.html";
            fancyindex_ignore "examplefile.html";
            fancyindex_ignore "Nginx-Fancyindex-Theme";
            fancyindex_ignore "Nginx-Fancyindex-Theme";
            autoindex on;
            autoindex_exact_size off;
            autoindex_localtime on;
        }
    }
    server {
        listen 6000;
        
        location /dynamic {
            dynamic_upstream;
        }
    }
    include upstream/*.conf;
    include vhost/*.conf;
}

# 添加虚拟主机配置
cd /usr/local/nginx/conf/vhost
vim test01.xxx.com.conf 
server {
    listen 80;
    server_name test01.xxx.com;

    location / {
        proxy_pass http://http-gateway/;
    }
}

cd /usr/local/nginx/conf/upstream/
vim upstream.conf 
upstream http-gateway {
# 定义了一个共享内存区域,存储负载均衡组(http-gateway)的状态信息
    zone zone_for_http-gateway 1m;
    server 192.168.0.128:8000 max_fails=5 fail_timeout=60;
    server 192.168.0.129:8000 max_fails=5 fail_timeout=60;
}

上述配置中,我们定义了一个名为 http-gateway 的负载均衡组,启用了 dynamic 选项以启用 ngx_dynamic_upstream 插件。同时,我们使用 zone 参数指定了共享内存区域的名称,这是用于存储动态负载均衡信息的地方。

动态操作后端服务器

一旦配置完成,我们就可以通过 ngx_dynamic_upstream 提供的 API 动态添加或删除后端服务器。可以使用 curl 工具向 Nginx 发送 HTTP 请求,例如:

# 查看后端服务器节点
curl "http://192.168.0.130:6000/dynamic?upstream=zone_for_http-gateway"
# 下线后端服务器节点
curl "http://192.168.0.130:6000/dynamic?upstream=zone_for_http-gateway&server=192.168.0.129:8000&down="
# 上线后端服务器节点
curl "http://192.168.0.130:6000/dynamic?upstream=zone_for_http-gateway&server=192.168.0.129:8000&up="

可以把命令加到后端应用启停脚本或者运维平台,通过命令就可以实现 nginx 摘量操作。

目前支持的 HTTP APIs 操作

# 官方提供的 API 操作类型
# list
curl "http://127.0.0.1:6000/dynamic?upstream=zone_for_backends"
server 127.0.0.1:6001;
server 127.0.0.1:6002;
server 127.0.0.1:6003;

# verbose
curl "http://127.0.0.1:6000/dynamic?upstream=zone_for_backends&verbose="
server 127.0.0.1:6001 weight=1 max_fails=1 fail_timeout=10;
server 127.0.0.1:6002 weight=1 max_fails=1 fail_timeout=10;
server 127.0.0.1:6003 weight=1 max_fails=1 fail_timeout=10;

# update_parameters
curl "http://127.0.0.1:6000/dynamic?upstream=zone_for_backends&server=127.0.0.1:6003&weight=10&max_fails=5&fail_timeout=5"
server 127.0.0.1:6001 weight=1 max_fails=1 fail_timeout=10;
server 127.0.0.1:6002 weight=1 max_fails=1 fail_timeout=10;
server 127.0.0.1:6003 weight=10 max_fails=5 fail_timeout=5;
# 支持的参数:weight、max_fails、fail_timeout

# down
curl "http://127.0.0.1:6000/dynamic?upstream=zone_for_backends&server=127.0.0.1:6003&down="
server 127.0.0.1:6001 weight=1 max_fails=1 fail_timeout=10;
server 127.0.0.1:6002 weight=1 max_fails=1 fail_timeout=10;
server 127.0.0.1:6003 weight=1 max_fails=1 fail_timeout=10 down;

# up
curl "http://127.0.0.1:6000/dynamic?upstream=zone_for_backends&server=127.0.0.1:6003&up="
server 127.0.0.1:6001 weight=1 max_fails=1 fail_timeout=10;
server 127.0.0.1:6002 weight=1 max_fails=1 fail_timeout=10;
server 127.0.0.1:6003 weight=1 max_fails=1 fail_timeout=10;

# add
curl "http://127.0.0.1:6000/dynamic?upstream=zone_for_backends&add=&server=127.0.0.1:6004"
server 127.0.0.1:6001;
server 127.0.0.1:6002;
server 127.0.0.1:6003;
server 127.0.0.1:6004;

# remove
curl "http://127.0.0.1:6000/dynamic?upstream=zone_for_backends&remove=&server=127.0.0.1:6003"
server 127.0.0.1:6001;
server 127.0.0.1:6002;
server 127.0.0.1:6004;

 

Nginx 基于 ngx_dynamic_upstream 插件实现动态摘量
结论

通过使用 ngx_dynamic_upstream 插件,我们可以将 Nginx 转变为一个灵活而强大的动态负载均衡解决方案。这使得系统能够根据实际需求动态调整后端服务器,提高系统的可伸缩性和可用性。

请记住,在实际生产环境中,合理配置和监控是至关重要的。确保了解 ngx_dynamic_upstream 的所有配置选项和性能特性,并根据实际需求进行调整。

© 版权声明

☆ END ☆
喜欢就点个赞吧
点赞0 分享
图片正在生成中,请稍后...