我有以下硬件:
服务器运行的是OpenSuSE 11.4,具有从上游构build的多path工具的自定义构build,并且包含OpenSuSE 11.3补丁集。 每个服务器上的所有4个SAS端口连接到DAS,每个DAS RAID控制器连接2个端口。
DAS设置了RAID10中的22个驱动器,128k条带。 我在arrays上创build了一个500GB的卷组,并将其导出到其中一台服务器上。
多path设置为对输出到服务器的500GB LUN进行多pathI / 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
注意第二组path“status = enabled”,而不是“status = active”。 现在看看iostat,我们确实只使用前两个path:
Linux 2.6.37.6-0.5-default (slipdb01-primary) 07/07/2011 _x86_64_ (16 CPU) Device: rrqm/s wrqm/sr/sw/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”应该平衡所有path上的IO,所以我应该看到4个活动path。 如果我将path_grouping_policy更改为“故障转移”,则会看到相同的2个活动path。
此外,请注意,我已将path_selector设置为“队列长度0”,但“multipath -l”的输出清楚地显示它正在使用循环法。
任何人有任何想法,为什么multipath工具不会使用所有4path,为什么它忽略了我的selectpathselectalgorithm?
非常感谢…
那么,好像这个数组并不像我认为的那样是主动/主动的……而是以我认为是共同的定义的方式。 CTS2600是一种主动/主动arrays,它可以对来自控制器A的LUN1和来自控制器B的LUN2进行服务,但不对来自控制器A,B的LUN1进行服务。 所以看起来我不能让所有4条path进入一个LUN。
但是,我确实知道我可以通过两个控制器负载平衡IO。 我通过在CTS2600arrays上创build了22个驱动器RAID10卷组来创build了两个卷,并将卷A的优先path设置为控制器A,将控制器B设置为卷B,然后将其导出到服务器。 然后使用/ dev / mapper /下的名称将它们初始化为LVM2 Physical Volumes。 接下来,我创build了包含两个物理卷的LVM2卷组。 由于我有两个LUN,所以在执行'lvcreate'时,我添加了“–stripes 2”选项。 然后,我照常格式化,安装和使用设备。 看着“iostat”和SANtricity内置的性能监视器,很显然,IO正在如预期的那样跨越两个控制器。
感谢一位善良的绅士,他为我提供了一个可选的方法来使这一切发生(特别是在LSI不愿或无法帮助的情况下)。
另外,我省略了队列长度和path_selector位的细节。 我正在使用的存储设备已经在多path数据库中,因此具有特定的默认设置,如queue-length和path_selector。 我的/etc/multipath.conf文件缺less一个“devices {device {”部分,您可以在其中覆盖默认选项。 做了这个改变之后,我能够确认我可以改变(并且多path将使用)queue-length和path_selector。 我添加到/etc/multipath.conf的部分:
devices { device { vendor "LSI" product "INF-01-00" no_path_retry fail features 0 #path_grouping_policy "multibus" } }
希望这有助于某人。
这有时被称为“双主动”,而不是主动/主动FC SAN工程师所习惯的。 供应商可以在描述基于SAS的产品的局限性方面做得更好。 这篇文章很好地解释了所有的模式 。