1.介绍

  1. Nginx Upstream配置动态更新已经有很多开源方案,大多数都是基于生成配置文件后进行reload(本博客中也有介绍),但是reload这个操作在业务流量不大的时候是可以进行的,但是在一些高流量的站点,随便进行reload会对整个集群的性能造成抖动,这个抖动问题,要追究起来可大可小,不过总有人希望有个完美的方案来避免这个抖动,weibonginx-upsync-module模块就是为解决这个问题而生的。

2.Nginx conf文件配置测试

  1. upstream backServer{
  2. server 127.0.0.1:11111;
  3. upsync 192.168.212.134:8500/v1/kv/upstreams/itmayiedu upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;
  4. upsync_dump_path /usr/local/nginx/conf/servers/servers_test.conf;
  5. }
  6. server {
  7. listen 80;
  8. server_name localhost;
  9. location / {
  10. proxy_pass http://backServer;
  11. ###nginx与上游服务器(真实访问的服务器)超时时间 后端服务器连接的超时时间_发起握手等候响应超时时间
  12. proxy_connect_timeout 1s;
  13. ###nginx发送给上游服务器(真实访问的服务器)超时时间
  14. proxy_send_timeout 1s;
  15. ### nginx接受上游服务器(真实访问的服务器)超时时间
  16. proxy_read_timeout 1s;
  17. index index.html index.htm;
  18. }
  19. }
  • upsync指令指定从consul哪个路径拉取上游服务器配置;
  • upsync_timeout配置从consul拉取上游服务器配置的超时时间;
  • upsync_interval配置从consul拉取上游服务器配置的间隔时间;
  • upsync_type指定使用consul配置服务器;
  • strong_dependency配置nginx在启动时是否强制依赖配置服务器,如果配置为on,则拉取配置失败时nginx启动同样失败。
  • upsync_dump_path指定从consul拉取的上游服务器后持久化到的位置,这样即使consul服务器出问题了,本地还有一个备份。

注意:替换 consul 注册中心地址

3.创建upsync_dump_path

mkdir /usr/local/nginx/conf/servers/
upsync_dump_path指定从consul拉取的上游服务器后持久化到的位置,这样即使consul服务器出问题了,本地还有一个备份。

4.启动consul

./consul agent -dev -ui -node=consul-dev -client=192.168.72.130

5.添加nginx Upstream服务

1.使用linux命令方式发送put请求

curl -X PUT http://192.168.72.130:8500/v1/kv/upstreams/itmayiedu/192.168.72.1:8081
curl -X PUT http://192.168.72.130:8500/v1/kv/upstreams/itmayiedu/192.168.72.1:8083

2.负载均衡信息参数

{“weight”:1, “max_fails”:2, “fail_timeout”:10, “down”:0}

  1. http://192.168.72.130:8500/


Nginx 动态路由(nginx-upsync-module) - 图1