第 2 章 推荐的 etcd 实践
以下文档提供有关 etcd 推荐的性能和可扩展性实践的信息。
2.1. etcd 的存储实践 复制链接链接已复制到粘贴板!
因为 etcd 将数据写入磁盘并在磁盘上持久化,所以其性能取决于磁盘性能。虽然 etcd 并不是有非常高的 I/O 负载,但它需要使用一个具有低延迟的块设备才能获得最佳性能和稳定性。因为 etcd 的共识协议依赖于将元数据永久存储在日志中 (WAL),所以 etcd 对磁盘写入延迟非常敏感。减慢来自其他进程的磁盘活动和磁盘活动可能会导致长时间的 fsync 延迟。
这些延迟可能会导致 etcd 丢失心跳,不会及时向磁盘提交新的建议,并最终遇到请求超时和临时丢失问题。高写入延迟也会导致 OpenShift API 较慢,这会影响集群性能。由于这些原因,请避免在具有 I/O 敏感或密集型的 control-plane 节点上并置其他工作负载,并共享相同的底层 I/O 基础架构。
在可以在 10ms 内按顺序至少写入 50 IOPS 8KB(包括 fdatasync)的块设备中运行 etcd。对于高负载的集群,建议使用 8000 字节的连续 500 IOPS (2 毫秒)。要测量这些数字,您可以使用基准测试工具,如 fio
命令。
要实现这样的性能,在由低延迟和高吞吐量的 SSD 或 NVMe 磁盘支持的机器上运行 etcd。考虑使用单层单元(SLC)固态驱动器(SSD)(它为每个内存单元提供 1 位),这是可靠的,非常适合于写密集型工作负载。
影响 etcd 上的负载的因素包括静态因素,如节点和 pod 的数量,以及动态因素,包括因为 pod 自动扩展、pod 重启、作业执行和其他与工作负载相关的事件,以及其他与负载相关的事件。要准确调整 etcd 设置的大小,您必须分析工作负载的特定要求。考虑影响 etcd 负载的节点、pod 和其他相关因素的数量。
以下硬盘驱动器实践提供最佳的 etcd 性能:
- 使用专用 etcd 驱动器。避免通过网络通信的驱动器,如 iSCSI。不要将日志文件或其他重重工作负载放在 etcd 驱动器中。
- 首选驱动低延迟来支持快速读写操作。
- 首选高带宽写入,以便更快地压缩和整理碎片。
- 首选高带宽读取,以便更快地从故障恢复。
- 使用固态硬盘作为最低选择。在生产环境中首选 NVMe 驱动器。
- 使用服务器级硬件提高可靠性。
- 避免 NAS 或 SAN 设置,以及旋转驱动器。Ceph Rados 块设备 (RBD) 和其他类型的网络附加存储可能会导致网络延迟无法预计。要大规模向 etcd 节点提供快速存储,请使用 PCI 透传将 NVM 设备直接传递给节点。
-
始终使用
fio
等工具进行基准测试。当集群性能增加时,您可以使用这些工具不断监控集群性能。 - 避免使用网络文件系统 (NFS) 协议或其他基于网络的文件系统。
需要在部署的 OpenShift Container Platform 集群上监控的一些关键指标包括,日志持续时间之前的 etcd 磁盘写入的 p99 值,以及 etcd leader 更改的数量。使用 Prometheus 跟踪这些指标。
在正常操作过程中,etcd 成员数据库大小可能会因集群而异。这种差异不会影响集群升级,即使领导大小与其他成员不同。