A monitor issues health monitor requests at regular intervals to evaluate the health of each endpoint within a pool.
When a pool becomes unhealthy, your load balancer takes that pool out of the endpoint rotation.
flowchart RL
accTitle: 负载均衡监控流程
accDescr: 监控器发出健康检查请求,以验证每个池内服务器的当前状态。
Monitor[监控器] -- 健康检查 ----> Endpoint2
Endpoint2 -- 响应 ----> Monitor
subgraph Pool [池]
Endpoint1((端点 1))
Endpoint2((端点 2))
end
导致端点状态变更的健康监视器请求会作为事件记录在负载均衡事件日志中。
有关监视器属性的最新列表,请参阅 API 文档中的监视器属性。
有关分步指南,请参阅创建监视器。
监视器组允许您将多个健康监视器组合成单个逻辑组,为应用创建更准确、更智能的健康检查。通过聚合多个监视器的结果,您可以更好地反映应用的真实健康状态,并提升流量导向的弹性。有关更多详情,请参阅监视器组 文档页面。
当您将监视器附加到池时,可以选择多个区域以提高报告准确性。
对于 pool 的 Health Monitor Regions(健康监视器区域) 中选择的每个选项,Cloudflare 会从该 region 内的三个独立数据中心发送健康 monitor 请求。
如果该 region 的大多数数据中心通过健康 monitor 请求,则该 region 被视为健康。如果大多数 region 健康,则 endpoint 本身将被视为健康。
All Data Centers(仅 Enterprise)
健康 monitor 探测从 Cloudflare 网络中的每个数据中心发送到关联 pool 内的 endpoint。这允许探测在客户设置的间隔内命中每个 endpoint。
All Regions(仅 Enterprise)
每个 region 向关联 pool 中的每个 endpoint 发送三个健康 monitor 探测。共有 13 个 region,总计 39 个探测。
Regional
从 pool 配置中指定的每个 region 发送三个健康 monitor 探测。
健康监视器探测默认使用 IPv4。仅当端点地址没有 A 记录(仅有 AAAA)时才会发送 IPv6 探测。每个端点每个间隔接收一次探测——Cloudflare 不会对同一端点同时探测 IPv4 和 IPv6。
要强制通过 IPv6 探测,请将端点地址设置为原始 IPv6 地址或仅有 AAAA 记录的主机名。
健康监视器请求使用的 host 标头可以在监视器本身或池内的端点上配置。
当监视器和端点上都指定了 host 标头时,端点上配置的 host 标头优先于监视器上配置的 host 标头。
未指定 host 标头时,Cloudflare 使用端点上配置的 Endpoint Address(端点地址) 作为健康监视器请求的 host 标头。
有关更多详情,请参阅覆盖 HTTP Host 标头。
Cloudflare API 支持以下监视器命令。示例以用户级端点给出,但同样适用于账户级端点。
| Command | Method | Endpoint |
|---|---|---|
| Create Monitor | POST |
accounts/:account_id/load_balancers/monitors |
| Delete Monitor | DELETE |
accounts/:account_id/load_balancers/monitors/:id |
| List Monitors | GET |
accounts/:account_id/load_balancers/monitors |
| Monitor Details | GET |
accounts/:account_id/load_balancers/monitors/:id |
| Overwrite specific properties | PATCH |
accounts/:account_id/load_balancers/monitors/:id |
| Overwrite existing monitor | PUT |
accounts/:account_id/load_balancers/monitors/:id |
| Preview Monitor | POST |
accounts/:account_id/load_balancers/monitors/:id/preview |
下表总结了 Cloudflare Load Balancing 中可用的不同类型的监视器、其监控类型,以及每种健康检查流程如何评估成功标准以确定端点健康状态:
| Monitor type | Monitoring type | Description | Health check process | Success criteria |
|---|---|---|---|---|
| HTTP/HTTPS | Public and private | 用于具有特定协议属性的 HTTP 和 HTTPS 端点。 | 探测配置了设置和成功标准,如 Method、Simulate Zone、Follow Redirects、Request Headers 和 Response Body。然后探测使用 HTTP 协议评估配置的成功标准。在配置的超时期限内,即使未收到响应,TCP 连接也会通过 keep-alives 保持活动。 | 成功基于满足配置的 HTTP 成功标准。在配置的超时和重试内无响应被视为不健康。 |
| TCP | Public and private | 通过尝试打开与端点的连接来检查 TCP 连通性。 | 监视器向指定端口发送 TCP SYN 消息。成功的健康检查需要收到 SYN/ACK 消息以建立连接。连接通过发送 FIN 或 RST 数据包关闭,或通过从端点收到 FIN 数据包关闭。 | 在配置的超时和重试内无法建立 TCP 连接被视为不健康。 |
| ICMP Ping | Public and Tunnel | 使用 ICMP 确认与端点的基本第 3 层(L3)连通性。端点需要允许回复 ICMP 数据包,任何中间网络设备必须支持 ICMP。 | 监视器发送 ICMP/ICMPv6 echo request(ping)并期望从端点收到 ICMP/ICMPv6 echo reply。 | 端点必须在配置的超时和重试内回复 ICMP ping 才被视为健康。 |
| UDP-ICMP | Public and Tunnel | UDP-ICMP 监视器在 ICMP Ping 监视器完成并判定为健康后发送 UDP 探测数据包。 | 收到成功的 ICMP 回复后,监视器向端点发送 UDP 探测数据包。如果未收到 ICMP Port Unreachable 消息,则端点被视为健康。 | 如果监视器在配置的超时和重试内收到 ICMP Port Unreachable 消息,则端点被视为不健康。 |
| SMTP | Public | 在应用层验证 SMTP 可用性。 | 监视器建立 TCP 连接并发送 SMTP HELO 命令。它期望收到代码 250 的回复。然后监视器发送 SMTP QUIT 命令,期望收到代码 221 的回复。在每个间隔结束时,通过发送 TCP FIN 数据包关闭 TCP 连接。 | 端点必须在配置的超时和重试内以正确的 SMTP 代码(HELO 为 250,QUIT 为 221)响应才被视为健康。 |