23、nginx动态添加nginx_upstream_check_module健康检查模块
nginx_upstream_check_module模块地址:https://github.com/yaoweibin/nginx_upstream_check_module
23.1、说明:
1、nginx自带的针对后端节点健康检查的功能比较简单,通过默认自带的ngx_http_proxy_module模块和ngx_http_upstream_module
模块中的相关指令来完成当后端节点出现故障时,自动切换到健康节点来提供访问。
2、示例:
upstream pools {
server 192.168.3.101:80 weight=1 max_fails=3 fail_timeout=3s;
}
参数说明:
(1)max_fails=<number>:
设定Nginx与服务器通信的尝试失败的次数。在fail_timeout参数定义的时间段内,如果失败的次数达到此值,Nginx就认为服务器不可用。
在下一个fail_timeout时间段,服务器不会再被尝试。失败的尝试次数默认是1。设为0就会停止统计尝试次数,认为服务器是一直可用的。
可以通过指令proxy_next_upstream、fastcgi_next_upstream、memcached_next_upstream来配置什么是失败的尝试。默认配置时,
http_404状态不被认为是失败的尝试。
(2)fail_timeout=<time>:
设定服务器被认为不可用的时间段以及统计失败尝试次数的时间段。在这段时间中,服务器失败次数达到指定的尝试次数,服务器就被认为
不可用。默认情况下,该超时时间是10秒。
3、小结:
以上可以得出Nginx无法主动识别后端节点状态,后端即使有不健康节点,负载均衡器依然会先把该请求转发给该不健康节点,然后再转发
给别的节点,这样就会浪费一次转发,而且自带模块无法做到预警。因此需要使用第三方模块nginx_upstream_check_module。
nginx_upstream_check_module模块由淘宝团队开发,淘宝自己的tengine上是自带了该模块的,可以访问淘宝http://tengine.taobao.org/
官网来获取该版本的nginx。我使用的是原生Nginx,采用添加模块的方式。
23.2、添加模块流程:
1、下载第三方扩展模块nginx_upstream_check_module:
[root@slave-node1 ~]# cd /tools/
[root@slave-node1 tools]# wget https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master
[root@slave-node1 tools]# unzip master 1>/dev/null
[root@slave-node1 tools]# ls -ld nginx_upstream_check_module-master
2、查看nginx编译安装时安装了哪些模块:
[root@slave-node1 tools]# /application/nginx/sbin/nginx -V
nginx version: nginx/1.16.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --prefix=/application/nginx-1.16.0
3、重新编译nginx,加入需要安装的模块:
(1)进入到nginx之前源码编译安装的目录(如果之前源码编译的目录被清除,可以重新解压一个源码包即可):
[root@slave-node1 tools]# cd nginx-1.16.0/
(2)为nginx打补丁:
[root@slave-node1 nginx-1.16.0]# patch -p0 < /tools/nginx_upstream_check_module-master/check_1.11.5+.patch
#check版本对nginx的版本有要求,1.12以上版本的nginx补丁为check_1.11.5+.patch。-p0:当前路径,-p1:上一级路径。
(3)添加模块(--add-module=/tools/nginx_upstream_check_module-master):
[root@slave-node1 nginx-1.16.0]# ./configure --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --prefix=/application/nginx-1.16.0 --add-module=/tools/nginx_upstream_check_module-master
[root@slave-node1 nginx-1.16.0]# make
#注意:make后千万不要make install,因为只是编译,不安装,否则会覆盖掉线上的配置。
(4)检查模块是否被添加成功:
[root@slave-node1 nginx-1.16.0]# objs/nginx -V
注意:以后该模块目录是不能删除的,否则会因为找不到模块目录会出错。
4、替换线上nginx二进制文件:
(1)停止nginx服务:
[root@slave-node1 nginx-1.16.0]# cd ~
[root@slave-node1 ~]# /application/nginx/sbin/nginx -s stop
(2)备份线上nginx二进制文件:
[root@slave-node1 ~]# mv /application/nginx/sbin/nginx{,.bak}
(3)复制:
[root@slave-node1 ~]# cp -a /tools/nginx-1.16.0/objs/nginx /application/nginx/sbin/
(4)再次验证模块是否添加成功:
[root@slave-node1 ~]# /application/nginx/sbin/nginx -V
#至此,nginx的nginx_upstream_check_module健康检查模动态安装安装完成。
23.3、修改upstream反向代理池,让nginx_upstream_check_module模块生效:
这里以tomcat8080/8081实例负载均衡为例。
1、启动tomcat8080/8081实例:
[root@slave-node1 ~]# for n in {0..1};do su - tomcat /application/tomcat-808$n/bin/startup.sh;sleep 10s;done
2、创建 tomcat-upstream.conf 文件:
[root@slave-node1 ~]# vim /application/nginx/conf/conf.d/tomcat-upstream.conf
upstream tomcat_pools {
ip_hash;
server 172.16.1.91:8080 weight=1 max_fails=3 fail_timeout=3s;
server 172.16.1.91:8081 weight=1 max_fails=3 fail_timeout=3s;
check interval=2000 rise=3 fall=2 timeout=1000 type=http;
#对tomcat_pools这个负载均衡池中的所有节点,每个2秒检测一次,
#请求3次正常则标记realserver状态为up,如果检测2次都失败,则
#标记realserver的状态为down,后端健康请求的超时时间为1s,健
#康检查包的类型为http请求。
check_http_send "HEAD / HTTP/1.0\r\n\r\n";
#通过http HEAD消息头检测realserver的健康
check_http_expect_alive http_2xx http_3xx;
#该指令指定HTTP回复的成功状态,默认为2XX和3XX的状态是健康的
}
server {
listen 0.0.0.0:80;
server_name localhost;
access_log logs/tomcat-access.log main;
error_log logs/tomcat-error.log warn;
location / {
proxy_pass http://tomcat_pools;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /nstatus {
#状态页配置
check_status;
access_log off;
allow 172.16.1.254;
#允许可以连接的远端ip地址
deny all;
#限制所有远端ip的连接
}
}
健康检查参数说明:
interval:向后端发送的健康检查包的间隔。
fall(fall_count):如果连续失败次数达到fall_count,服务器就被认为是down。
rise(rise_count):如果连续成功次数达到rise_count,服务器就被认为是up。
timeout:后端健康请求的超时时间。
default_down:设定初始时服务器的状态,如果是true,就说明默认是down的,如果是false,就是up的。
默认值是true,也就是一开始服务器认为是不可用,要等健康检查包达到一定成功次数以后才会被认为是健康的。
type:健康检查包的类型,现在支持以下多种类型:
tcp:简单的tcp连接,如果连接成功,就说明后端正常。
ssl_hello:发送一个初始的SSL hello包并接受服务器的SSL hello包。
http:发送HTTP请求,通过后端的回复包的状态来判断后端是否存活。
mysql:向mysql服务器连接,通过接收服务器的greeting包来判断后端是否存活。
ajp:向后端发送AJP协议的Cping包,通过接收Cpong包来判断后端是否存活。
port:指定后端服务器的检查端口。你可以指定不同于真实服务的后端服务器的端口,比如后端提供的是443端
口的应用,你可以去检查80端口的状态来判断后端健康状况。默认是0,表示跟后端server提供真实服务的端口一
样。该选项出现于Tengine-1.4.0。
3、检测nginx配置文件:
[root@slave-node1 ~]# /application/nginx/sbin/nginx -t
4、启动nginx负载均衡:
[root@slave-node1 ~]# /application/nginx/sbin/nginx
5、访问网站:
6、通过web界面查看负载均衡下realserver的健康状态:
(1)访问http://172.16.1.91/nstatus监控界面:
(2)down掉tomcat8080实例:
23、nginx动态添加nginx_upstream_check_module健康检查模块的更多相关文章
- consul集群搭建,配合nginx完成服务动态发现和健康检查
1.概述 1.1 介绍 consul是一个服务发现和配置共享的服务软件,结合nginx的主动健康检查模块nginx_upstream_check_module和服务发现模块nginx-upsync-m ...
- nginx健康检查模块源码分析
nginx健康检查模块 本文所说的nginx健康检查模块是指nginx_upstream_check_module模块.nginx_upstream_check_module模块是Taobao定制的用 ...
- Nginx动态添加模块 平滑升级
已经安装好的Nginx动态添加模块 说明: 已经安装好的Nginx,需要添加一个未被编译安装的模块,需要怎么弄呢? 这里已安装第三方nginx-rtmp-module模块为例 nginx的模块是需要重 ...
- 【Nginx】如何为已安装的Nginx动态添加模块?看完我懂了!!
写在前面 很多时候,我们根据当时的项目情况和业务需求安装完Nginx后,后续随着业务的发展,往往会给安装好的Nginx添加其他的功能模块.在为Nginx添加功能模块时,要求Nginx不停机.这就涉及到 ...
- 十三、给已安装的nginx动态添加模块
给已安装的nginx动态添加模块说明:已经安装好的nginx,需要添加一个未被编译安装的模块,需要怎么弄呢?具体:这里以安装 --with-http_ssl_module模块为例nginx的模块是需要 ...
- Tengine新增健康检查模块
总结 2.tengine的状态监控 Tengine的状态监控有两种 这里演示一个健康检查模块功能 配置一个status的location location /status { check_status ...
- 新安装和已安装nginx如何添加未编译安装模块/补丁
新安装和已安装nginx如何添加未编译安装模块/补丁 --http://www.apelearn.com/bbs/forum.php?mod=viewthread&tid=10485& ...
- nginx高性能WEB服务器系列之六--nginx负载均衡配置+健康检查
nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...
- Nginx健康检查模块
在本小节我们介绍一个用于Nginx对后端UpStream集群节点健康状态检查的第三方模块:nginx_upstream_check_module(https://github.com/yaoweibi ...
随机推荐
- [设计模式] 设计模式课程(十二)-- 门面模式(Facade)
概述 也称外观模式 按目的属于结构型模式,按封装属于接口隔离模式 在组件构建过程中,某些接口之间的依赖常常会带来很多问题.甚至根本无法实现.采用添加一层间接(稳定)接口,来隔离本来互相紧密关联的接口 ...
- 【转载】linux-查询rpm包相关安装、卸载脚本
测试过程中,有时要测试开发自己打的rpm包,为了确认打包正确,需要查询rpm包相关安装.卸载脚本,可以使用命令: [root@6 /]#rpm -q --scripts mysql pos ...
- shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件中,进行处理业务逻辑,脚本不用编译即可运行。它通过解释器解释运行,所以速度相对来说比较慢。
shell脚本?在说什么是shell脚本之前,先说说什么是shell. shell是外壳的意思,就是操作系统的外壳.我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就包 ...
- nginx 的常用模块
nginx的常用模块 ngx_http_index_module Syntax: index file ...; Default: index index.html; Context: http, s ...
- 012.Kubernetes的configmap和secret配置
使用configmap对多有的配置文件进行统一管理 一 configmap配置管理 1.1 检查mysql的配置 [root@docker-server1 storage]# kubectl get ...
- linux系统的负载详解
系统的平均负载 如何理解平均负载 单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数. 平均负载多少合理 核心数 平均负载 含义 4 2 有50%的cpu是空闲状态,见 ...
- 3.23 vi/vim:纯文本编辑器
vi/vim 是Linux命令行界面下的文字编辑器,几乎所有的Linux系统都安装了vi,只要学会了vi这个编辑工具,就可以在任何Linux系统上使用它.而vim是vi命令的增强版(Vi IMprov ...
- 面试官问:ZooKeeper 有几种节点类型?别再说 4 种啦!
本文作者:HelloGitHub-老荀 好久没更新 ZK 的文章了,我想死你们啦.之前发布的 HelloZooKeeper 系列文章完结后,项目收获了将近 600 个 star.这远远超过了我自己的预 ...
- week-02
week-02 1.挂载一个lvm,截图给出结果 这个是之前写的,前段时间放到CSDN了 https://blog.csdn.net/weixin_43841942/article/details/1 ...
- 201871030139-于泽浩 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
201871030139-于泽浩 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 2018级卓越班 这个作业要求链接 软件工程结对项目 ...