健康检查概述

健康检查是系统自愈能力的基础。

当一个服务实例发生故障时,负载均衡器或服务网格需要知道哪些实例是健康的,才能将流量路由到健康的实例。健康检查就是让系统能够「感知」自身状态的能力。

健康检查的分类

flowchart TD
    A["健康检查"] --> B["主动检查"]
    A --> C["被动检查"]

    B --> B1["周期性探测"]
    B1 --> B2["HTTP 检查"]
    B1 --> B2
    B1 --> B3["TCP 检查"]
    B1 --> B4["自定义脚本"]

    C --> C1["基于请求的结果"]
    C1 --> C2["成功/失败"]
    C1 --> C3["延迟"]

健康检查的层级

层级检查内容示例
进程检查进程是否存活PID 文件存在
端口检查端口是否监听TCP 连接成功
应用检查应用是否正常HTTP 200 返回
依赖检查依赖服务是否可用数据库连接

K8s 健康检查类型

flowchart TD
    A["K8s 探针"] --> B["存活探针\nLiveness Probe"]
    A --> C["就绪探针\nReadiness Probe"]
    A --> D["启动探针\nStartup Probe"]

    B --> B1["检查应用是否存活"]
    B1 --> B2["失败重启容器"]

    C --> C1["检查应用是否就绪"]
    C1 --> C2["失败停止接收流量"]

    D --> D1["检查应用是否启动完成"]
    D1 --> D2["启动期间禁用其他探针"]

健康检查的设计原则

  1. 轻量:健康检查本身不应该消耗太多资源
  2. 快速:检查应该快速完成
  3. 准确:检查结果应该准确反映应用状态
  4. 可配置:超时、重试等参数可配置

本章总结

核心要点

  1. 健康检查是自愈的基础:让系统能够感知自身状态
  2. 健康检查分为多个层级:进程、端口、应用、依赖
  3. K8s 有三种探针:存活、就绪、启动
  4. 健康检查要轻量快速:不应成为系统负担