我请求你的帮助。我自己已经看不到出路了。
我有一台服务器
1 个至强 E-2236
32内存
4 个 10TB 磁盘(WDC WD101KRYZ-01)- 以 RAID-0 形式收集。
磁盘速度很快。每个磁盘单独提供 250MB/s 的读/写速度。RAID-0 阵列产生 900MB/s 的速度 - 足以抽取 7 千兆位通道。使用 hdparm -t /dev/md0 进行测试
该服务器旨在分发大型视频文件 - 它是一个流视频服务器。
当我打开到此服务器的流量时,一切都会顺利进行一段时间,但随着时间的推移,iowait会增长到最大值。 HDD每秒仅处理40个请求 - 这是非常少的。 iowait是繁忙的工作进程(nginx)。
1.为什么?我做错了什么?
我尝试在 nginx 中启用 aio 进行多线程处理,这有帮助,但不是必需的。
我增加了 readahead = 8192,blockdev --setra 65536 - 没有结果。
2. 为什么内核在 CPU 最大负载时不尝试将静态数据缓存在 RAM 中?
我检查了磁盘。没有坏扇区。硬盘很好。
3. 为什么 atop 只显示一个磁盘负载较高?(见截图)
4. RAID-0 不应该在所有磁盘上并行负载吗?
我请求你的帮助。谢谢!
答案1
4 x 10TB 磁盘 (WDC WD101KRYZ-01) - 以 RAID-0 形式收集
首先,我要警告反对RAID0,除非你是非常肯定磁盘损坏时丢失所有数据是正常的。说实话,只有暂存数据、临时数据或非常容易重建的数据才应该放在 RAID0 阵列上。
该服务器旨在分发大型视频文件 - 它是一个流视频服务器
当顺序读取大文件时,“大”实际上意味着“大于 RAM 缓存”,缓存是无效的:不可能将所有文件数据缓存在 RAM 中,每次重新读取同一个文件都会导致先前缓存的数据被丢弃,从而有效地不断破坏您自己的缓存。
HDD 每秒仅处理 40 个请求 - 这是非常少的
不幸的是,机械硬盘对于小型随机 IO 来说速度非常慢:健康的 7200 RPM 硬盘在单独测试时平均提供约 70 IOPS,放入 RAID 阵列时可能会更少。
尽管如此,流媒体服务应该不是使用小的随机 IO 敲击磁盘。您能否在这种高 iowait 情况下提供以下命令的输出?
lsblk
dstat -d -n -f
iotop -a
iostat -x -k 1
答案2
只有一个解决方案!
如果您需要良好的磁盘速度,则不应考虑 RAID 0 和 5。 个人测试过))是的,在 RAID 0 和 5 上,您将拥有大量可用空间,但速度会非常低。 在高负载下,您的服务器将请求帮助。
我安装了软件 RAID 10,问题就解决了。
RAID 10 的缺点是价格昂贵。但如果你运气好,你会找到一个价格合理的服务器托管商。
大家好运!
PS:该问题已关闭!