用家用路由器ip做网站,wordpress邮箱发文,微信客户管理系统平台官网,手机网站建设专业服务公司1、简介说明 nginx是常用的反向代理和负载均衡服务#xff0c;具有强大并发能力、稳定性、丰富的功能集、低资源的消耗。 nginx自身是没有针对后端节点健康检查的#xff0c;但是可以通过默认自带的ngx_http_proxy_module 模块和ngx_http_upstream_module模块中的相关指令来完…1、简介说明 nginx是常用的反向代理和负载均衡服务具有强大并发能力、稳定性、丰富的功能集、低资源的消耗。 nginx自身是没有针对后端节点健康检查的但是可以通过默认自带的ngx_http_proxy_module 模块和ngx_http_upstream_module模块中的相关指令来完成当后端节点出现故障时自动切换到健康节点来提供访问。 nginx的健康检查有两种一种是被动健康检查也就是nginx自带健康检查模块ngx_http_upstream_module另一种就是主动健康检查使用第三方模块nginx_upstream_check_module。
nginx被动健康检查的缺点:
nginx只有被访问时才会发起对后端节点探测。如果本次请求中节点正好出现故障nginx依然会将请求转交给故障的节点然后再转交给健康的节点处理。所以不会影响到这次请求的正常进行。由于多了一次转发会影响效率。无法做到预警。
nginx主动健康检查
淘宝开发的tengine自带心跳检测模块若健康检查包类型为http在开启健康检查功能后nginx会根据设置的间隔向后端服务器端口发送健康检查包并根据期望的HTTP状态码来判断服务是否健康。后端节点不可用则请求不会转发到故障节点。故障节点恢复后请求正常转发 nginx_upstream_check_module是一个专门提供负载均衡器内节点的健康检查的这个是淘宝技术团队开发的 nginx 模块 通过它可以用来检测后端 realserver 的健康状态。如果后端 realserver 不可用则所以的请求就不会转发到该节点上。 淘宝的 tengine 自带了该模块官方地址http://tengine.taobao.org。如果是 nginx可以通过补丁的方式来添加该模块到 nginx 中https://github.com/yaoweibin/nginx_upstream_check_module。
2、安装配置
2.1 下载nginx 和 nginx_upstream_check_module
# cd /usr/local/src
# wget https://nginx.org/download/nginx-1.20.2.tar.gz
# tar zxf nginx-1.20.2.tar.gz
# git clone https://github.com/yaoweibin/nginx_upstream_check_module.git
# ls -l
total 1044
drwxr-xr-x 8 1001 1001 158 Nov 16 2021 nginx-1.20.2
-rw-r--r-- 1 root root 1062124 Nov 16 2021 nginx-1.20.2.tar.gz
drwxr-xr-x 7 root root 4096 Jul 20 23:50 nginx_upstream_check_module
2.2 为nginx打补丁并编译安装
# cd nginx-1.20.2
# patch -p1 /usr/local/src/nginx_upstream_check_module/check_1.20.1.patch
patching file src/http/modules/ngx_http_upstream_hash_module.c
patching file src/http/modules/ngx_http_upstream_ip_hash_module.c
patching file src/http/modules/ngx_http_upstream_least_conn_module.c
patching file src/http/ngx_http_upstream_round_robin.c
patching file src/http/ngx_http_upstream_round_robin.h# ./configure --prefix/usr/local/nginx --usernginx --groupnginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_geoip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-pcre --with-pcre-jit --with-stream_geoip_module --add-module/usr/local/src/nginx_upstream_check_module
# make make install2.3 配置案例及效果
# cat conf/conf.d/nginx_upstream_check.conf
upstream cluster{server 192.168.100.210:9091;server 192.168.100.210:9092;check interval3000 rise2 fall2 timeout3000 typehttp;check_http_send GET /ops/v1/check HTTP/1.0\r\n\r\n ;check_http_expect_alive http_2xx http_3xx;
}server {listen 8888;server_name localhost;#charset koi8-r;access_log logs/nginx_upstream_check.log main;location / {root html;index index.html;}location ^~ /nginxServer/ {proxy_pass http://cluster/;proxy_set_header Host qyapi.weixin.qq.com;proxy_set_header X-Forwarded-Proto https;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass_request_body on;proxy_set_header Cookie $http_cookie;real_ip_header X-Real-IP;}location /nginx_status {check_status;access_log off;}
}2.4 语法及指令介绍
check intervalmilliseconds [fallcount] [risecount] [timeoutmilliseconds] [default_downtrue|false] [typetcp|http|ssl_hello|mysql|ajp] [portcheck_port]
interval: 向后端发送的健康检查包的间隔单位为毫秒rise: 如果连续成功次数达到rise_count服务器就被认为是upfall: 如果连续失败次数达到fall_count服务器就被认为是downtimeout: 后端健康请求的超时时间单位为毫秒type: 健康检查包的类型支持类型如下 tcp简单的tcp连接如果连接成功就说明后端正常ssl_hello发送一个初始的SSL hello包并接受服务器的SSL hello包http发送HTTP请求通过后端的回复包的状态来判断后端是否存活mysql: 向mysql服务器连接通过接收服务器的greeting包来判断后端是否存活ajp向后端发送AJP协议的Cping包通过接收Cpong包来判断后端是否存活default_down: 设定初始时服务器的状态如果是true就说明默认是down的如果是false就是up的。默认值是true也就是一开始服务器认为是不可用要等健康检查包达到一定成功次数以后才会被认为是健康的port: 指定后端服务器的检查端口。你可以指定不同于真实服务的后端服务器的端口比如后端提供的是443端口的应用你可以去检查80端口的状态来判断后端健康状况。默认是0表示跟后端server提供真实服务的端口一样
2.5 check_http_send功能 用法check_http_send GET / HTTP/1.0\r\n\r\n 默认值 GET / HTTP/1.0\r\n\r\n 位置upstream块 说明http://ip:port/做健康检测 2.6 监控 You can specify the default display format. The formats can be html,csv or json. The default type is html. It also supports to specifythe format by the request argument. Suppose your check_status locationis /status, the argument of format can change the display pagesformat. You can do like this:/status?formathtml/status?formatcsv/status?formatjsonAt present, you can fetch the list of servers with the same status bythe argument of status. For example:/status?formathtmlstatusdown/status?formatcsvstatusup