当前位置:首页 > 编程笔记 > 正文
已解决

nginx upstream健康检测

来自网友在路上 193893提问 提问时间:2023-11-09 09:59:08阅读次数: 93

最佳答案 问答题库938位专家为你答疑解惑

自带健康检测module

nginx本身提供有健康检测module ngx_http_upstream_module ,利用自身的module可以实现简单的健康检测

下载nginx模块
wget https://github.com/nginx/nginx/archive/release-1.19.3.tar.gz解压nginx模块
tar -zxvf release-1.19.3.tar.gz进入nginx模块目录
cd nginx-release-1.19.3编译nginx带上ngx_http_upstream_module模块
./configure --add-module=../ngx_http_upstream_module安装nginx
make && make install重启nginx
nginx -s reload

第三方健康检测module

第三方插件的module,例如openresty的lua-resty-upstream-healthcheck

http {lua_package_path "/path/to/lua-resty-upstream-healthcheck/lib/?.lua;;";# sample upstream block:upstream foo.com {server 127.0.0.1:12354;server 127.0.0.1:12355;server 127.0.0.1:12356 backup;}# the size depends on the number of servers in upstream {}: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",  -- defined by "lua_shared_dict"upstream = "foo.com", -- defined by "upstream"type = "http", -- support "http" and "https"http_req = "GET /status HTTP/1.0\r\nHost: foo.com\r\n\r\n",-- raw HTTP request for checkingport = nil,  -- the check port, it can be different than the original backend server port, default means the same as the original backend serverinterval = 2000,  -- run the check cycle every 2 sectimeout = 1000,   -- 1 sec is the timeout for network operationsfall = 3,  -- # of successive failures before turning a peer downrise = 2,  -- # of successive successes before turning a peer upvalid_statuses = {200, 302},  -- a list valid HTTP status codeconcurrency = 10,  -- concurrency level for test requests-- ssl_verify = true, -- https type only, verify ssl certificate or not, default true-- host = foo.com, -- https type only, host name in ssl handshake, default nil}if not ok thenngx.log(ngx.ERR, "failed to spawn health checker: ", err)returnend-- Just call hc.spawn_checker() for more times here if you have-- more upstream groups to monitor. One call for one upstream group.-- They can all share the same shm zone without conflicts but they-- need a bigger shm zone for obvious reasons.}server {...# status page for all the peers:location = /status {access_log off;allow 127.0.0.1;deny all;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())}}# status page for all the peers (prometheus format):location = /metrics {access_log off;default_type text/plain;content_by_lua_block {local hc = require "resty.upstream.healthcheck"st , err = hc.prometheus_status_page()if not st thenngx.say(err)returnendngx.print(st)}}}
}
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"nginx upstream健康检测":http://eshow365.cn/6-36089-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!