1.2. 了解 etcd 性能


由于一致的分布式键值存储作为复制节点集群运行,etcd 会按照 Raft 算法将一个节点选为领导(leader),其它为跟随者(follower)。领导机维护系统的当前状态,并确保跟随者有最新的信息。

领导节点负责日志复制。它处理从客户端传入的写入事务,并写一个 Raft 日志条目,然后再将其广播到跟随者。

当一个 etcd 客户端(如 kube-apiserver)连接到一个 etcd 成员,它在请求一个需要仲裁的操作(如写一个值),如果 etcd 成员是跟随者,它会返回一个信息声明相关的事务需要转给领导。

当 etcd 客户端从需要仲裁的领导请求一个操作(如写一个值),领导会保持客户端的连接,同时写入本地 Raft 日志,将日志广播到跟随者,并等待大多数跟随者确认已提交日志并且没有错误。领导将确认发送到 etcd 客户端并关闭会话。如果从跟随者收到失败通知且没有满足共识,则领导会将错误消息返回到客户端并关闭会话。

etcd 的 OpenShift Container Platform 计时器条件

OpenShift Container Platform 会维护已为每个平台优化的 etcd 计时器。OpenShift Container Platform 已规定了为各个平台供应商优化的验证值。带有 platform=noneplatform=metal 值的默认 etcd 计时器 参数如下:

- name: ETCD_ELECTION_TIMEOUT 
1

  value: "1000"
  ...
- name: ETCD_HEARTBEAT_INTERVAL 
2

  value: "100"
Copy to Clipboard Toggle word wrap
1
此超时是跟随者节点在尝试成为领导前需要等待的、没有接收到心跳信号的时长。
2
领导通知跟随者它仍是领导的频率。

这些参数不会为 control plane 或 etcd 提供所有信息。etcd 集群对磁盘延迟非常敏感。因为 etcd 必须在其日志中保留提议,所以来自其他进程的磁盘活动可能会导致长时间 fsync 延迟。因此,etcd 可能会丢失心跳,从而导致请求超时和临时领导丢失。在领导丢失和重新选举的过程中,Kubernetes API 无法处理任何请求,并可能出现对集群服务有影响的事件,并造成集群不稳定。

磁盘延迟对 etcd 的影响

etcd 集群对磁盘延迟非常敏感。要了解 control plane 环境中 etcd 遇到的磁盘延迟问题,请运行 Flexible I/O Tester (fio) 测试或套件,以检查 OpenShift Container Platform 中的 etcd 磁盘性能。

重要

仅使用 fio 测试来测量特定时间点的磁盘延迟。此测试没有考虑到在生产环境中 etcd 可能会遇到的长期磁盘行为和其他磁盘工作负载。

确保最终报告的磁盘状态适用于 etcd,如下例所示:

...
99th percentile of fsync is 5865472 ns
99th percentile of the fsync is within the suggested threshold: - 20 ms, the disk can be used to host etcd
Copy to Clipboard Toggle word wrap

当使用高延迟磁盘时,会显示磁盘不推荐用于 etcd 的信息,如下例所示:

...
99th percentile of fsync is 15865472 ns
99th percentile of the fsync is greater than the suggested value which is 20 ms, faster disks are suggested to host etcd for better performance
Copy to Clipboard Toggle word wrap

当集群部署跨越了多个数据中心,用于 etcd 的磁盘不满足推荐的延迟标准,则可能会出现对到服务有影响的失败情况。另外,control plane 可容忍的网络延迟会显著降低。

网络延迟和 jitter 对 etcd 的影响

使用最大传输单元 (MTU) 发现和验证部分中介绍的工具来获取平均网络延迟和最大网络延迟。

心跳(heartbeat)间隔的值应大约是成员之间平均的往返时间 (RTT) 的最大值,通常大约是往返时间的 1.5 倍。OpenShift Container Platform 的默认心跳间隔为 100 ms,推荐的 control plane 节点之间的 RTT 小于 33 ms,最大小于 66 ms (66 ms x 1.5 = 99 ms)。任何大于这些值的网络延迟都可能会导致服务影响事件和集群不稳定。

网络延迟由多种因素决定,包括传输网络技术决定,如 copper、Fiber、wireless 或 satellite,在传输网络中网络设备的数量和质量,以及其他因素。

要进行精确计算,在考虑网络延迟时需要考虑到网络 jitter。网络 jitter 对网络延迟的影响,或接收的数据包延迟的影响根据具体情况会有所不同。在高效的网络条件中,jitter 应该为零。网络 jitter 对 etcd 的网络延迟计算有影响,因为在一段时间内实际网络延迟应该是 RTT 加上或减去 Jitter。

例如,一个网络的最大延迟为 80 ms,jitter 为 30 ms,则可能会出现 110 ms 的延迟,这意味着 etcd 会丢失心跳。这种情况会导致请求超时和临时丢失领导。在领导丢失和重新选举的过程中,Kubernetes API 无法处理任何请求,并可能出现对集群服务有影响的事件,并造成集群不稳定。

共识延迟对 etcd 的影响

过程只在一个活跃的集群中运行。在规划集群部署时,应已完成磁盘或网络测试。该测试会在部署后验证和监控集群健康状况。

通过使用 etcdctl CLI,您可以观察到 etcd 达成共识的延迟。您必须识别其中一个 etcd pod,然后检索端点健康状况。

etcd peer 往返时间对性能的影响

etcd peer 往返时间与网络往返时间不同。此计算是一种端到端测试指标,它包括了如何在成员间快速进行复制的方式。

etcd peer 往返时间是一个指标数据,显示 etcd 完成在所有 etcd 成员间复制客户端请求的延迟。OpenShift Container Platform 控制台提供仪表板来视觉化各种 etcd 指标。在控制台中,点 Observe Dashboards。从下拉列表中,选择 etcd

总结了 etcd peer 往返时间的图表位于 etcd Dashboard 页面的末尾。

数据库大小对 etcd 的影响

etcd 数据库大小对完成 etcd 碎片整理过程的时间有之间影响。当 OpenShift Container Platform 检测到至少 45% 的碎片时会自动执行 etcd 碎片整理(一次在一个 etcd 成员中执行)。在进行碎片整理过程中,etcd 成员无法处理任何请求。对于较小的 etcd 数据库,碎片整理过程的时间一般会小于一秒。对于较大的 etcd 数据库,磁盘延迟会直接影响到碎片时间,从而导致额外的延迟,因为在进行碎片整理的过程中会阻止其它操作。

当网络分区在一段时间内隔离 control plane 节点时 etcd 数据库的大小是的一个考虑因素,control plane 需要在通讯重新建立后同步。

存在一个控制 etcd 数据库大小的最小选项,因为它依赖于系统中的 Operator 和应用程序。当您考虑系统运行的延迟范围时,请考虑同步或按 etcd 数据库大小进行碎片整理的影响。

影响的程度特定于部署。完成碎片处理的时间会在事务率中造成降级,因为 etcd 成员在碎片处理过程中无法接受更新。同样,对于有高的改变频率的大型数据库,etcd 重新同步的时间会影响到系统上的事务率和事务延迟。在计划影响类型时,请考虑以下两个示例。

第一个基于数据库大小的 etcd 碎片处理的影响示例是,将一个 1 GB etcd 数据库写入到一个较慢的 7200 RPM 磁盘,速度是每秒 80 Mb,这大约需要 1 分 40 秒。在这样的场景中,碎片整理过程所需的时间最少要比这个时间更长才能完成碎片整理。

第二个数据库大小对 etcd 同步影响的示例是,如果在其中一个 control plane 节点断开连接时更改了 etcd 数据库的 10%,则同步需要至少传输 100 MB。通过 1 Gbps 链接传输 100 MB 时会需要 800 ms。在使用 Kubernetes API 的常规事务的集群中,etcd 数据库大小越大,越可能出现网络不稳定的情况,会导致 control plane 不稳定。

在 OpenShift Container Platform 中,etcd 仪表板有一个图表,用于报告 etcd 数据库的大小。另外,您可以使用 etcdctl 工具从 CLI 获取数据库大小。

# oc get pods -n openshift-etcd -l app=etcd
Copy to Clipboard Toggle word wrap

输出示例

NAME      READY   STATUS    RESTARTS   AGE
etcd-m0   4/4     Running   4          22h
etcd-m1   4/4     Running   4          22h
etcd-m2   4/4     Running   4          22h
Copy to Clipboard Toggle word wrap

# oc exec -t etcd-m0 -- etcdctl endpoint status -w simple | cut -d, -f 1,3,4
Copy to Clipboard Toggle word wrap

输出示例

https://198.18.111.12:2379, 3.5.6, 1.1 GB
https://198.18.111.13:2379, 3.5.6, 1.1 GB
https://198.18.111.14:2379, 3.5.6, 1.1 GB
Copy to Clipboard Toggle word wrap

Kubernetes API 事务率对 etcd 的影响

当您使用扩展 control plane 时,Kebernetes API 事务率取决于特定部署的特性。它取决于 etcd 磁盘延迟、etcd 往返时间以及写入 API 的对象大小的组合。因此,当使用扩展 control plane 时,集群管理员需要测试环境,以确定其环境的可持续事务率。kube-burner 工具可用于此目的。

为您的环境确定 Kubernetes API 事务率

您无法在不测量 Kubernetes API 的情况下确定 Kubernetes API 的事务率。用于测试 control plane 的工具之一是 kube-burner。二进制文件提供了一个 OpenShift Container Platform 打包程序来测试 OpenShift Container Platform 集群。它用于测试集群或节点密度。对于测试 control plane,kube-burner ocp 有三个工作负载配置集:cluster-density, cluster-density-v2, 和 cluster-density-ms。每个工作负载配置集创建一系列资源,旨在加载控制。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat