The current usage scenario assumes that the upstream configuration will not change dynamically, we only can change upstream configuration via reload nginx.
In some scenarios (see also https://github.com/openresty/lua-resty-upstream-healthcheck/issues/55), we want to dynamically modify the upstream configuration without reload nginx, and the current design cannot satisfy it, so can we add a parameter to hc.spawn_checker to support dynamic upstream mode?
In this case, just add a parameter to hc.spawn_checker:
init_worker_by_lua_block {
local us, err = get_upstreams()
if not us then
return
end
for _, u in ipairs(us) do
local ok, err = hc.spawn_checker{
shm = "healthcheck",
type = "http",
upstream = u,
dynamic = true, -- enable dynamic upstream mode
}
end
}
In this case, we should add a timer to watch global upstream configuration:
init_worker_by_lua_block {
require "resty.core"
local upstream = require "ngx.upstream"
local hc = require "resty.upstream.healthcheck"
local get_upstreams = upstream.get_upstreams
local watch
watch = function (premature)
if premature then
return
end
local us, err = get_upstreams()
if not us then
return
end
for _, u in ipairs(us) do
local ok, err = hc.spawn_checker{
shm = "healthcheck",
type = "http",
upstream = u,
dynamic = true, -- enable dynamic upstream mode
}
end
local ok, err = ngx.timer.at(2, watch)
end
local ok, err = ngx.timer.at(2, watch) -- create a timer to watch global upstream configuration every 2s.
}
Dynamic upstream mode checker behave as follows:
When call spawn_checker, if the upstream not exists, new checker will be created, otherwise ignore. (case1)
Any time, when delete an upstream, the checker will exit automatically. (case 1)
Any time, when modify an upstream (compared with peers md5 digest), the checker will update peers automatically. (case1 + case2)
Hi,
The current usage scenario assumes that the upstream configuration will not change dynamically, we only can change upstream configuration via reload nginx.
In some scenarios (see also https://github.com/openresty/lua-resty-upstream-healthcheck/issues/55), we want to dynamically modify the upstream configuration without reload nginx, and the current design cannot satisfy it, so can we add a parameter to
hc.spawn_checker
to support dynamic upstream mode?In this case, just add a parameter to
hc.spawn_checker
:In this case, we should add a timer to watch global upstream configuration:
Dynamic upstream mode checker behave as follows:
spawn_checker
, if the upstream not exists, new checker will be created, otherwise ignore. (case1)