Nginx upstream_check_module模块实现后端节点健康检查功能

摘要

淘宝技术团队开发的nginx模快nginx_upstream_check_module来检测后服务的健康状态,如果后端服务器不可用,则所以的请求不转发到这台服务器。

Nginx upstream_check_module模块实现后端节点健康检查功能

Nginx
Date:2019年01月09日00:40:41


nginx自带是没有针对负载均衡后端节点的健康检查的,但是可以通过默认自带的ngx_http_proxy_module模块和ngx_http_upstream_module模块中的相关指令来完成当后端节点出现故障时,自动切换到健康节点来提供访问,但是还会有请求转发到后端的这台后端节点上面去

ngx_http_upstream_module是淘宝技术团队开发的nginx模快nginx_upstream_check_module来检测后方服务的健康状态,如果后端服务器不可用,则所有的请求不转发到这台服务器
github项目地址:https://github.com/yaoweibin/nginx_upstream_check_module/

我们常见的nginx状态模块,状态比较少
关于监控相关文章可以阅读 监控体系

  1. Active connections: 当前活跃的连接数
  2. 12----> 一共处理了多少个链接(请求)
  3. 12----> 成功创建多少次握手
  4. 15--> 总共创建了多少个请求
  5. Reading:当前读取客户端heardr的数量
  6. Writing:当前返回给客户端heardr的数量  #如果这个指标飙升,说明是后面的节点挂掉了,例如数据库等。
  7. Waiting:大体意思是已经处理完,等待下次请求的数量
  8. 提示:我们只需要关注活动链接即可
  9. 参考地址:https://www.i4t.com/1376.html

image_1d0n46s87d8mer1f5k152716mq1b.png-56.6kB
upstream_check_module模块展示如下
image_1d0n4300hl9p10jtlp811ol9re9.png-106.3kB
宕机状态如下
C416F01F-6FCE-47F6-BB59-5DBE76F23BDD.png-197.1kB

  1. Inde 项目排序
  2. Upstream upstream名称
  3. Name 后端地址
  4. Status 状态地址 (正常为up|异常为down)
  5. Fall counts down机时间 (以秒为单位)
  6. Check type 监控类型 (默认tcp)
  7. 具体参数可以查看官方文档https://github.com/yaoweibin/nginx_upstream_check_module

Nginx 编译模块安装
1.安装依赖

  1. yum install -y gcc glibc gcc-c++ prce-devel openssl-devel pcre-devel lua-devel libxml2 libxml2-dev libxslt-devel perl-ExtUtils-Embed GeoIP GeoIP-devel GeoIP-data

2.下载软件包

  1. useradd -s /sbin/nologin nginx -M
  2. wget http://nginx.org/download/nginx-1.14.2.tar.gz
  3. tar xf nginx-1.14.2.tar.gz

3.下载nginx模块

  1. wget https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master
  2. unzip master

image_1d0n2ksb71d6mkuf5901qme116113.png-106.3kB
4.nginx打补丁

  1. yum install -y patch
  2. cd nginx-1.14.2
  3. patch -p1 < ../nginx_upstream_check_module-master/check_1.14.0+.patch
  4. #因为我们nginx的版本是1.14补丁就选择1.14的,p1代表在nginx目录,p0是不在nginx目录

image_1d0n30cvq1sk51mkv1srn1adk1b601g.png-115.5kB

5.编译Nginx

  1. ./configure --prefix=/usr/local/nginx-1.14 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --add-module=/root/nginx_upstream_check_module-master
  2. make && make install
  3. ln -s /usr/local/nginx-1.14 /usr/local/nginx
  4. 启动测试
  5. /usr/local/nginx/sbin/nginx
  6. [root@yzsjhl82-118 ~]# lsof -i:80
  7. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  8. nginx 6731 root 6u IPv4 44182 0t0 TCP *:http (LISTEN)
  9. nginx 6732 nginx 6u IPv4 44182 0t0 TCP *:http (LISTEN)

6.配置模块
首先需要有一个代理后端的upstream,在配置一个健康检查
监控需要配置在server标签下

  1. [root@yzsjhl82-118 conf]# cat nginx.conf
  2. worker_processes 1;
  3. events {
  4. worker_connections 1024;
  5. }
  6. http {
  7. include mime.types;
  8. default_type application/octet-stream;
  9. sendfile on;
  10. keepalive_timeout 65;
  11. upstream i4t.com {
  12. server 10.4.81.41:900;
  13. server 10.4.81.42:900;
  14. check interval=3000 rise=2 fall=5 timeout=1000 type=tcp;
  15. }
  16. server {
  17. listen 80;
  18. server_name localhost;
  19. location / {
  20. proxy_pass http://i4t.com;
  21. }
  22. location /status1 {
  23. stub_status on; #配置nginx内置健康检查
  24. access_log off;
  25. }
  26. location /status2 { #配置upstream_check_module模块健康检查
  27. check_status;
  28. access_log off;
  29. #allow SOME.IP.ADD.RESS; #可以设置允许网段访问
  30. #deny all;
  31. }
  32. }
  33. }
  34. 修改完配置文件,reload即可
  35. /usr/local/nginx/sbin/nginx -t
  36. /usr/local/nginx/sbin/nginx -s reload

配置文件参数解释

  1. check interval=3000 rise=2 fall=5 timeout=1000 type=tcp;
  2. interval检测间隔时间,单位为毫秒
  3. rsie请求2次正常的话,标记此后端的状态为up
  4. type 类型为tcp
  5. fall表示请求5次都失败的情况下,标记此后端的状态为down
  6. timeout为超时时间,单位为毫秒


    A+
发布日期:2019年01月09日  所属分类:NGINX
标签:
新闻联播老司机

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:2   其中:访客  2   博主  0

  1. avatar 我是你二大爷 0
    笔者可以结合 proxy_next_upstream模块,在后端节点超时的时候客户端不会超时。 并且可以使用nginx + consul + nginx-upsync-module 的方式动态调整upstream,降低上线的影响
    • avatar 新闻联播老司机 3
      下午我研究研究