Openresty 健康检查
Posted eedc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Openresty 健康检查相关的知识,希望对你有一定的参考价值。
## 指定共享内存 lua_shared_dict healthcheck 1m; ## 在worker初始化过程中,启动定时器,进行后端结点的检查 init_worker_by_lua_block { local hc = require "resty.upstream.healthcheck" local ok, err = hc.spawn_checker { -- shm 表示共享内存区的名称, shm = "healthcheck", -- type 表示健康检查的类型, HTTP or TCP (目前只支持http) type = "http", -- upstream 指定 upstream 配置的名称 upstream = "api.cargolist.xihuishou.bsdd.me", -- 如果是http类型,指定健康检查发送的请求的URL http_req = "GET /health.txt HTTP/1.0 Host: api.cargolist.xihuishou.bsdd.me ", -- 请求间隔时间,默认是 1 秒。最小值为 2毫秒 interval = 2000, -- 请求的超时时间。 默认值为:1000 毫秒 timeout = 5000, -- 失败多少次后,将节点标记为down。 默认值为 5 fall = 3, -- 成功多少次后,将节点标记为up。默认值为 2 rise = 2, -- 返回的http状态码,表示应用正常 valid_statuses = {200, 302}, -- 并发度, 默认值为 1 concurrency = 1, } if not ok then ngx.log(ngx.ERR, "=======> failed to spawn health checker: ", err) return end } # 配置监控检查访问页面 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()) } }
配置参数解释
hc.spawn_checker(options)
options中包含如下选项,在调用该接口时作为参数传递进来
type 必须存在并且是http,目前只支持http
http_req 必须存在,健康探测的http请求raw字符串
timeout 默认1000,单位ms
interval 健康探测的时间间隔,单位ms, 默认1000,推荐2000
valid_status 合法响应码的表,比如{200, 302}
concurrency 并发数,默认1
fall 默认5,对UP的设备,连续fall次失败,认定为DOWN
rise 默认2,对DOWN的设备,连续rise次成功,认定为UP
shm 必须配置,用于健康检查的共享内存名称,通过ngx.shared[shm]得到共享内存
upstream 指定要做健康检查的upstream组名,必须存在
version 默认0
primary_peers 主组
backup_peers 备组
statuses 存放合法响应码的数组,来自ipairs()得到的valid_status配置项
根据options会构造一个ctx表来存放所有的配置数据,并会作为定时器ngx.timer.at()中的第三个参数
ctx的内容如下
upstream 指定的upstream组名
primary_peers 主组
backup_peers 备组
http_req 健康检查的raw http请求
timeout 超时时间,单位s,注意不是ms
interval 健康检查的间隔,单位s,注意不是ms
dict 存放统计数据的共享内存
fall 认为DOWN之前的连续失败次数,默认5
rise 认为UP之前的连续成功次数,默认2
statuses 认为正常的http状态码的表{200,302}
version 0 每次执行定时任务时的版本号,有peer状态改变,版本号加1
concurrency 创建该数目的轻量线程来并发发送健康检测请求的个数
上面的这些配置项,将作为一个上下文保存下来,在不同的阶段被反复调用
以上是关于Openresty 健康检查的主要内容,如果未能解决你的问题,请参考以下文章