nginx站点动态上下线之使用 ngx_dynamic_upstream 实现nginx动态负载

在一个新服务上线的时候,一般会提前申请几台机器, 运维会在nginx上新增server,并新增server对应的upstream ,正常情况下upstream应该配置是后端服务器的IP,但是这里不配置(如果允许,甚至这一步都可以省略)。
服务部署好并启动,在启动的时候,向注册中心注册自身的服务信息,包括IP和端口。
注册中心收到请求后,会对服务进行健康检测,确保提供的服务没有问题,则将服务状态标示为预上线状态。
在后台管理中心,就可以将预上线的服务设置为上线,服务管理中心会调用nginx的上线接口,将服务IP新增或者更新到upstream中,服务就可以提供访问。

模块下载地址: https://github.com/cubicdaiya/ngx_dynamic_upstream

主要功能 实现了修改upstream权重 可以不需要重载nginx配置 即不需要reload

首先安装nginx

nginx 安装文档请移驾 史上最全最详细Nginx源码编译安装的方法步骤

nginx 添加模块时一定要先 nginx -V 看一下原先安装的模块,不要覆盖原有模块

下面原有模块 –add-module=/opt/nginx-module-vts 新增模块 –add-module=/opt/ngx_dynamic_upstream

[root@localhost nginx-1.19.9]# ./configure --prefix=/opt/nginx/ --add-module=/opt/nginx-module-vts --add-module=/opt/ngx_dynamic_upstream-0.1.6
[root@localhost nginx-1.19.9]# make -j 4 # -j 是多线程编译,4就是4个线程
[root@localhost nginx-1.19.9]# make install 
[root@localhost nginx-1.19.9]# cd /opt/nginx/sbin/
[root@localhost sbin]# ll
总用量 8928
-rwxr-xr-x. 1 root root 4612232 4月   1 21:43 nginx
-rwxr-xr-x. 1 root root 4524024 4月   1 13:11 nginx.old
[root@localhost sbin]# ./nginx -V
nginx version: nginx/1.19.9
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
configure arguments: --prefix=/opt/nginx/ --add-module=/opt/nginx-module-vts --add-module=/opt/ngx_dynamic_upstream-0.1.6
模块添加完成

修改nginx配置

本次只讲dynamic_upstream相关配置,其它nginx配置请自行查找相关文档

主配置下添加(在任意server模块下都可以,我配置在80端口下面)

location /dynamic {
        dynamic_upstream;
        allow 192.168.80.80 #IP白名单
        #allow 127.0.0.1;
        #deny all;
}

upstream 下面配置(zone名字随意 1m即可

upstream gateway {
        zone  zone_for_gateway_jgy_9527 1m;
        server 192.168.80.176:9528; # max_fails=1 fail_timeout=30s;
        server 192.168.65.94:9528; # max_fails=1 fail_timeout=30s;
}

启动nginx

#养成好习惯,启动/重启 前检查配置是否正常
[root@localhost conf.d]# /data/openresty/nginx/sbin/nginx -c /data/openresty/nginx/conf/nginx.conf -t  #检查配置文件
nginx: the configuration file /data/openresty/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /data/openresty/nginx/conf/nginx.conf test is successful
[root@localhost conf.d]# /data/openresty/nginx/sbin/nginx -c /data/openresty/nginx/conf/nginx.conf #启动nginx

验证动态剔除服务

[root@OIS-AS02 ~]# curl "http://192.168.65.94/dynamic?upstream=zone_for_gateway_jgy_9527&verbose=" #查看zone_for_gateway_jgy_9527 下面服务列表
server 192.168.80.176:9528 weight=1 max_fails=1 fail_timeout=10;
server 192.168.65.94:9528 weight=1 max_fails=1 fail_timeout=10;
[root@OIS-AS02 ~]# curl "http://192.168.65.94/dynamic?upstream=zone_for_gateway_jgy_9527&verbose=&server=192.168.80.176:9528&down="
server 192.168.80.176:9528 weight=1 max_fails=1 fail_timeout=10 down;
server 192.168.65.94:9528 weight=1 max_fails=1 fail_timeout=10;

HTTP APIs(使用方法)

# 列表
$ 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;

# 详细
$ 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;

# 更新参数(临时,重启失效)
$ 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;

# 下线服务
$ 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;

# 上线服务 
$ 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;

# 动态添加服务
$ 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;

# 动态移除服务
$ 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;

版权声明:本文为作者原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原创文章,作者:老C,如若转载,请注明出处:https://www.code404.icu/169.html

发表评论

登录后才能评论