• NGINX 基于nginx_upstream_check_modulemaster 健康检测及平滑升级


    一、ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带)
           严格来说,nginx自带是没有针对负载均衡后端节点的健康检查的,但是可以通过默认自带的ngx_http_proxy_module 模块和ngx_http_upstream_module模块中的相关指令来完成当后端节点出现故障时,自动切换到健康节点来提供访问。

    指定在何种情况下一个失败的请求应该被发送到下一台后端服务器

    error      # 和后端服务器建立连接时,或者向后端服务器发送请求时,或者从后端服务器接收响应头时,出现错误
    timeout    # 和后端服务器建立连接时,或者向后端服务器发送请求时,或者从后端服务器接收响应头时,出现超时
    invalid_header  # 后端服务器返回空响应或者非法响应头
    http_500   # 后端服务器返回的响应状态码为500
    http_502   # 后端服务器返回的响应状态码为502
    http_503   # 后端服务器返回的响应状态码为503
    http_504   # 后端服务器返回的响应状态码为504
    http_404   # 后端服务器返回的响应状态码为404
    off        # 停止将请求发送给下一台后端服务器

    需要理解一点的是,只有在没有向客户端发送任何数据以前,将请求转给下一台后端服务器才是可行的。也就是说,如果在传输响应到客户端时出现错误或者超时,这类错误是不可能恢复的。

    范例如下:

    http {
    proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header;
    }

    ngx_http_upstream_module模块中的server指令

            upstream name {
                    server 10.1.1.110:8080 max_fails=1 fail_timeout=10s;
                    server 10.1.1.122:8080 max_fails=1 fail_timeout=10s;
            }

    参考文档 http://www.iyunv.com/thread-38535-1-1.html

    nginx_upstream_check_module-master 这个就是淘宝技术团队开发的 nginx 模块 ,通过它可以用来检测后端 realserver 的健康状态。如果后端 realserver 不可用,则所以的请求就不会转发到该节点上。

    下载地址  https://codeload.github.com/yaow ... k_module/zip/master

    解压 ZIP包 跟 nginx  

    隐藏版本信息

    sed -i -e 's/1.6.2/2.0/g' -e 's/nginx\//LXS/g' -e 's/"NGINX"/"LXS"/g' src/core/nginx.h 

    给nginx打补丁(根据nginx版本号选择补丁包)

    patch -p1 < ../nginx_upstream_check_module-master/check_1.5.12+.patch 

    编译参数  

    ./configure --user=www --group=www --prefix=/usr/local/nginx1 --with-pcre=/root/pcre-8.40/ --with-http_stub_status_module --with-http_ssl_module --with-openssl=/root/openssl-1.0.2l/ --add-module=../nginx_upstream_check_module-master/

    make

    PCRE openssl路径都是源码包解压路径而不是编译后路径

    平滑升级  

    mv /usr/local/nginx1/sbin/nginx /usr/local//nginx1/sbin/nginx.old  (备份旧版本)

    cp objs/nginx  /usr/local/nginx1/sbin/  (拷贝新版本)

    检测配置文件 

    平滑重启升级nginx
    kill -USR2 `cat /usr/local/nginx1/logs/nginx.pid` 

    多了2个进程 经过一段时间后会生成oldbin

    旧版本Nginx的pid变为oldbin,这是旧版本和新版本的nginx同时运行,过一段时间等就nginx处理完用户请求后,执行下面操作

    从容关闭旧版本的Nginx进程
    kill -WINCH `cat /usr/local/nginx/logs/nginx.pid.oldbin`

    慢慢旧的工作进程就都会随着任务执行完毕而退出,新版的Nginx的工作进程会逐渐取代旧版 工作进程

    决定升级到新版的nginx

    kill -QUIT `cat /usr/local/nginx1/logs/nginx.pid.oldbin` ##关闭旧版nginx 

    之后在nginx.conf配置文件里面的upstream加入健康检查,如下:
    upstream linuxyan {
    server 192.168.10.21:80;
    server 192.168.10.22:80;
    check interval=3000 rise=2 fall=5 timeout=1000;
    }

     interval检测间隔时间,单位为毫秒,rsie请求2次正常的话,标记此realserver的状态为up,fall表示请求5次都失败的情况下,标记此realserver的状态为down,timeout为超时时间,单位为毫秒。
    在server段里面可以加入查看realserver状态的页面
    location /nstatus {
    check_status;
    access_log off;
    #allow SOME.IP.ADD.RESS;
    #deny all;
    }

    生产编译参数

    nginx version: nginx/1.8.0
    built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
    built with OpenSSL 1.0.1e-fips 11 Feb 2013
    TLS SNI support enabled
    configure arguments: --prefix=/opt/oracle/nginx --error-log-path=/opt/log/nginx/logs/error.log --http-log-path=/opt/log/nginx/logs/access.log --pid-path=/opt/log/nginx/logs/nginx.pid --lock-path=/opt/log/nginx/logs/nginx.lock --user=oracle --group=oinstall --http-client-body-temp-path=/opt/oracle/nginx/temp/nginx_clientbody_temp --http-proxy-temp-path=/opt/oracle/nginx/temp/nginx_proxy_temp --http-fastcgi-temp-path=/opt/oracle/nginx/temp/nginx_fcgi_temp --http-uwsgi-temp-path=/opt/oracle/nginx/temp/nginx_wsgi_temp --with-http_ssl_module --with-http_realip_module --with-http_stub_status_module --with-http_sub_module --with-http_gunzip_module --without-http_userid_module --without-http_browser_module --without-http_geo_module --without-http_autoindex_module --without-http_scgi_module --without-http_memcached_module --without-http_auth_basic_module --add-module=../ngx_devel_kit-0.2.19 --add-module=../headers-more-nginx-module-0.261 --add-module=../nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d

    ngx_headers_more 用于添加、设置和清除输入和输出的头信息,该模块是ngx_http_headers_module模块的增强版,提供了更多的实用工具,比如复位或清除内置头信息

    nginx-sticky-module这个第三方模块可以基于cookie实现会话保持

    NDK(nginx development kit)模块是一个拓展nginx服务器核心功能的模块,第三方模块开发可以基于它来快速实现

    车联

    --with-http_ssl_module --with-pcre --with-http_stub_status_module --with-stream --with-openssl=/root/openssl --with-pcre=/root/pcre --with-http_v2_module --with-zlib=/root/zlib

    坚持到无能为力,拼搏到感动自己
  • 相关阅读:
    查看python关键字
    命令终端执行python
    Codeforces-462C. A Twisty Movement
    Codeforces-462A. A Compatible Pair
    Codeforces-446C. Pride
    Codeforces-Hello 2018C. Party Lemonade(贪心)
    Codeforces-33C. Wonderful Randomized Sum
    Codeforces-118D. Caesar's Legions(lazy dynamics)
    codeforces-73C. LionAge II
    Gym 101510C-Computer Science
  • 原文地址:https://www.cnblogs.com/linxizhifeng/p/7075325.html
Copyright © 2020-2023  润新知