OpenResty Edge 提供了网关服务器自身健康状态的自动检查功能——检查对象是负载均衡节点本身,而不是上游后端。每个节点按可配置的间隔接受 HTTP 探测;一旦检查失败,该节点会被自动从 DNS 解析和 SSL 会话分布式缓存中移除,恢复后自动回到解析池。这一摘除发生在 DNS 层,与全局流量调度(GSLB)的调度决策工作在同一层面。

创建一个新的页面规则

OpenResty Edge Admin 控制台入口页面

打开 OpenResty Edge 的 Admin Web 控制台。这是我们的控制台的样例部署。每个用户都有自己的本地部署。

OpenResty Edge Admin 控制台的网关集群页面

首先,进入 “Applications” 页面。

OpenResty Edge Admin 控制台中的 Applications 页面

我们提前准备了一个名为 “test-edge.com” 的应用。

OpenResty Edge 控制台中的 HTTP/HTTPS 应用列表

点击配置此应用。

test-edge.com 应用的配置入口按钮

进入 “Page Rules” 页面。

test-edge.com 应用的设置页面,侧栏中 Page Rules 高亮

在这里,我们可以添加一条新规则。

Page Rules 页面上的新建规则按钮

对于这条页面规则,我们需要指定一个条件。

新建规则对话框中的 “Enable when” 条件开关

输入 “/status” 作为字符串的值。

页面规则条件编辑器,变量为 URI、运算符为 Prefix matches

添加一个新动作。

页面规则编辑器中的添加动作面板

选择 “output response body”。

列出可选页面规则动作的动作类型下拉框

将响应体设为 “healthy”。当请求的 URI 为 “/status” 时,输出响应体为 “healthy”。

将 /status 请求的响应体设置为 healthy

点击 “Create” 按钮创建这条规则后,我们需要发布来推送这个新改动。

OpenResty Edge 中待发布的配置变更

点击这个按钮。

发布页面上高亮的 “Release the 1 pending change” 按钮

发布!

发布确认对话框及 Release 按钮

改动现在已经同步到所有的网关服务器。

新发布已同步到所有网关服务器

开启健康检查

让我们再次进入网关集群页面。

发布页面,顶部导航中 Gateway Clusters 标签高亮

这是我们今天要使用的集群。

准备开启健康检查的网关集群

点击复制 IP 地址。

复制网关服务器 IP 地址的按钮

在终端上,我们使用 curl 命令向网关服务器发送请求。

用 curl 请求网关服务器的 /status 健康检查端点

可以看到响应体正是 “healthy”。

curl 输出显示响应体为 healthy

点击更改该群集的配置,然后启用健康检查。

网关集群设置中的健康检查选项,当前选中 “Using the Partition configuration”

我们使用 HTTP 协议。

网关健康检查设置中的协议下拉框,当前为 TCP,准备切换为 HTTP

将 HTTP 请求主机设置为我们的应用名称。

HTTP 请求主机设置为应用名 test-edge.com

输入 “/status” 作为请求 URI。

健康检查请求 URI 设置为 /status

要求响应体匹配为 “healthy”。

健康检查要求响应体匹配 healthy

为了快速演示,我们将请求间隔调短为 3 秒。

健康检查请求间隔设置为 3 秒

最后,保存这些设置。

测试结果

切换到终端。先停止服务器。

在终端中停止网关服务器服务

服务已停止运行。

systemctl 状态显示网关服务已停止

刷新列表后,可以看到该节点当前显示为红色,这表示它处于离线状态。该节点的 IP 将从 DNS 解析、SSL 会话 ID 的分布式缓存中删除。这就是 DNS 层面的自动故障转移(DNS failover):新的客户端不会再被解析到故障节点。相关的调度决策可参考 OpenResty Edge 的 GSLB 配置

健康检查失败的网关节点显示为红色并从 DNS 解析中移除

点击查看 “Details”。

离线网关节点的 Details 详情入口

点击红色区域,可以看到故障的详细信息。

点击红色状态块打开健康检查失败详情

显示网关健康检查失败原因的错误信息

关闭详情后,重新启动我们的网关服务器。

在终端中重新启动网关服务器服务

服务器恢复正常了。

systemctl 状态显示网关服务已恢复运行

再次刷新列表。节点状态已经变回绿色。

恢复后的网关节点在列表中显示为绿色

此外,我们还可以对特定分区中的所有网关群集和服务器启用健康检查。

网关集群页面,侧栏中 Gateway Partitions 链接高亮

点击编辑此分区。

编辑网关分区的按钮

可以通过这个按钮启用健康检查。

分区级健康检查开关,作用于分区内所有集群

这里的健康检查针对的是网关服务器自身,不针对上游后端服务器或源站;后者是另一项功能。

OpenResty Edge 控制台中的网关网络分区列表

常见问题

如何对负载均衡器自身做健康检查?

在 OpenResty Edge 中,在网关集群或分区设置里启用健康检查即可。每个网关节点——也就是负载均衡器本身——会按设定的间隔接受 HTTP 探测:您可以配置请求主机、请求 URI(如 “/status”)、期望的响应体和探测间隔。检查失败的节点会被自动移出 DNS 解析。

网关节点健康检查失败后会发生什么?

该节点在网关服务器列表中变为红色,其 IP 会从 DNS 解析和 SSL 会话 ID 的分布式缓存中删除,新流量不再被路由到它。您可以在控制台查看失败详情。当节点重新通过检查后,它会变回绿色并自动恢复解析。

这与上游(后端)健康检查是一回事吗?

不是。本文介绍的健康检查监控的是网关服务器自身,即接收客户端流量的节点。针对上游后端服务器或源站的健康检查是 OpenResty Edge 的另一项功能。

健康检查可以探测哪些内容?

探测是一个 HTTP 请求,可配置请求主机、请求 URI、期望匹配的响应体以及探测间隔(本演示中为 3 秒)。配合一条直接输出固定响应体(如 “healthy”)的页面规则,每个网关节点都可以对外提供一个轻量的健康检查端点,无需任何后端参与。

关于 OpenResty Edge

OpenResty Edge 是一款专为微服务和分布式流量架构设计的全能型网关软件,由我们自主研发。它集流量管理、私有 CDN 构建、API 网关、安全防护等功能于一体,帮助您轻松构建、管理和保护现代应用程序。OpenResty Edge 拥有业界领先的性能和可扩展性,能够满足高并发、高负载场景下的苛刻需求。它支持调度 K8s 等容器应用流量,并可管理海量域名,轻松满足大型网站和复杂应用的需求。

如果你喜欢这个教程,请订阅这个博客网站和我们的 YouTube 频道B 站频道。谢谢!

关于作者

章亦春是开源 OpenResty® 项目创始人兼 OpenResty Inc. 公司 CEO 和创始人。

章亦春(Github ID: agentzh),生于中国江苏,现定居美国湾区。他是中国早期开源技术和文化的倡导者和领军人物,曾供职于多家国际知名的高科技企业,如 Cloudflare、雅虎、阿里巴巴, 是 “边缘计算“、”动态追踪 “和 “机器编程 “的先驱,拥有超过 22 年的编程及 16 年的开源经验。作为拥有超过 4000 万全球域名用户的开源项目的领导者。他基于其 OpenResty® 开源项目打造的高科技企业 OpenResty Inc. 位于美国硅谷中心。其主打的两个产品 OpenResty XRay(利用动态追踪技术的非侵入式的故障剖析和排除工具)和 OpenResty Edge(最适合微服务和分布式流量的全能型网关软件),广受全球众多上市及大型企业青睐。在 OpenResty 以外,章亦春为多个开源项目贡献了累计超过百万行代码,其中包括,Linux 内核、Nginx、LuaJITGDBSystemTapLLVM、Perl 等,并编写过 60 多个开源软件库。

关注我们

如果您喜欢本文,欢迎关注我们 OpenResty Inc. 公司的博客网站 。也欢迎扫码关注我们的微信公众号:

我们的微信公众号

翻译

我们提供了英文版原文和中译版(本文)。我们也欢迎读者提供其他语言的翻译版本,只要是全文翻译不带省略,我们都将会考虑采用,非常感谢!