系统健康检查和快速恢复

健康检查

当系统出现问题或要对系统做出任何改动时,都需要首先检查系统的整体健康状态。 本指南列出了用于判断系统是否健康的部分关键信息。

指标和仪表盘

不同配置和流量下,指标统计值和错误阈值可能有很大差异。 判断的基本思路是检查关键指标的天同比或周同比的情况,观察是否存在显著差异。

活跃性

对于 worker 而言,alluxio_data_access_bytes_count 指标将计算 worker 接收的读写请求。 在 Prometheus 中,我们可以通过查询 irate(alluxio_data_access_bytes_count[5m]) 来计算每秒请求数(RPS)。 RPS 应保持稳定。如果 RPS 快速增加,说明 worker 可能将面临容量不足的风险。

对于 FUSE 进程而言,alluxio_fuse_result 指标可以用来计算每个 fuse 操作的 RPS。 alluxio_fuse_concurrency 也可以反映 fuse 进程的负载情况。

UFS 数据流

alluxio_ufs_data_access 指标记录在 worker 上访问 UFS 的读/写数据流量,如果启用了 UFS 回退功能,也会记录 FUSE 进程的相关数据流量。

alluxio_ufs_error 指标记录每种 UFS 的 API 访问错误代码。如果该指标增加,说明访问 UFS 出现问题。 可使用error_code 标签来过滤掉可预期错误,如 "no such file(无此类文件)"。 在 S3 中,该错误代码是404。不同的 UFS 可能会有不同的错误代码。

缓存命中率

对于 worker 而言,alluxio_cached_data_read_bytes_totalalluxio_ufs_data_access_bytes_total 指标可以计算缓存命中率。 要计算每秒的缓存命中率,应在 Prometheus 中使用 irate 函数,然后使用 sum 来移除未使用的标签。

  • 单个 worker 的缓存命中率为:

    sum by (instance) (irate(alluxio_cached_data_read_bytes_total{job="worker"}[5m])) / (sum by (instance) (irate(alluxio_cached_data_read_bytes_total{job="worker"}[5m])) + sum by (instance) (irate(alluxio_ufs_data_access_bytes_total{job="worker"}[5m])))
  • 整体缓存命中率(已集成到仪表盘中):

    sum(irate(alluxio_cached_data_read_bytes_total{job="worker"}[5m])) / (sum(irate(alluxio_cached_data_read_bytes_total{job="worker"}[5m])) + sum(irate(alluxio_ufs_data_access_bytes_total{job="worker"}[5m])))

整体状态

Alluxio Process Readiness

ETCD 就绪性

UFS 就绪性

日志

Alluxio 进程

Kubernetes CSI 驱动程序

快速恢复

ETCD 故障

Alluxio 针对 ETCD 故障已经实现了自动应急处理。 在 ETCD 出现故障后,Alluxio 会在一段(一般这个周期为24小时)时间内容忍 ETCD 故障以保证 IO 的正常进行。 同时管理员应当在这段时间内解决ETCD 故障。

当 ETCD 出现故障时,一般可以通过重启 ETCD pod来解决。 在特殊情况下,如果 ETCD 节点无法通过K8s重启解决问题,可以参考如下步骤重建和恢复 ETCD 服务。

  1. 关闭集群:kubectl delete -f alluxio-cluster.yaml

  2. 删除原来的 ETCD PV 和PVC

  3. 对原来的 ETCD pv 目录进行备份,防止之后需要恢复数据

  4. 检查所有物理机上的 ETCD 文件夹并将里面的内容都删掉

  5. 创建三个 ETCD PV。如果 PV 是由管理员手动创建,则建议在 PV 当中增加nodeAffinity section 保证 PV 分别对应一个 ETCD 节点和一个物理机。

  1. 重启集群:kubectl create -f alluxio-cluster.yaml

  2. 如果 UnderFileSystem 资源中未定义 UFS 挂载点,则需要重新执行alluxio mount add命令以重新挂载 UFS。

Worker 故障

Alluxio 通过优化功能可以在保证 I/O 不中断的情况下处理 Worker 故障。 一般来说,少量 Worker 故障不会影响 Alluxio 的功能。

当 Worker 出现故障时,K8s 会通过重启 Worker pod 来解决,不会影响已缓存数据。

FUSE 故障

Fuse 容器如果崩溃,会由集群内部的机制自动重启并恢复。 容器内的挂载点也会在 Fuse 容器启动完毕后自动恢复。

如果遇到 Fuse 容器因为某些原因停止响应,希望恢复到正常状态,可以直接执行kubectl delete pod alluxio-fuse-xxx 命令删除Fuse容器,并等待自动恢复机制完成工作。

Coordinator 故障

Coordinator 负责处理负载作业和管理服务。 它将提交的作业的元数据持久化到元存储(metastore),并在崩溃时进行恢复。 如果持久化的数据出现损坏,未完成的作业将丢失,并需要重新提交。

当 coordinator 出现故障时,K8s 会自动重启 coordinator pod。

Last updated