3.9. 确定 etcd 数据库的大小并了解其影响
etcd 数据库的大小直接影响到完成 etcd 碎片整理过程的时间。当 OpenShift Container Platform 检测到至少 45% 的碎片时会自动执行 etcd 碎片整理(一次在一个 etcd 成员中执行)。在进行碎片整理过程中,etcd 成员无法处理任何请求。对于较小的 etcd 数据库,碎片整理过程的时间一般会小于一秒。对于较大的 etcd 数据库,磁盘延迟会直接影响到碎片时间,从而导致额外的延迟,因为在进行碎片整理的过程中会阻止其它操作。
当网络分区隔离 control plane 节点时,etcd 数据库的大小是一个因素,当网络分区隔离 control plane 节点时,control plane 需要在重新建立通信后重新同步。
存在一个控制 etcd 数据库大小的最小选项,因为它依赖于系统中的操作器和应用程序。当您考虑系统操作的延迟范围时,请考虑同步或按 etcd 数据库大小进行碎片整理的影响。
影响的程度特定于部署。完成碎片处理的时间会在事务率中造成降级,因为 etcd 成员在碎片处理过程中无法接受更新。同样,对于有高的改变频率的大型数据库,etcd 重新同步的时间会影响到系统上的事务率和事务延迟。
在计划影响类型时,请考虑以下两个示例。
- 基于数据库大小的 etcd 碎片效果示例
- 将 etcd 数据库 1 GB 写入一个较慢的 7200 RPM 磁盘,达到 80 Mbit/s 大约需要 1 分钟和 40 秒。在这种情况下,碎片整理过程最少需要很长时间才能完成碎片整理。
- 数据库大小对 etcd 同步的影响示例
- 如果在其中一个 control plane 节点断开连接过程中更改了 etcd 数据库的 10%,则重新同步需要至少传输 100 MB。通过 1 Gbps 链接传输 100 MB 时会需要 800 ms。在使用 Kubernetes API 的常规事务的集群中,etcd 数据库大小越大,越可能出现网络不稳定的情况,会导致 control plane 不稳定。
您可以使用 OpenShift Container Platform 控制台或在 etcdctl
工具中运行命令来确定 etcd 数据库的大小。
流程
- 要在 OpenShift Container Platform 控制台中查找数据库大小,进入 etcd 仪表板来查看报告 etcd 数据库大小的图表。
要使用 etcdctl 工具查找数据库大小,您可以输入两个命令:
输入以下命令列出 pod:
oc get pods -n openshift-etcd -l app=etcd
# oc get pods -n openshift-etcd -l app=etcd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
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
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 Copied! Toggle word wrap Toggle overflow 输入以下命令并在输出中查看数据库大小:
oc exec -t etcd-m0 -- etcdctl endpoint status -w simple | cut -d, -f 1,3,4
# oc exec -t etcd-m0 -- etcdctl endpoint status -w simple | cut -d, -f 1,3,4
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
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
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 Copied! Toggle word wrap Toggle overflow