5. 网络基础与 IO 路径
本章目标
- 理解"分布式存储第一瓶颈几乎总在网络"的原因
- 会算延迟账:一次远程写 = 带宽 + RTT × 消息往返数
- 会用 ip / ss / ping / ethtool / sar 做存储网络体检
5.1 一次远程写的成本账
单机栈里,NVMe 完成一次 IO 约 20µs。而分布式存储一次写要跨网络:
text
client → 主 OSD 1× 网络
主 OSD 落盘 1× 本地盘
主 OSD → 从 OSD × N 1× 网络(并行)
从 OSD 落盘 1× 本地盘
从 OSD → 主 OSD 应答 1× 网络
主 OSD → client 应答 1× 网络粗算 3 副本、25Gbps 网络、RTT 0.1ms、NVMe 20µs:延迟下限 ≈ 3×RTT + 落盘时间 ≈ 350µs 起,还没算排队。这就是 Ceph 写延迟永远做不到本地 NVMe 的算术原因,也是 GPFS/Weka 拼命优化网络路径(RDMA、ECE 本地缓存命中)的动机。
记住这组量级,任何"为什么集群延迟 1ms"的问题你都能心算 sanity check:
| 环节 | 典型量级 |
|---|---|
| 本地 NVMe IO | ~20µs |
| 同机房 RTT(TCP) | 50~100µs |
| 跨可用区 RTT | 1~5ms |
| 跨地域 RTT | 30~100ms |
5.2 存储网络的四个关键指标
- 带宽(吞吐):线速 ≠ 实际。25GbE 实际 TCP 有效约 23Gb/s;多副本流量要乘倍数 —— 集群网络(replication 网络)带宽需求是客户端网络的 (副本数-1) 倍,这就是生产部署 public/cluster 双网的原因(第二篇 cephadm 部署会实际配置)
- RTT 与抖动:关注
ping的mdev(抖动);抖动大意味着 P99 差 - 重传率:正常 <0.1%;>1% 时 TCP 吞吐断崖式下降(拥塞窗口反复坍缩)
- MTU:存储集群内网常开 jumbo frame(MTU 9000)减少中断/CPU 开销;但路径上所有设备必须一致,一半 9000 一半 1500 会产生难以排查的黑洞丢包
5.3 工具实操
bash
# 接口层:错误与丢包
ip -s link show eth0 # RX/TX errors, dropped
ethtool -S eth0 | grep -iE 'err|drop|miss'
# TCP 层:每条连接的 RTT / 重传 / 拥塞窗口
ss -ti dst 10.243.145.0/24
# 汇总:每秒 TCP 重传
sar -n TCP,ETCP 1 # retrans/s
# 带宽实测
iperf3 -s # 服务端
iperf3 -c <peer> -t 30 # 单流
iperf3 -c <peer> -t 30 -P 8 # 8 并行流(贴近存储多连接模型)
# RTT 分布
ping -c 100 -i 0.01 <peer> # 看 min/avg/max/mdevss -ti 输出解读(连接健康度速查):
text
rtt:0.087/0.135 mss:1448 cwnd:640 bytes_acked:... retrans:0/12
│ │ │ │
│ │ │ └─ 总重传 12 次 → 查!
│ │ └─ 拥塞窗口 640×1448B ≈ 0.9MB 在飞
│ └─ RTT 平滑值/偏差(毫秒)
└─ rtt 0.087ms —— 同机房健康值5.4 拓扑意识
分布式存储的分布与故障域设计都锚定物理拓扑。以全局指令中的集群拓扑为例:
- 管理/访问侧(
10.243.144.51-53):k8s 管理节点 + GPFS accessing cluster(客户端) - 计算/存储侧(
10.243.145.103,105-106):k8s work 节点(GPU)+ GPFS owning cluster(NSD/存储服务)
存储运维要随时能回答:客户端到存储跨了几跳?带宽收敛比多少?哪个交换机是单点? —— Ceph 的 CRUSH map rack/host 层级、GPFS 的恢复组划分,都是把物理拓扑翻译成数据分布策略(第三篇展开)。
本章小结
- 一次 3 副本写 ≈ 3×RTT + 落盘,心算量级判断一切延迟问题
- 重传率是存储网络第一健康指标;MTU 不一致是经典黑洞
ss -ti是连接级体检;iperf3-P 8贴近真实存储负载模型- 物理拓扑决定数据分布策略 —— 画出你的网络图比背命令更重要
自测
Quiz同机房 RTT 0.1ms、NVMe 落盘 20µs 的 3 副本 Ceph 集群,客户端写入延迟的理论下限约为?
Quiz存储集群内网一台节点 MTU 配成 9000,交换机端口是 1500,可能的后果是?
Lab · 测量并画出你的网络画像入门
1. `ping -c 100 -i 0.01 <对端>` 记录 RTT 的 min/avg/max/mdev。 2. `iperf3 -t 30` 测单流 TCP 带宽;再 `-P 8` 测并行流,对比差距并解释(单流受拥塞窗口×RTT 限制)。 3. `ss -ti` 观察 iperf 连接的 `rtt/cwnd/retrans` 列。 4. 用 `ip -s link` 和 `ethtool -S` 记录错误计数,写进你的基线。 5. **验收标准**:写出"这两台机器之间,单/并行连接各能跑到多少 MB/s、RTT 多少、有没有重传",并估算:3 副本写入(2 次网络转发)在本网络上最低延迟是多少。