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 健康检查的主要内容,如果未能解决你的问题,请参考以下文章

详解nginx的原生被动健康检查机制&灾备使用(含测试)

降级健康检查的 HTTP 状态码应该是啥?

SofaBoot--健康检查

如何修复弹性beantalk实例上的“使用这些代码失败的健康检查:”?

keepalive高可用的健康检查

Systemd http 健康检查