upyun / slardar

Updating your upstream list and run lua scripts without reloading Nginx.
494 stars 111 forks source link

通过HTTP API修改UPSTREAM不起作用 #46

Open walkermi opened 5 years ago

walkermi commented 5 years ago

我通过API,修改后端服务器list

curl 127.0.0.1:1995/upstream/node-dev.example.com -d \ {"servers":[{"host":"192.168.1.1", "port": 8080}, {"host":"192.168.1.2", "port": 8080}]}

curl 127.0.0.1:1995/upstream/node-dev.example.com -d \ {"servers":[{"host":"192.168.1.1", "port": 8080}]}

命令response显示ok,获取status也得到修改后的server list,但是看日志貌似没用调用到protocol,实际并没有从upstream list摘除192.168.1.2这台服务器,看代码也没有发现有调用到1895这个端口上的tcp protocol。

难道HTTP API只能修改保存的upstream list内容,实际摘除还需要自己发送tcp命令 echo -ne 'PUT upstream node-dev.example.com\n\x00\x00\x00\x3f{"cluster":[{"servers":[{"host":"192.168.1.1", "port": 8080}]}]}' | nc 127.0.0.1 1895 | xxd

请指点一下,先谢了。

walkermi commented 5 years ago

http://huangnauh.github.io/2017OpenRestyMeetup_files/protocol.png

这个protocol是谁发起的呢?是不是需要在http api的upstream处理中自行加入发送给1895端口的这个格式的命令呢?@huangnauh @yejingx

walkermi commented 5 years ago

又跟了一下代码,直接给1895端口发送tcp protocol,和通过http api发送upstream,最后都调用到了checkups.update_upstream(name, upstream),但这个checkups貌似并没有同步,tcp协议发送的影响力实际的balancer选择后端,http的修改,并没有影响balancer的选择。

walkermi commented 5 years ago
lua_shared_dict stream_state  10m;
lua_shared_dict stream_locks  10m;
lua_shared_dict stream_cache  10m;
lua_shared_dict stream_mutex  1m;
lua_shared_dict stream_config 10m;
lua_shared_dict stream_load   10m;

lua_shared_dict state 50m;
lua_shared_dict locks 10m;
lua_shared_dict mutex 1m;
lua_shared_dict cache 50m;
lua_shared_dict config 50m;
lua_shared_dict load   50m;

可能找到原因了,http 和 stream 并不是同一个shared,所以http api的修改,并不能同步到stream子系统。

这个有办法解决吗?@huangnauh @yejingx

yejingx commented 5 years ago

@walkermi 原因如你所说,http 和 stream 是不同的子系统,这个目前没有办法解决。