多站点部署的健康检查

验证多站点部署的健康状况

当在 Kubernetes 环境中运行 多站点部署 时,您应该自动化检查以查看一切是否按预期启动并运行。

此页面概述了可用于验证 Keycloak 多站点设置的 URL、Kubernetes 资源和健康检查端点。

概述

主动监控策略旨在在问题影响用户之前检测并警报问题。此策略是构建高度弹性和高可用性 Keycloak 应用程序的关键。

跨各种架构组件(例如应用程序健康状况、负载均衡、缓存和整体系统状态)的健康检查对于以下方面至关重要:

确保高可用性

验证所有站点和负载均衡器是否正常运行是确保系统即使在一个站点宕机时也能处理请求的关键。

维护性能

检查 Infinispan 缓存的健康状况和分布情况,确保 Keycloak 可以通过高效地处理会话和其他临时数据来维持最佳性能。

运维弹性

通过持续监控 Kubernetes 环境中 Keycloak 及其依赖项的健康状况,系统可以快速识别并可能自动修复问题,从而减少停机时间。

前提条件

  1. 已安装并配置 Kubectl CLI.

  2. 如果您的操作系统上尚未安装 jq,请安装它。

特定健康检查

Keycloak 负载均衡器和站点

通过其负载均衡器以及主站点和备份站点来验证 Keycloak 应用程序的健康状况。这确保了 Keycloak 可访问,并且负载均衡机制在不同的地理或网络位置之间正常运行。

此命令返回 Keycloak 应用程序与其配置的数据库连接的健康状态,从而确认数据库连接的可靠性。此命令仅在管理端口上可用,而不能从外部 URL 访问。在 Kubernetes 设置中,会定期检查子状态 health/ready 以使 Pod 变为就绪状态。

curl -s https://keycloak:managementport/health

此命令验证负载均衡器的 lb-check 端点,并确保 Keycloak 应用程序集群已启动并运行。

curl -s https://keycloak-load-balancer-url/lb-check

这些命令将返回多站点设置中 Keycloak 的站点 A 和站点 B 的运行状态。

curl -s https://keycloak_site_a_url/lb-check
curl -s https://keycloak_site_b_url/lb-check

Infinispan 缓存健康状况

检查外部 Infinispan 集群中默认缓存管理器和各个缓存的健康状况。此检查对于 Keycloak 的性能和可靠性至关重要,因为 Infinispan 通常用于 Keycloak 部署中的分布式缓存和会话集群。

此命令返回 Infinispan 缓存管理器的整体健康状况,这很有用,因为管理员用户无需提供用户凭据即可获取健康状态。

curl -s https://infinispan_rest_url/rest/v2/cache-managers/default/health/status

与之前的健康检查相比,以下健康检查需要管理员用户提供 Infinispan 用户凭据作为请求的一部分,以查看外部 Infinispan 集群缓存的整体健康状况。

curl -u <infinispan_user>:<infinispan_pwd> -s https://infinispan_rest_url/rest/v2/cache-managers/default/health \
 | jq 'if .cluster_health.health_status == "HEALTHY" and (all(.cache_health[].status; . == "HEALTHY")) then "HEALTHY" else "UNHEALTHY" end'

jq 过滤器是为了方便计算基于各个缓存健康状况的整体健康状况。您也可以选择在不使用 jq 过滤器的情况下运行上述命令以查看完整详细信息。

Infinispan 集群分布

评估 Infinispan 集群的分布健康状况,确保集群节点正确地分布数据。此步骤对于缓存层的可扩展性和容错能力至关重要。

您可以修改 expectedCount 3 参数以匹配集群中的总节点数,并验证它们是否健康。

curl <infinispan_user>:<infinispan_pwd> -s https://infinispan_rest_url/rest/v2/cluster\?action\=distribution \
 | jq --argjson expectedCount 3 'if map(select(.node_addresses | length > 0)) | length == $expectedCount then "HEALTHY" else "UNHEALTHY" end'

Infinispan 系统整体健康状况

使用 kubectl CLI 工具查询指定命名空间中 Infinispan 集群和 Keycloak 服务的健康状态。此全面检查确保 Keycloak 部署的所有组件都在 Kubernetes 环境中正常运行且配置正确。

kubectl get infinispan -n <NAMESPACE> -o json  \
| jq '.items[].status.conditions' \
| jq 'map({(.type): .status})' \
| jq 'reduce .[] as $item ([]; . + [keys[] | select($item[.] != "True")]) | if length == 0 then "HEALTHY" else "UNHEALTHY: " + (join(", ")) end'

Kubernetes 中 Keycloak 的就绪状态

专门检查 Kubernetes 中 Keycloak 部署的就绪状态和滚动更新条件,确保 Keycloak 实例完全可操作且未进行可能影响可用性的更新。

kubectl wait --for=condition=Ready --timeout=10s keycloaks.k8s.keycloak.org/keycloak -n <NAMESPACE>
kubectl wait --for=condition=RollingUpdate=False --timeout=10s keycloaks.k8s.keycloak.org/keycloak -n <NAMESPACE>
本页内容