nginx_http_dyups_module
 nginx_http_dyups_module是第三方开源软件,它提供API动态修改upstream的配置,并且支持Nginx的ip_hash、keepalive等与upstream有关的配置。
安装nginx_http_dyups_module
git clone git://github.com/yzprofile/ngx_http_dyups_module.git
./configure --add-module=../ngx_http_dyups_module
 
动态管理upstream
upstream myapp_01 {
server 10.102.20.20:80;
}
upstream myapp_02 {
server 10.102.20.211:80;
} server {
listen 8000;
location / {
allow 127.0.0.1;
deny all;
dyups_interface;
} } server {
listen 80;
server_name localhost; location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
set $ups myapp;
proxy_pass http://$ups;
}
}

  

                   
 
确认目前的upstream清单中是否有myapp
[root@lua conf]# curl http://127.0.0.1:8000/list
myapp_01
myapp_02

  

上面的输出显示没myapp,下面添加upsteam,并命名为myapp(它是以覆盖当前upstream的内容完成配置的):
[root@lua conf]# curl -d "server 10.102.20.20:80 max_fails=3 fail_timeout=5s weight=10 ;server 10.102.20.211 max_fails=3 fail_timeout=5s weight=10;" 127.0.0.1:8000/upstream/myapp
success

  

 
获取upsteam清单的详情:
[root@lua conf]# curl 127.0.0.1:8000/detail
myapp_01
server 10.102.20.20:80 weight=1 max_conns=0 max_fails=1 fail_timeout=10 backup=0 down=0 myapp_02
server 10.102.20.211:80 weight=1 max_conns=0 max_fails=1 fail_timeout=10 backup=0 down=0 myapp
server 10.102.20.20:80 weight=10 max_conns=0 max_fails=3 fail_timeout=5 backup=0 down=0
server 10.102.20.211:80 weight=10 max_conns=0 max_fails=3 fail_timeout=5 backup=0 down=0

  

访问upsteam下的服务,结果显示正常
[root@lua conf]# curl -I 10.102.20.103
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Fri, 13 Dec 2019 01:55:39 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 616
Connection: keep-alive
Last-Modified: Fri, 14 Dec 2018 09:10:04 GMT
ETag: "5c13736c-268"
Accept-Ranges: bytes

  

 
验证删除节点功能:
curl -i -X DELETE 127.0.0.1:8000/upstream/myapp
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Fri, 13 Dec 2019 01:57:43 GMT
Content-Length: 7
Connection: keep-alive success

  

 
可以看到已删除myapp
[root@lua conf]# curl http://127.0.0.1:8000/list
myapp_01
myapp_02

  

 
进行压力测试,与原生的Nginx upstream配置相比,没有明显的性能波动,稳定性正常,upstream的动态添加和删除操作会随机执行。
 
dyups支持的接口说明表:
请求方法 HTTP接口 用途
GET /detail 获取所有upsteam的清单明细
GET /list 获取所有upsteam的name
GET /upstream/name 获取指定的upstream内的后端服务器的IP地址和端口
POST /upstream/name 覆盖指定的upstream的内容,包括IP地址、端口号、权重等信息
DELETE /upstream/name 删除指定的upstream
功能验证完成后,准备灰度发布。
此模块还提供了Ngx_Lua接口,方便Ngx_Lua处理动态的upstream,可参考官方的Wiki。https://github.com/yzprofile/ngx_http_dyups_module/blob/master/README.md
 
确保upstream数据的完整性
使用 nginx_http_dyups_module时有一个隐患,即动态修改的配置存放在Nginx内存中的,如果重载Nginx配置,这些数据就会丢失。
对此可行的解决方案是开发一个脚本,用来调用nginx_http_dyups_module的接口/detail,获取upstream的全部信息,并存为Nginx可以读取的upstream配置文件;
在upstream发生变更时就会触发该脚本生成一个upstream文件,将这个文件include到Nginx配置中;
当Nginx重载配置时,它会先从这个upstream文件加载最新的数据。
 
 
 

最新文章

  1. iOS 解决LaunchScreen中图片加载黑屏问题
  2. php简写表达式,&& or || 缩写条件语句
  3. 配合crond服务实现自定义周期备份MySQL数据库(使用innobackupex进行备份)
  4. OC-内存管理-基本原理与引用计数器
  5. 换iphone5屏幕你花了多少钱?不防我们看下市场的批发价格
  6. 04_IOC容器装配Bean(xml方式)
  7. 正确使用stl map的erase方法
  8. [p2p]UDP用打洞技术穿透NAT的原理与实现
  9. Flasback数据库(闪回数据库)
  10. IPayablebillItf
  11. int([x[, base]]) : 将一个字符转换为int类型,base表示进制
  12. 动画原理——脉动(膨胀缩小)&&无规则运动
  13. [055] SSL 3.0曝出Poodle漏洞的解决方式-----开发人员篇
  14. 强制性输出private中变量的三种方法
  15. 主从及转发DNS搭建
  16. SSH服务详解
  17. 快速找出网站中可能存在的XSS漏洞实践(一)
  18. 牛客练习赛 A题 筱玛的快乐
  19. Codeforces1023E Down or Right 【贪心】
  20. A1124. Raffle for Weibo Followers

热门文章

  1. 解决在MAC上输入法切换慢的问题
  2. [ ceph ] CEPH 部署完整版(CentOS 7 + luminous)
  3. ETF:pcf文件制作
  4. Java之数组类型
  5. IntelliJ IDEA(2018.3.5) 设置编码为utf-8编码
  6. TopShelf+Quartz.net 实现window服务
  7. 【快捷键】【idea】的eclipse格式化快捷键Ctrl+Shift+F与win10冲突的解决方法
  8. 在Angular中使用element
  9. 几个c++界面库的比较
  10. day26——tyoe元类与object的联系、反射、函数与方法的区别、双下方法