配置上游健康检查
健康检查是一种根据上游服务的响应能力来确定其健康状况的机制。启用健康检查后,APISIX 将仅将请求转发到被视为健康的上游服务,而不会将请求转发到被视为不健康的服务。
健康检查通常有两种方法:
- 主动健康检查:APISIX 主动并定期向上游服务发送请求,并根据这些请求的响应确定其健康状况。
- 被动健康检查:APISIX 根据上游服务对客户端请求的响应来确定其健康状况,而无需主动探测。
本指南将向你展示如何为你的上游服务配置主动和被动健康检查。
前置条件
启动示例上游服务
在与 APISIX 相同的 Docker 网络中启动两个 NGINX 实例作为示例上游服务:
DOCKER_NETWORK=apisix-quickstart-net
docker run -d -p 8080:80 --network=${DOCKER_NETWORK} --name nginx1 nginx
docker run -d -p 8081:80 --network=${DOCKER_NETWORK} --name nginx2 nginx
验证两个 NGINX 实例都在运行:
for port in 8080 8081; do
curl -s "http://127.0.0.1:$port" | grep -q "Welcome to nginx" &&
echo "NGINX welcome page available on port $port."
done
你应该看到以下响应:
NGINX welcome page available on port 8080.
NGINX welcome page available on port 8081.
配置主动健康检查
主动检查通过定期向服务发送请求或探测并查看它们的响应情况来确定上游服务的健康状况。
在本节中,你将通过两个带有验证步骤的示例来了解:
- 主动检查如何检测上游状态的更改
- 当所有上游状态都不健康时,APISIX 如何将客户端请求转发到上游服务
示例:上游服务状态更改
以下示例演示了 APISIX 主动健康检查如何响应健康上游服务变为:部分不可用、全部不可用以及全部恢复的情况。
创建一个指向这两个服务的路由,并配置每 2 秒运行一次的主动健康检查:
- Admin API
- ADC
curl "http://127.0.0.1:9180/apisix/admin/routes" -X PUT -d '
{
"id": "example-hc-route",
"uri":"/",
"upstream": {
"type":"roundrobin",
"nodes": {
"nginx1:80": 1,
"nginx2:80": 1
},
"checks": {
"active": {
"type": "http",
"http_path": "/",
"healthy": {
"interval": 2,
"successes": 1
},
"unhealthy": {
"interval": 1,
"timeouts": 3
}
}
}
}
}'
❶ type:主动健康检查的类型。
❷ http_path:要主动探测的 HTTP 请求路径。
❸ healthy.interval:定期检查健康节点的时间间隔(以秒为单位)。
❹ healthy.successes:判定上游节点为健康的成功计数阈值。
❺ unhealthy.interval:定期检查不健康节点的时间间隔(以秒为单位)。
❻ unhealthy.timeouts:判定上游节点为不健康的超时计数阈值。
services:
- name: Nginx Service
routes:
- uris:
- /
name: example-hc-route
upstream:
type: roundrobin
nodes:
- host: nginx1
port: 80
weight: 1
- host: nginx2
port: 80
weight: 1
checks:
active:
type: http
http_path: /
healthy:
interval: 2
successes: 1
unhealthy:
interval: 1
timeouts: 3
❶ type:主动健康检查的类型。
❷ http_path:要主动探测的 HTTP 请求路径。
❸ healthy.interval:定期检查健康节点的时间间隔(以秒为单位)。
❹ healthy.successes:判定上游节点为健康的成功计数阈值。
❺ unhealthy.interval:定期检查不健康节点的时间间隔(以秒为单位)。
❻ unhealthy.timeouts:判定上游节点为不健康的超时计数阈值。
将配置同步到 APISIX:
adc sync -f adc.yaml
验证
你将验证上述配置,以了解 APISIX 上游健康检查在不同场景下的响应:
- 当 所有上游服务都健康时
- 当 只有部分服务健康时
- 当 没有服务健康时
- 当 所有服务都恢复时
如果你使用 快速入门 在 Docker 中启动 APISIX,Control API 端口 9090 已经映射 (-p 9090:9090)。