浏览 2.5k
今天和大家聊聊 API 动态更新 Upstream 功能,它可以动态的添加、修改、或移除上游服务器组中的节点,且无需重新加载服务器或 NGINX 配置,下面就详细来看一下吧。
http {
# 创建upstream group(包含server成员)
upstream appservers {
zone appservers 64k;
server appserv1.example.com weight=5;
server appserv2.example.com:8080 fail_timeout=5s;
server reserve1.example.com:8080 backup;
server reserve2.example.com:8080 down;
}
}
2、配置更新后,重载配置,以保证配置生效,如上操作无法实现动态更新,即时性较差。
而通过 API 动态更新 Upstream,就可以解决如上的问题。
curl -v -X POST -s http://192.168.40.111:8181/zxlapi/7/http/upstreams/cluster1/servers -d '{"server": "192.168.40.135:8080"}'|jq .
返回结果如下图:
也可以以域名方式动态添加:
curl -v -X POST -s http://192.168.40.111:8181/zxlapi/7/http/upstreams/cluster1/servers -d '{"server": "serv110.tmzy.com:8080"}'|jq .
以域名方式添加的 server 不同之处在于,域名方式添加的 server 会作为父 server 存在,它也会占用一个 server id, 其下可能关联一个或更多个子 server。
2、动态修改 server
修改命令参考如下:
curl -v -X PATCH -s http://192.168.40.111:8181/zxlapi/7/http/upstreams/cluster1/servers/6 -d '{"backup": false, "weight": 10 }' |jq .
3、动态删除 server
删除命令参考如下:
curl -X DELETE -s http://192.168.40.111:8181/zxlapi/7/http/upstreams/cluster1/servers/1 |jq .
4、查询 server
命令参考如下:
curl -v http://192.168.40.111:8181/zxlapi/7/http/upstreams/cluster1/servers/ server_id | jq .
以域名方式添加的子 server 的查询返回结果如下:会比 IP 形式添加的 server 多出 parent 和 host 两个字段。
5、动态配置的持久化
通过 API 所做的更改,在配置文件被重新加载时,这些改变会被丢弃, 那想让动态修改永久生效怎么办?可以通过 state 指令来实现动态配置的持久化。
http {
# ...
upstream appservers {
zone appservers 64k;
state /var/lib/nginx/state/appservers.conf;
# All servers are defined in the state file
# server appserv1.example.com weight=5;
# server appserv2.example.com:8080 fail_timeout=5s;
}
}
注意:state 状态文件只能通过 API 方式进行修改,不要去直接修改该文件。
按点赞数排序
按时间排序