upsync
`upsync` 指令允许 NGINX 从 Consul 或 Etcd 动态同步 upstream 服务器配置,从而实现无需中断服务的实时更新。
NGINX module for syncing upstreams from consul or etcd
·
upstream
语法upsync address [upsync_timeout=duration] [upsync_interval=duration] [upsync_type=type] [strong_dependency=on | off];
默认值none
上下文upstream
参数1+
说明
upsync 指令是 NGINX 模块的一个强大功能,用于从像 Consul 或 Etcd 这样的键值存储同步 upstream 服务器配置。此同步在不需要重启 NGINX 的情况下进行,从而避免任何停机并确保持续的服务交付。当在 upstream 上下文中使用时,该指令至少需要一个参数,用以指定 Consul 或 Etcd 服务器的地址以及 upstream 配置的路径。可以包含其他参数,例如 upsync_timeout(定义同步操作的时间限制)和 upsync_interval(设置同步检查的频率)。此外,参数 upsync_type 用于标识正在访问的存储类型(例如 Consul 或 Etcd)。
配置成功后,NGINX 可以根据键值存储的定义自动添加或删除后端服务器,实时修改诸如权重和健康检查等相关属性。如果某个服务器失败或变得不健康,它可以在不需要管理员任何操作的情况下无缝地从 upstream 中移除。该模块还提供指定转储路径的选项,可将当前的 upstream 配置状态保存到该路径,以便在必要时进行手动检查或回滚。
配置示例
http {
upstream my_upstream {
upsync 127.0.0.1:8500/v1/kv/upstreams/my_app upsync_timeout=10s upsync_interval=1s upsync_type=consul;
}
server {
listen 80;
location / {
proxy_pass http://my_upstream;
}
}
}⚠
确保为 Consul 或 Etcd 提供正确的 IP 地址和端口,否则同步将失败。
⚠
注意 strong_dependency 设置,因为它会影响在故障情况下如何管理上游服务器——错误使用可能导致不希望的服务器被移除。
⚠
了解将同步间隔配置得过短的影响,因为这可能会在 NGINX 和键值存储上产生不必要的负载。