• nginx upstream健康检测


    自带健康检测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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    第三方健康检测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 checking
    
                port = nil,  -- the check port, it can be different than the original backend server port, default means the same as the original backend server
                interval = 2000,  -- run the check cycle every 2 sec
                timeout = 1000,   -- 1 sec is the timeout for network operations
                fall = 3,  -- # of successive failures before turning a peer down
                rise = 2,  -- # of successive successes before turning a peer up
                valid_statuses = {200, 302},  -- a list valid HTTP status code
                concurrency = 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 then
                ngx.log(ngx.ERR, "failed to spawn health checker: ", err)
                return
            end
    
            -- 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 then
                        ngx.say(err)
                        return
                    end
                    ngx.print(st)
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
  • 相关阅读:
    Apple Watch无法开机怎么办?苹果手表不能开机解决方法!
    腾讯云4核8G服务器配置价格表,轻量和CVM标准型S5实例
    OpenGL笔记五之VBO与VAO
    【代码管理】Git删除仓库中的大文件压缩仓库大小
    mac电脑版数字图像处理软件:ACDSee Photo Studio 9最新 for Mac
    什么是重绘和回流(重排)?什么情况下会用到?如何减少
    神经网络与深度学习笔记(1)——实践基础
    万界星空科技电机行业MES+商业电机行业开源MES+项目合作
    Kubernetes带你从头到尾捋一遍
    花粉状二氧化硅纳米球 Pollen silica nanospheres的产品规格描述
  • 原文地址:https://blog.csdn.net/weixin_38251332/article/details/134300189