加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux / Multipath不使用所有路径,也不会使用队列长度path_selec

发布时间:2021-05-24 03:03:25 所属栏目:Linux 来源:网络整理
导读:我有以下硬件: 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,它具有从上游构建的自定义多路径工具,并包

我有以下硬件:

> 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条路径,以及为什么它忽略了我选择的路径选择算法?

非常感谢…

解决方法

好吧,好像数组不是以我认为的方式处于活动/活动状态……并且我认为这是常见的定义. CTS2600是一个主动/主动阵列,它可以从控制器A为LUN1服务器,从控制器B为LUN2服务,而不是控制器A,B的LUN1.所以看起来我无法将所有4条路径都转到一个LUN.

但是,我确实发现我可以在两个控制器之间对IO进行负载平衡.我这样做是通过在CTS2600阵列上创建一个22驱动器RAID10卷组,创建两个卷并将卷A的首选路径设置为控制器A,将控制器B设置为卷B,并将它们导出到服务器.然后我使用/ dev / mapper /下的名称将它们初始化为LVM2 Physical Volumes.接下来,我创建了一个包含物理卷的LVM2卷组.由于我有两个LUN,在执行’lvcreate’时我添加了选项“–stripes 2”.然后像往常一样格式化,安装和使用设备.正如预期的那样,观察“iostat”和SANtricity内置性能监视器,显然IO正在两个控制器中传播.

感谢#postgres上一位善良的绅士让我对–stripes选项提出了要求,以实现这一目标(特别是因为LSI不愿意或无法提供帮助).

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读