我有以下硬件:
服务器正在运行OpenSuSE 11.4,自定义构建了从上游构建的多路径工具,并包含了OpenSuSE 11.3修补程序集。每个服务器上的所有4个SAS端口都连接到DAS,2个连接到每个DAS RAID控制器。
DAS是设置在一个RAID10的22个驱动器,128 K条。我在数组上创建了一个500 of的卷组,并将其导出到其中一个服务器。
多路径设置为输出到服务器的500 to的多路径I/O。下面是multipath.conf文件:
defaults {
path_checker "directio"
path_selector "queue-length 0"
path_grouping_policy "multibus"
prio "random"
features "1 queue_if_no_path" #queue IO if all paths are lost
}multipath -l输出:
pg (360080e50001b658a000005104df8c650) dm-0 LSI,INF-01-00
size=500G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 rdac' wp=rw
|-+- policy='round-robin 0' prio=0 status=active
| |- 4:0:0:1 sda 8:0 active undef running
| `- 5:0:0:1 sde 8:64 active undef running
`-+- policy='round-robin 0' prio=0 status=enabled
|- 4:0:1:1 sdc 8:32 active undef running
`- 5:0:1:1 sdg 8:96 active undef running注意对于第二组路径,"status=enabled",而不是前两条路径的"status=active“。现在,看看iostat,我们实际上只使用了前两条路径:
Linux 2.6.37.6-0.5-default (slipdb01-primary) 07/07/2011 _x86_64_ (16 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 1.18 441.70 30.44 4748.62 21.58 0.79 1.79 0.24 10.60
sdb 0.00 0.00 0.00 0.00 0.00 0.00 14.22 0.00 83.56 82.92 0.00
sdc 0.00 0.00 0.00 0.00 0.00 0.00 8.06 0.00 334.53 331.73 0.02
sdd 0.00 0.00 0.00 0.00 0.00 0.00 16.99 0.00 98.73 95.76 0.00
sde 0.00 0.00 1.18 441.70 30.43 4747.77 21.58 0.79 1.79 0.24 10.60
sdf 0.00 0.00 0.00 0.00 0.00 0.00 14.43 0.00 77.17 76.66 0.00
sdg 0.00 0.00 0.00 0.00 0.00 0.00 8.06 0.00 301.72 297.05 0.02
sdh 0.00 0.00 0.00 0.00 0.00 0.00 14.29 0.00 83.12 82.69 0.00
sdi 0.00 0.00 0.08 0.48 8.73 35.82 159.00 0.06 99.95 1.08 0.06
sdj 0.00 2311.06 0.00 340.49 0.01 10606.18 62.30 0.04 0.12 0.08 2.83
dm-0 0.02 1353.74 2.36 883.40 60.86 9496.39 21.58 0.95 1.08 0.13 11.20
dm-2 0.00 0.00 2.38 2237.14 60.86 9496.39 8.54 1.90 0.84 0.05 11.20据我所知,将path_grouping_policy设置为“multibus”应该能够平衡所有路径的IO,因此我应该看到4个活动路径。如果我将path_grouping_policy更改为“故障转移”,则会看到相同的2条活动路径。
另外,请注意,我将path_selector设置为“队列长度0”,但是“多路径-l”的输出清楚地显示它使用的是循环。
有人知道为什么多路径工具不会使用所有4条路径,为什么它忽略了我选择的路径选择算法?
非常感谢。
发布于 2011-07-27 03:47:47
好吧,似乎数组在我认为是公共定义的方式( thought..and )中不是活动的/活动的。CTS2600是一个active/active数组,它可以从控制器A向LUN1提供服务器,从Controller向LUN2提供服务器,而不是从Controller、B中获取LUN1,因此看起来我无法将所有4条路径都连接到一个LUN。
但是,我确实发现我可以在两个控制器之间负载平衡IO。为此,我在RAID10数组上创建了一个22驱动器的CTS2600卷组,创建了两个卷,并将卷A的首选路径设置为控制器A,控制器B设置为卷B,并将它们导出到服务器。然后,我使用/dev/mapper/下面的名称将它们初始化为LVM2物理卷。接下来,我创建了一个包含两个物理卷的LVM2卷组。因为我有两个LUN,在做'lvcreate‘时,我添加了选项-条纹2“。然后,我像往常一样格式化、挂载和使用该设备。看着“iostat”和SANtricity内置的性能监视器,很明显,IO正像预期的那样分散在两个控制器上。
感谢#postgres号上的一位善良的绅士,他给了我关于--条纹选项的提示(特别是因为LSI不愿意或无法帮助我)。
发布于 2011-09-07 18:02:39
此外,我忽略了队列长度和path_selector位的细节。我正在使用的存储设备已经在多路径数据库中,因此设置了某些默认值,如队列长度和path_selector。我的/etc/multipath.conf . can缺少一个“设备{设备{”部分,您可以在其中覆盖默认选项。在进行了这些更改之后,我能够确认我可以更改队列长度和path_selector (并且多路径将使用)。我添加到/etc/multipath.conf. added的部分:
devices { device { vendor "LSI" product "INF-01-00" no\_path\_retry fail features 0 #path\_grouping\_policy "multibus" } }
希望这能帮上忙。
发布于 2012-01-30 19:33:58
这有时被称为“双主动”,而不是真正的主动/主动FC SAN工程师所习惯的。供应商可以在描述基于SAS的产品的局限性方面做得更好。这篇文章解释所有的模式非常好。
https://serverfault.com/questions/288087
复制相似问题