nginx通过nginx_upstream_check_module实现后端健康检查

1、简介说明

        nginx是常用的反向代理和负载均衡服务,具有强大并发能力、稳定性、丰富的功能集、低资源的消耗。

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

        nginx的健康检查有两种,一种是被动健康检查,也就是nginx自带健康检查模块ngx_http_upstream_module,另一种就是主动健康检查,使用第三方模块nginx_upstream_check_module

nginx被动健康检查的缺点:

  1. nginx只有被访问时,才会发起对后端节点探测。如果本次请求中,节点正好出现故障,nginx依然会将请求转交给故障的节点,然后再转交给健康的节点处理。所以不会影响到这次请求的正常进行。由于多了一次转发,会影响效率。
  2. 无法做到预警。

nginx主动健康检查

  1. 淘宝开发的tengine自带心跳检测模块,若健康检查包类型为http,在开启健康检查功能后,nginx会根据设置的间隔向后端服务器端口发送健康检查包,并根据期望的HTTP状态码来判断服务是否健康。后端节点不可用,则请求不会转发到故障节点。
  2. 故障节点恢复后,请求正常转发

        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 --user=nginx --group=nginx --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 install

2.3 配置案例及效果

# cat conf/conf.d/nginx_upstream_check.conf
upstream cluster{server 192.168.100.210:9091;server 192.168.100.210:9092;check interval=3000 rise=2 fall=2 timeout=3000 type=http;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 interval=milliseconds [fall=count] [rise=count] [timeout=milliseconds] [default_down=true|false] [type=tcp|http|ssl_hello|mysql|ajp] [port=check_port]
  1. interval: 向后端发送的健康检查包的间隔,单位为毫秒
  2. rise: 如果连续成功次数达到rise_count,服务器就被认为是up
  3. fall: 如果连续失败次数达到fall_count,服务器就被认为是down
  4. timeout: 后端健康请求的超时时间,单位为毫秒
  5. type: 健康检查包的类型,支持类型如下:
    1. tcp:简单的tcp连接,如果连接成功,就说明后端正常
    2. ssl_hello:发送一个初始的SSL hello包并接受服务器的SSL hello包
    3. http:发送HTTP请求,通过后端的回复包的状态来判断后端是否存活
    4. mysql: 向mysql服务器连接,通过接收服务器的greeting包来判断后端是否存活
    5. ajp:向后端发送AJP协议的Cping包,通过接收Cpong包来判断后端是否存活
  6. default_down: 设定初始时服务器的状态,如果是true,就说明默认是down的,如果是false,就是up的。默认值是true,也就是一开始服务器认为是不可用,要等健康检查包达到一定成功次数以后才会被认为是健康的
  7. 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 page'sformat. You can do like this:/status?format=html/status?format=csv/status?format=jsonAt present, you can fetch the list of servers with the same status bythe argument of `status`. For example:/status?format=html&status=down/status?format=csv&status=up

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/48504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Langchain大语言模型开发教程】基于文档问答

&#x1f517; LangChain for LLM Application Development - DeepLearning.AI Embedding&#xff1a; https://huggingface.co/BAAI/bge-large-en-v1.5/tree/main 学习目标 1、Embedding and Vector Store 2、RetrievalQA 引包、加载环境变量 import osfrom dotenv import…

Vue中的事件修饰符?

在Vue.js中&#xff0c;事件修饰符提供了一种简洁的方式来处理DOM事件中的常见问题&#xff0c;如阻止事件冒泡、阻止默认行为等。Vue的事件修饰符以.开头&#xff0c;可以串联使用多个修饰符。以下是一些常用的事件修饰符&#xff1a; 1.stop: 阻止事件冒泡。等同于在原生事件…

python多进程库(multiprocessing)

multiprocessing本身是Python的多进程库&#xff0c;用来处理与多进程相关的操作。但是由于进程与进程之间不能直接共享内存和堆栈资源&#xff0c;而且启动新的进程开销也比线程大得多&#xff0c;因此使用多线程来爬取比使用多进程有更多的优势。multiprocessing下面有一个du…

【BUG】已解决:OSError: [Errno 22] Invalid argument

已解决&#xff1a;OSError: [Errno 22] Invalid argument 目录 已解决&#xff1a;OSError: [Errno 22] Invalid argument 【常见模块错误】 错误原因&#xff1a; 解决方法如下&#xff1a; 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&…

240720_图像语义分割中数据集原图与标签对比查漏

240720_图像语义分割中数据集原图与标签对比查漏 核对原图和标签是否一一对应的工作是必要的&#xff0c;不然在训练过程中可能会发生已经训练了好几个epoch了&#xff0c;突然给你报xx.png找不到&#xff0c;然后你去删除掉了对应的jpg&#xff0c;但是在重新运行几个epoch之…

快速认识EA(Enterprise Architecture)

前言 企业架构&#xff0c;英文是&#xff1a;Enterprise Architecture&#xff0c;简称&#xff1a;EA&#xff0c;是承接企业战略规划与IT建设之间的桥梁&#xff0c;是企业信息化的核心&#xff0c;主要包括业务架构和IT架构。 架构的本质是管理和解决系统的复杂性&#x…

06. 截断文本 选择任何链接 :root 和 html 有什么区别

截断文本 对超过一行的文本进行截断,在末尾添加省略号(…)。 使用 overflow: hidden 防止文本超出其尺寸。使用 white-space: nowrap 防止文本超过一行高度。使用 text-overflow: ellipsis 使得如果文本超出其尺寸,将以省略号结尾。为元素指定固定的 width,以确定何时显示省略…

mysql无法启动

总是报错&#xff1a; 1、Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xeu mysql.service" for details. 2、ERROR 2002 (HY000): Cant connect to local …

linux中常见的协议、服务端口整理汇总

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 ​ &#x1f3c5;阿里云ACE认证高级工程师 ​ &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社…

【CF】1216F-WiFi 题解

传送门&#xff1a;1216F 标签&#xff1a;动态规划 题目大意 你是一名宿舍管理员&#xff0c;在一条直走廊上有n 个连续的房间。房间编号从 1 到 n。你需要将所有n 间房连接到互联网。你可以直接将每个房间连接到互联网&#xff0c;第 i 个房间的费用为i 枚硬币。有些房间有…

【机器学习实战】数据增强基础

文章目录 1. 数据增强2. 数据增强技巧torchvision2.1 图像大小调整2.2 图像旋转2.3 图像转换为张量2.4 归一化2.5 图像裁剪2.6 仿射变换2.7 透视变换 3. 自动增强4. Mixup增强 1. 数据增强 什么是数据增强&#xff1f;数据增强是优化数据吗&#xff1f;这种说法并不尽然。首先…

Linux复习01

1. Linux应用场景&#xff1a; 互联网公司的服务器后端智能设备的使用嵌入式... 2.Linux商业化版本 a.商业化版本:&#xff08;ubuntu&#xff0c;红帽&#xff0c;centos&#xff09;内核界面等 b.技术版本&#xff08;Linux的内核源代码&#xff09;2.6 2.7等等 内核版…

【2024德国签证】留学面签问题汇总

在去交材料的时候&#xff0c;可能会被随机安排面试。这些面试问题一般都很简单&#xff0c;主要是测试你的基本英文交流能力。无需担心&#xff0c;签证官不会问太专业的问题&#xff0c;因为他们也不懂专业内容。到目前为止&#xff0c;没有一个博士生因为这个面试被拒签。毕…

Golang | Leetcode Golang题解之第239题滑动窗口最大值

题目&#xff1a; 题解&#xff1a; func maxSlidingWindow(nums []int, k int) []int {n : len(nums)prefixMax : make([]int, n)suffixMax : make([]int, n)for i, v : range nums {if i%k 0 {prefixMax[i] v} else {prefixMax[i] max(prefixMax[i-1], v)}}for i : n - 1…

将github上的项目导入到vscode并创建虚拟环境

1、将github上的项目导入到vscode 直接从github上下载到本地&#xff0c;用vscode打开&#xff08;Open file&#xff09; 2、创建虚拟环境 python -m venv <name> <name>\Scripts\activate ps: 1、退出虚拟环境 deactivate 2、如果运行python -m venv <…

Unity格斗游戏,两个角色之间互相锁定对方,做圆周运动

1&#xff0c;灵感来源 今天手头的工作忙完了&#xff0c;就等着服务器那边完活&#xff0c;于是开始研究同步问题。 正好想到之前想做的&#xff0c;两个小人对线PK&#xff0c;便有了这篇文章。 2&#xff0c;要实现的效果 如图所示&#xff0c;两个小人可以互相锁定&…

CARLA源码编译避坑指南

文章目录 前言一、CARLA官方编译教程二、无法拉取Unreal Engine Carla分支三、无法下载CARLA地图包四、osm2odr安装错误五、bdist_wheel错误六、编译结果 前言 之前也搭建过这个CARLA源码编译环境&#xff0c;很多坑&#xff0c;但是没记录下来&#xff0c;这次再搭建还是一样…

Spring Web MVC(一篇带你了解并入门,附带常用注解)

一&#xff0c;什么是Spring Web MVC 先看一下官网怎么说&#xff1a; 也就是Spring Web MVC一开始就是包含在Spring框架里面的&#xff0c;但通常叫做Spring MVC。 也可以总结出一个信息&#xff0c;这是一个Web框架。后面我就简称为Spring MVC了。 1.1MVC MVC也就是Mode…

防火墙--内容安全

目录 概述 IAE引擎流程 DPI深度包检测 基于特征字的检测技术 基于应用网关的检测技术 基于行为模式的检测技术 DFI深度流检测 基于数据流进行识别检测的技术 DPI和DFI对比 IDS&#xff08;入侵检测&#xff09; IPS&#xff08;入侵防御&#xff09; 优势 入侵检测…

AtCoder Beginner Contest 362

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;彩笔ACMer一枚。 &#x1f3c0;所属专栏&#xff1a;Codeforces 本文用于记录回顾总结本彩笔的解题思路便于加深理解。 比赛题目地址&#xff1a;AtCoder Beginner Contest 362 …