Openresty 健康检查

时间:2019-11-06
本文章向大家介绍Openresty 健康检查,主要包括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\r\nHost: api.cargolist.xihuishou.bsdd.me\r\n\r\n",
           -- 请求间隔时间,默认是 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    创建该数目的轻量线程来并发发送健康检测请求的个数

上面的这些配置项,将作为一个上下文保存下来,在不同的阶段被反复调用

 

原文地址:https://www.cnblogs.com/eedc/p/11804186.html