1 个卷组中 2 个磁盘负载不均匀

1 个卷组中 2 个磁盘负载不均匀

我们有一台应用服务器,其中有 2 个 Fusion-IO SSD 放入一个卷组,形成一个卷。该卷内有 128 个文件,每个文件 40GB,可通过内存映射访问。

查看 iostat 时,我们发现工作负载在两个磁盘上的分布并不均匀。差异为 25%。

导致此问题的原因可能是什么?我该如何调查此问题?

>lsblk
NAME                      MAJ:MIN RM   SIZE RO MOUNTPOINT
...
fioa                      253:0    0   2.9T  0
└─instvg-instant (dm-17)  252:17   0   5.8T  0 /instant
fiob                      253:16   0   2.9T  0
└─instvg-instant (dm-17)  252:17   0   5.8T  0 /instant

>iostat -xk -d fioa -d fiob
Linux 3.0.101-0.47.52-default (...)        08/10/2015      _x86_64_

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
fioa              0.00     0.00 1295.05 3116.02 65326.45 16359.80    37.04     0.29    0.07   0.01   3.82
fiob              0.00     0.00 1847.35 4090.05 88087.96 21608.44    36.95     0.42    0.02   0.01   5.98

答案1

我需要输出来lvs -o +devices,segtype确认这一点,但我最好的猜测是,您只是将 LV 线性地分散到两个 PV 上。从负载平衡的角度来看,这是一个坏主意,因为文件系统往往会从头到尾填满,并且文件系统的前半部分在一个 PV 上,后半部分在另一个 PV 上。因此,在文件系统半满之前,几乎所有 I/O 都会转到第一个 PV。

要解决此问题,需要将 LV 创建为striped卷,而不是linear。这可以通过-i 2传递给 来完成lvcreate。将 LV 转换为条带是可能的,但前提是您有大量的空闲空间,而您似乎没有。这将交替将 LV 的块放到两个 PV 上,这样(例如)第一个 8KiB 数据将放在第一个 PV 上,下一个 8KiB 放在第二个 PV 上,下一个 8KiB 放在第一个 PV 上,依此类推。

话虽如此,你的 I/O 配置文件不是可怕失去平衡。您永远不会在两个 PV 上获得相同的 I/O,因为发送到 PV 的请求不会完全平衡。

相关内容