微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Lua-Resty-Checkups 基于Lua的upstream管理和健康检查模块

程序名称:Lua-Resty-Checkups

授权协议: BSD

操作系统: 跨平台

开发语言: Lua

Lua-Resty-Checkups 介绍

@H_502_1@

Lua-Resty-Checkups是一个基于lua的upstream管理和健康检查模块,由又拍云开源。@H_502_1@

特点:@H_502_1@

  • 支持周期性upstream服务管理操作@H_502_1@

  • 支持管理和健康检查@H_502_1@

  • 支持upstream动态更新@H_502_1@

  • 有利于加权轮询或哈希平衡@H_502_1@

  • 支持 Nginx C upstream同步操作@H_502_1@

  • 可使用级别和键值实现集群@H_502_1@

使用简介:@H_502_1@

-- config.lua
_M = {}
_M.global = {
    checkup_timer_interval = 15,
    checkup_shd_sync_enable = true,
    shd_config_timer_interval = 1,
}
_M.ups1 = {
    cluster = {
        {
            servers = {
                {host="127.0.0.1", port=4444, weight=10, max_fails=3, fail_timeout=10},
            }
        },
    },
}


lua_package_path "/path/to/lua-resty-checkups/lib/checkups/?.lua;/path/to/config.lua;;";
lua_shared_dict state 10m;
lua_shared_dict mutex 1m;
lua_shared_dict locks 1m;
lua_shared_dict config 10m;
server {
    listen 12350;
    return 200 12350;
}
server {
    listen 12351;
    return 200 12351;
}
init_worker_by_lua_block {
    local config = require "config"
    local checkups = require "resty.checkups.api"
    checkups.prepare_checker(config)
    checkups.create_checker()
}
server {
    location = /12350 {
        proxy_pass http://127.0.0.1:12350/;
    }
    location = /12351 {
        proxy_pass http://127.0.0.1:12351/;
    }
    location = /t {
        content_by_lua_block {
            local checkups = require "resty.checkups.api"
            local callback = function(host, port)
                local res = ngx.location.capture("/" .. port)
                ngx.say(res.body)
                return 1
            end
            local ok, err
            -- connect to a dead server, no upstream available
            ok, err = checkups.ready_ok("ups1", callback)
            if err then ngx.say(err) end
            -- add server to ups1
            ok, err = checkups.update_upstream("ups1", {
                    {
                        servers = {
                            {host="127.0.0.1", port=12350, weight=10, max_fails=3, fail_timeout=10},
                        }
                    },
                })
            if err then ngx.say(err) end
            ngx.sleep(1)
            ok, err = checkups.ready_ok("ups1", callback)
            if err then ngx.say(err) end
            ok, err = checkups.ready_ok("ups1", callback)
            if err then ngx.say(err) end
            -- add server to new upstream
            ok, err = checkups.update_upstream("ups2", {
                    {
                        servers = {
                            {host="127.0.0.1", port=12351},
                        }
                    },
                })
            if err then ngx.say(err) end
            ngx.sleep(1)
            ok, err = checkups.ready_ok("ups2", callback)
            if err then ngx.say(err) end
            -- add server to ups2, reset rr state
            ok, err = checkups.update_upstream("ups2", {
                    {
                        servers = {
                            {host="127.0.0.1", port=12350, weight=10, max_fails=3, fail_timeout=10},
                            {host="127.0.0.1", port=12351, weight=10, max_fails=3, fail_timeout=10},
                        }
                    },
                })
            if err then ngx.say(err) end
            ngx.sleep(1)
            ok, err = checkups.ready_ok("ups2", callback)
            if err then ngx.say(err) end
            ok, err = checkups.ready_ok("ups2", callback)
            if err then ngx.say(err) end
    }
}

Lua 配置示例:@H_502_1@

_M = {}
-- Here is the global part
_M.global = {
    checkup_timer_interval = 15,
    checkup_timer_overtime = 60,
    default_heartbeat_enable = true,
    checkup_shd_sync_enable = true,
    shd_config_timer_interval = 1,
}
-- The rests parts are cluster configurations
_M.redis = {
    enable = true,
    typ = "redis",
    timeout = 2,
    read_timeout = 15,
    send_timeout = 15,
    protected = true,
    cluster = {
        {   -- level 1
            try = 2,
            servers = {
                { host = "192.168.0.1", port = 6379, weight=10, max_fails=3, fail_timeout=10 },
                { host = "192.168.0.2", port = 6379, weight=10, max_fails=3, fail_timeout=10 },
            }
        },
        {   -- level 2
            servers = {
                { host = "192.168.0.3", port = 6379, weight=10, max_fails=3, fail_timeout=10 },
            }
        },
    },
}
_M.api = {
    enable = false,
    typ = "http",
    http_opts = {
        query = "GET /status HTTP/1.1\r\nHost: localhost\r\n\r\n",
        statuses = {
            [500] = false,
            [502] = false,
            [503] = false,
            [504] = false,
        },
    },
    mode = "hash",
    cluster = {
        dc1 = {
            servers = {
                { host = "192.168.1.1", port = 1234, weight=10, max_fails=3, fail_timeout=10 },
            }
        },
        dc2 = {
            servers = {
                { host = "192.168.1.2", port = 1234, weight=10, max_fails=3, fail_timeout=10 },
            }
        }
    }
}
_M.ups_from_Nginx = {
    timeout = 2,
    cluster = {
        {   -- level 1
            upstream = "api.com",
        },
        {   -- level 2
            upstream = "api.com",
            upstream_only_backup = true,
        },
    },
}
return _M

Lua-Resty-Checkups 官网

https://github.com/upyun/lua-resty-checkups

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐