动态扩容
现状
Nginx如何获取集群中的机器信息
发布时从数据库的表中获取,通过生成upstream.conf。
upstream pro { server 10.0.0.1:8088 weight 1; server 10.0.0.2:8088 weight 1; keepalive 1024; check interval=3000 rise=2 fall=1 timeout=1000 type=http default_down=false; check_http_send "GET /ok.htm HTTP/1.0\r\nConnection:keep-alive\r\n\r\n"; check_keepalive_requests 100; }
问题
无法实现动态扩容,只有重新reload nginx 配置才能添加新机器或者新集群。
动态扩容方案
核心问题
如何不经重新加载获取集群变化信息
比如,运行时从数据库中获取
比如,用域名代替集群信息
方案一 使用域名
配置一
server { location / { proxy_pass http://pro.xusheng.org:8080; } }
配置二
upstream backends { least_conn; server pro.xusheng.org:8080 max_fails=3; } server { location / { proxy_pass http://backends; } }
配置三
resolver 10.0.0.2 valid=10s; server { location / { set $backend_servers pro.xusheg.org; proxy_pass http://$backend_servers:8080; } }
题外话
如果使用 Nginx Plus
使用配置二,可以规避上面的所有劣势。但是一是收费,二是目测不支持现在nginx使用的lua模块
方案二 定时从固定数据源获取集群信息
需要做的工作
- 将机器信息写入数据源
- 新机器添加时需要启动应用并添加到数据源
- nginx运行时添加机器