一、项目上用的Nginx做的负载均衡,但创造有时候做事已经去世掉或者不供应做事,进程还在,比如内存溢出(OOM)的时候,便是这个征象,但Nginx是通过IP:port来负载的,这个时候,如果连续往已经挂掉的做事分配负载,就会涌现做事不能访问的缺点,以是,我们得根据做事的状态来判断,不能根据ip:port的形式,要实现这个功能,须要用到Nginx第三方模块nginx_upstream_check_module,解压后如下

解压后进行编译安装:

280 2021-12-01 12:22:47 cd nginx-1.14.0/283 2021-12-01 12:23:21 patch -p1 < /cmp/soft/nginx_upstream/nginx_upstream_check_module-master/check_1.14.0+.patch284 2021-12-01 12:23:43 /cmp/nginx/sbin/nginx -V286 2021-12-01 12:24:32 ./configure --prefix=/cmp/nginx --user=cmspvbs --group=cmspvbs --with-http_realip_module --with-http_stub_status_module 287 2021-12-01 12:24:52 ./configure --add-module=/path/to/nginx_http_upstream_check_module288 2021-12-01 12:26:06 ./configure --add-module=/cmp/soft/nginx_upstream/nginx_upstream_check_module-master289 2021-12-01 12:26:26 make 290 2021-12-01 12:27:18 make install

二、Nginx配置

http { upstream cmc_booters { # This is cmp simple round-robin server 180.2.32.170:18091; server 180.2.32.171:18091; # This is check options check interval=5000 rise=1 fall=3 timeout=3000 type=http; check_http_send "HEAD /status HTTP/1.1\r\nHOST:127.0.0.1\r\nConnection:keep-alive\r\n\r\n"; } server { location /proxy_status { check_status; access_log on; allow all;} }}- check_status:[html|csv|json],默认html-check_http_send:指定检测的http访问地址,默认/- type:[tcp|http|ssl_hello|mysql|ajp],默认tcp- interval:向后端发送的康健检讨包的间隔,单位(毫秒)- fall(fall_count): 如果连续失落败次数达到fall_count,做事器就被认为是down。
- rise(rise_count): 如果连续成功次数达到rise_count,做事器就被认为是up。
- timeout: 后端康健要求的超时时间。
- host:本机IP地址。

我在利用的时候是忘却host设置,一贯监测不到做事的状态,网上的教程很多也没有些,需留一下

phpsendhttpstatusNginx依据http层状况健康检讨 AJAX

三、重启Nginx,使配置生效

./sbin/nginx -s reload

Nginx生效后可以通过配置中的/proxy_status查看状态

这个功能非常有用,在实际场景中也常常用到,做事进程存在,但由于各种缘故原由已经不供应做事,通过IP:port这种4层协议是监测不到的,根据http7层协议更准确

如果条友好好,还请给个关注