基于 lua-resty-upstream-healthcheck 动态检测后端服务节点的状态,
基于 lua-resty-upstream-healthcheck 动态检测后端服务节点的状态,
- https://github.com/openresty/lua-resty-upstream-healthcheck
直接上配置示例步骤,配置环境如下:
在同一台服务器上配置了两个 tomcat 服务器作为 upstream 的两个节点,分别为:
tomcat1: 127.0.0.1:48080
tomcat2: 127.0.0.1:58080
然后分别在两个 tomcat 的 webapps/ROOT/ 下放置一个简单的文本文件 health.txt,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/home/health/test/tomcat1/webapps/ROOT
[health@healthvm ROOT]$ ll
总用量 200
-rw-r--r--. 1 health health 17811 12月 16 14:06 asf-logo.png
-rw-r--r--. 1 health health 5866 12月 16 14:06 asf-logo-wide.gif
-rw-r--r--. 1 health health 713 12月 16 14:06 bg -button.png
-rw-r--r--. 1 health health 1918 12月 16 14:06 bg -middle.png
-rw-r--r--. 1 health health 1392 12月 16 14:06 bg -nav-item.png
-rw-r--r--. 1 health health 1401 12月 16 14:06 bg -nav.png
-rw-r--r--. 1 health health 3103 12月 16 14:06 bg -upper.png
-rw-r--r--. 1 health health 3376 12月 16 14:06 build.xml
-rw-r--r--. 1 health health 21630 12月 16 14:06 favicon.ico
-rw-rw-r--. 1 health health 14 12月 16 15:27 health.txt
|
health.txt 也是很简单的:
1 2 |
[health@healthvm ROOT]$ more health.txt
I am tomcat1.
|
nginx 配置 192.168.1.200:38080 提供反向代理服务,完整配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
http {
#---------------------
# test health check
#---------------------
lua_package_path "/usr/local/openresty/lualib/resty/?.lua;/usr/local/openresty/lualib/resty/upstream/?.lua;;";
upstream tomcat {
server 127.0.0.1:48080;
server 127.0.0.1:58080;
}
lua_shared_dict healthcheck 1m;
lua_socket_log_errors off;
init_worker_by_lua_block {
local hc = require "resty.upstream.healthcheck"
local ok, err = hc.spawn_checker {
shm = "healthcheck",
upstream = "tomcat",
type = "http",
http_req = "GET /health.txt HTTP/1.0\r\nHost: tomcat\r\n\r\n",
interval = 2000,
timeout = 5000,
fall = 3,
rise = 2,
valid_statuses = {200, 302},
concurrency = 1,
}
if not ok then
ngx.log(ngx.ERR, "=======> failed to spawn health checker: ", err)
return
end
}
server {
listen 38080;
server_name localhost;
access_log logs/access-38080.log main;
error_log logs/error-38080.log debug;
location / {
proxy_pass http://tomcat;
}
location /server/status {
access_log off;
default_type text/plain;
content_by_lua_block {
local hc = require "resty.upstream.healthcheck"
ngx.say("Nginx Worker PID: ", ngx.worker.pid())
ngx.print(hc.status_page())
}
}
}
}
|
其中通过访问 http://192.168.1.200:38080/server/status 可以简单的查看后端服务器的运行状态
可以看到当前两台服务器都运行正常(状态为 up)
下面关闭 tomcat1,等待 30 秒后,再查看状态,可以看到 tomcat1 状态已经更新为 DOWN
再次打开 tomcat1 之后,状态又恢复为 UP 了。
注:
1,我这里测试时直接采用的是 openresty-1.9.3.2 版本,已经默认安装了 lua-resty-upstream-healthcheck 模块;
2, init_worker_by_lua_block 命令从 lua-nginx-module v0.9.17 版本开始支持,如果你的 lua-nginx-module 版本较老,则会提示不识别该命令;
评论暂时关闭