> 2x SuperMicro服务器(128GB RAM,2x 8核AMD)
> 2x /服务器LSI SAS2008 PCIe MPT-Fusion2 HBA(每卡2个SAS端口)
> 1x LSI CTS2600 DAS,带24x W.D. 15.7k RPM 600GB SAS驱动器.
服务器正在运行OpenSuSE 11.4,它具有从上游构建的自定义多路径工具,并包含OpenSuSE 11.3补丁集.每台服务器上的所有4个SAS端口都连接到DAS,每个DAS RAID控制器连接2个.
DAS设置有22个驱动器,RAID10,128k条带.我在阵列上创建了一个500GB的卷组,并将其导出到其中一个服务器.
Multipath设置为多路径I / O到导出到服务器的500GB LUN.这是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更改为“failover”,我会看到相同的2个活动路径.
另外,请注意我将path_selector设置为’queue-length 0′,但’multipath -l’的输出清楚地表明它使用循环法.
任何人都有任何想法为什么multipath-tools不会使用所有4条路径,以及为什么它忽略了我选择的路径选择算法?
非常感谢…
解决方法
但是,我确实发现我可以在两个控制器之间对IO进行负载平衡.我这样做是通过在CTS2600阵列上创建一个22驱动器RAID10卷组,创建两个卷并将卷A的首选路径设置为控制器A,将控制器B设置为卷B,并将它们导出到服务器.然后我使用/ dev / mapper /下的名称将它们初始化为LVM2 Physical Volumes.接下来,我创建了一个包含物理卷的LVM2卷组.由于我有两个LUN,在执行’lvcreate’时我添加了选项“–stripes 2”.然后像往常一样格式化,安装和使用设备.正如预期的那样,观察“iostat”和SANtricity内置性能监视器,显然IO正在两个控制器中传播.
感谢#postgres上一位善良的绅士让我对–stripes选项提出了要求,以实现这一目标(特别是因为LSI不愿意或无法提供帮助).