常见磁盘平均物理寻道时间约为:

  • 7200 转/分的 STAT 硬盘平均物理寻道时间是 9ms;
  • 10000 转/分的 STAT 硬盘平均物理寻道时间是 6ms;
  • 15000 转/分的 SAS 硬盘平均物理寻道时间是 4ms;

常见硬盘的旋转延迟时间约为:

  • 7200 rpm 的磁盘平均旋转延迟大约为 60X1000/7200/2=4.17ms;
  • 15000 rpm 的磁盘其平均旋转延迟约为 60X1000/15000/2=2ms。

最大 IOPS 的理论计算方法:IOPS=1000ms/(寻道时间+旋转延迟),数据传输时间忽略不计。

  • 7200 rpm 的磁盘 IOPS=1000/(9+4.17)=76IOPS;
  • 10000 rpm 的磁盘 IOPS=1000/(6+3)=111IOPS;
  • 15000 rpm 的磁盘 IOPS=1000/(4+2)=166IOPS。

由于 etcd 必须将数据持久保存到磁盘日志文件中,因此来自其他进程的磁盘活动可能会导致增加,结果可能会导致 etcd 请求超时和临时leader丢失。当给定高磁盘优先级时,etcd 服务可以稳定地与这些进程一起运行。

在 Linux 上,etcd 的磁盘优先级可以配置为 ionice:

  1. sudo ionice -c2 -n0 -p $(pgrep etcd)

RKE 或者 Rancher UI 自定义部署集群的时候,在 yaml 文件中指定以下参数

  • 磁盘碎片整理

通过auto-compaction-retention对历史数据压缩后,后端数据库可能会出现内部碎片。内部碎片是指空闲状态的,能被后端使用但是仍然消耗存储空间,碎片整理过程将此存储空间释放回文件系统。

要对 etcd 进行碎片整理,需手动在 etcd 容器中执行以下命令:

可以通过在客户端提高 etcd 对等网络流量优先级来解决这些错误。在 Linux 上,可以使用流量控制机制对对等流量进行优先级排序(请根据实际情况修改接口名称):

  1. NETWORK_INTERFACE=eth0
  2. tc qdisc add dev ${NETWORK_INTERFACE} root handle 1: prio bands 3
  3. tc filter add dev ${NETWORK_INTERFACE} parent 1: protocol ip prio 1 u32 match ip sport 2380 0xffff flowid 1:1
  4. tc filter add dev ${NETWORK_INTERFACE} parent 1: protocol ip prio 1 u32 match ip dport 2380 0xffff flowid 1:1
  5. tc filter add dev ${NETWORK_INTERFACE} parent 1: protocol ip prio 2 u32 match ip sport 2739 0xffff flowid 1:1
  6. tc filter add dev ${NETWORK_INTERFACE} parent 1: protocol ip prio 2 u32 match ip dport 2739 0xffff flowid 1:1