一、什么是动态负载均衡
传统的 Nginx 负载均衡,是在 Nginx config 配置文件中,对 upstream 进行修改(扩展新服务器)进行,进行负载均衡,此时就需要让 Nginx 重启加载 配置文件。动态就是让 upstream 进行动态配置,可以将 upstream 方在 consul 中,让 Nginx 从 consul 读取,修改 upstream 也无需重启 Nginx 服务器,实现动态负载均衡。
二、架构图
Upsync:Nginx 动态获取最新 upstream 配置,新浪微博开发的开源框架。
Consul:对动态负载均衡配置实现注册。专门存放负载均衡注册配置信息,Nginx 间隔时间动态获取 consul server 配置信息。
三、常见动态负载均衡方案
- consul + consul template,每次发现配置,需要 reload Nginx。
- consul + openResty,无需 reload 的动态负载均衡
- Consul + Upsync + Nginx,无需 reload 的动态负载均衡
四、搭建流程
- 安装 Consul,参照其他博客。本篇使用 kv 模块功能。
- 安装 Nginx,参照其他博客,Nginx 1.9 及以上版本,否则链接不上 Upsync 。
- 安装 Upsync,参照博客 Nginx-Upsync-Module部署 (Linux)。
- Upstream 动态配置,参照博客 Nginx-Upsync-Module部署 (Linux)。
五、注册 Upstream 配置
注册动态 upstream 配置,可以通过 consul ui 界面,也可以通过 consul http api 进行注册
创建 upstream key,返回 true ,代表创建成功
http://192.168.200.164:8500/v1/kv/upstreams/itmayiedu/ip:port
查看consul中刚创建的key
http://192.168.200.101:10014/WeatherForecast
http://192.168.200.101:10015/WeatherForecast
六、负载均衡配置
在 consul 中每个 upstream 可以进行负载均衡配置,操作方式,需要对每个 key 进行 json 值存在
{"weight":1, "max_fails":2, "fail_timeout":10}
访问 Nginx 监听的 8090 端口,第一次访问
第二次访问