系统健康检查和快速恢复
健康检查
当系统出现问题或要对系统做出任何改动时,都需要首先检查系统的整体健康状态。 本指南列出了用于判断系统是否健康的部分关键信息。
指标和仪表盘
不同配置和流量下,指标统计值和错误阈值可能有很大差异。 判断的基本思路是检查关键指标的天同比或周同比的情况,观察是否存在显著差异。
活跃性
对于 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_total 和 alluxio_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 服务。
关闭集群:
kubectl delete -f alluxio-cluster.yaml删除原来的 ETCD PV 和PVC
对原来的 ETCD pv 目录进行备份,防止之后需要恢复数据
检查所有物理机上的 ETCD 文件夹并将里面的内容都删掉
创建三个 ETCD PV。如果 PV 是由管理员手动创建,则建议在 PV 当中增加
nodeAffinitysection 保证 PV 分别对应一个 ETCD 节点和一个物理机。
重启集群:
kubectl create -f alluxio-cluster.yaml如果
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