菜单

监控与维护

相关源文件

本文档介绍了如何监控 etcd 的健康状况并执行必要的维护操作,以确保 etcd 集群平稳可靠地运行。有关部署和配置 etcd 集群的信息,请参阅 部署与配置,有关升级过程的信息,请参阅 升级

健康监控

etcd 提供了多种机制来监控其健康状况和状态,包括 HTTP 端点和指标。

运行状况检查端点

etcd 公开了多个用于健康检查的 HTTP 端点

  • /health - 通用健康检查,验证服务器是否可以处理请求
  • /livez - Kubernetes 风格的存活检查
  • /readyz - Kubernetes 风格的就绪检查,可以配置为包含或排除某些告警

健康检查端点返回的 HTTP 状态码指示服务器是否健康

  • 200 OK - 服务器健康
  • 5xx - 服务器不健康

来源

监控架构

来源

指标与监控

etcd 以 Prometheus 格式公开了一套全面的指标,可用于监控其性能、健康状况和资源使用情况。

指标端点

指标默认在 /metrics 端点上提供

要与 Prometheus 集成,请将 etcd 端点添加到您的 Prometheus 配置中

要监控的关键指标

类别指标描述
磁盘etcd_mvcc_db_total_size_in_bytes数据库文件的总大小
etcd_disk_wal_write_duration_secondsWAL 写入延迟
etcd_disk_backend_commit_duration_seconds后端提交延迟
etcd_disk_defrag_inflight正在进行的碎片整理操作的数量
服务器etcd_server_leader_changes_seen_total已见的领导者变更次数
etcd_server_proposals_committed_total已提交的共识提案数量
etcd_server_proposals_failed_total失败的共识提案数量
etcd_server_has_leader服务器是否有领导者(1)或没有(0)
网络etcd_network_client_grpc_received_bytes_total从客户端接收的总字节数
etcd_network_client_grpc_sent_bytes_total发送给客户端的总字节数
资源os_fd_used使用的文件描述符数量
os_fd_limit文件描述符限制
MVCCetcd_mvcc_put_total总 put 操作次数
etcd_mvcc_delete_total总 delete 操作次数
etcd_mvcc_txn_total总事务次数
etcd_mvcc_range_total总 range 操作次数
etcd_mvcc_current_revisionetcd 的当前修订版本
etcd_mvcc_compact_revision最新的压缩修订版本

来源

Watch 进度通知

etcd 提供了一种通过进度通知来监控 watch 进度的机制,这对于确保 watch 客户端正确接收更新非常有用

进度通知告知客户端当前修订版本,使他们能够检测是否遗漏了任何事件。

来源

维护操作

etcd 需要定期维护以确保最佳性能和可靠性。以下是关键的维护操作:

维护工作流

来源

压缩

压缩会删除旧的键修订版本,从而释放存储引擎中的空间。这是防止 etcd 数据库无限增长的关键操作。

压缩可以通过 etcdctl 手动执行,也可以由 etcd 自动执行

为了监控压缩健康状况,etcd 提供了指标

  • etcd_debugging_mvcc_compact_revision - 最新的压缩修订版本
  • etcd_mvcc_db_total_size_in_bytes - 数据库大小(压缩后应减小)

来源

碎片整理

虽然压缩会删除旧的修订版本,但它不会回收磁盘空间。压缩是回收压缩后磁盘空间所必需的。

可以使用 etcdctl 进行碎片整理

关于碎片整理的重要说明

  1. 碎片整理是一项阻塞操作,会暂时停止服务器操作。
  2. 为避免服务中断,请考虑一次对一个成员进行碎片整理。
  3. 已添加一个新标志 --experimental-stop-grpc-service-on-defrag 以在碎片整理期间启用客户端故障转移。

监控碎片整理的指标

  • etcd_disk_defrag_inflight - 正在进行的碎片整理操作数量

来源

备份和快照

定期备份对于数据安全至关重要。etcd 提供快照功能来创建数据库的即时备份

对于自动化备份,您可以设置一个 cron 作业来定期创建快照。

监控备份健康的关键事项

  • 快照文件大小
  • 快照创建时间
  • 快照的成功验证

来源

告警管理

etcd 在遇到需要注意的问题时会发出告警。常见的告警包括:

  • NOSPACE - 后端数据库大小超过配额
  • CORRUPT - 检测到数据库损坏

可以使用 etcdctl 列出和解除告警

健康端点可以配置为排除某些告警影响健康状态

来源

监控和维护的最佳实践

监控最佳实践

  1. 设置全面的监控

    • 监控关键指标,如数据库大小、磁盘使用情况和网络流量
    • 为关键条件(领导者变更、提案失败)设置告警
    • 使用 os_fd_usedos_fd_limit 指标监控文件描述符使用情况
  2. 定期健康检查

    • 使用 /health/livez/readyz 端点实现自动化健康检查
    • 配置健康检查以了解维护操作
  3. Watch 进度通知

    • 启用并监控 Watch 进度通知,以确保 Watch 功能正常运行

维护最佳实践

  1. 定期压缩

    • 根据您的写操作量安排定期压缩
    • 监控压缩指标以确保其正常工作
  2. 谨慎的碎片整理

    • 一次对一个成员进行碎片整理,以避免集群范围的中断
    • 考虑使用 --experimental-stop-grpc-service-on-defrag 标志
    • 在碎片整理期间监控 etcd_disk_defrag_inflight 指标
  3. 备份策略

    • 根据您的恢复点目标(RPO)频繁拍摄快照
    • 将快照存储在不同的物理存储上
    • 使用 etcdctl snapshot status 定期验证快照
  4. 配额管理

    • 设置适当的 --quota-backend-bytes 标志,以防止空间不足
    • 监控数据库大小,并在配额达到之前实施告警

来源

结论

妥善的监控和维护对于在生产环境中可靠地运行 etcd 至关重要。通过实施本指南中描述的实践,您可以确保 etcd 集群保持健康并发挥最佳性能。

请记住

  • 使用 Prometheus 监控关键指标
  • 执行定期健康检查
  • 安排压缩和碎片整理操作
  • 创建并验证定期备份
  • 在发生告警时进行妥善处理

这些实践将帮助您维护一个健壮的 etcd 部署,该部署能够可靠地满足您的应用程序需求。