Назад | Перейти на главную страницу

Linux / Multipath не использует все пути и не будет использовать path_selector с длиной очереди?

У меня следующее оборудование:

Сервер работает под управлением OpenSuSE 11.4 с настраиваемой сборкой многопутевых инструментов, созданных из восходящего потока и включающих набор исправлений OpenSuSE 11.3. Все 4 порта SAS на каждом сервере подключены к DAS, по 2 - к каждому из контроллеров DAS RAID.

DAS настроен с 22 дисками в RAID10, полосу 128 КБ. Я создал одну группу томов 500 ГБ в массиве и экспортировал ее на один из серверов.

Multipath настроен на многопутевый ввод-вывод для LUN объемом 500 ГБ, экспортированного на сервер. Вот файл 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' должна сбалансировать ввод-вывод по ВСЕМ путям, поэтому я должен видеть 4 активных пути. Если я изменю path_grouping_policy на «failover», я увижу те же 2 активных пути.

Кроме того, обратите внимание, что у меня path_selector установлено значение «queue-length 0», но вывод «multipath -l» ясно показывает, что он использует циклический перебор.

У кого-нибудь есть идеи о том, почему инструменты multipath не используют все 4 пути и почему он игнорирует мой выбор алгоритма выбора пути?

Большое спасибо...

Что ж, кажется, что массив не активен / активен, как я думал ... и как я думал, это общее определение. CTS2600 является активным / активным массивом в том смысле, что он может обслуживать LUN1 с контроллера A и LUN2 с контроллера B, но не LUN1 с контроллера A, B. Похоже, я не могу связать все 4 пути к одному LUN.

Однако я понял, что могу сбалансировать нагрузку ввода-вывода на обоих контроллерах. Я сделал это, создав группу томов RAID10 с 22 дисками в массиве CTS2600, создав два тома и установив предпочтительный путь для тома A к контроллеру A и контроллера B для тома B и экспортировав их на сервер. Затем я инициализировал их как физические тома LVM2, используя имена в / dev / mapper /. Затем я создал группу томов LVM2, содержащую оба физических тома. Поскольку у меня два LUN, после выполнения lvcreate я добавил параметр --stripes 2. Затем я отформатировал, смонтировал и использовал устройство как обычно. Наблюдая и за «iostat», и за встроенным в SANtricity Performance Monitor, стало ясно, что операции ввода-вывода, как и ожидалось, распределялись по обоим контроллерам.

Спасибо доброму джентльмену с #postgres за то, что предупредил меня о опции --stripes, чтобы это произошло (особенно потому, что LSI не желала или не могла помочь).

Иногда это называют «Dual Active», и это не совсем так, как привыкли инженеры FC SAN. Продавцы могли бы лучше описать ограничения своих продуктов на основе SAS. Эта статья объясняет все режимы неплохо.

Кроме того, я опустил детали о битах длины очереди и path_selector. Устройство хранения, которое я использую, уже находится в базе данных multipath, и поэтому для него установлены определенные значения по умолчанию, такие как длина очереди и path_selector. В моем /etc/multipath.conf отсутствовал раздел "devices {device {"), в котором вы можете переопределить параметры по умолчанию. После внесения этого изменения я смог подтвердить, что могу изменить (и использовать multipath) длину очереди и path_selector. Часть, которую я добавил в /etc/multipath.conf:

   devices {
     device {
     vendor  "LSI"
     product "INF-01-00"
     no_path_retry   fail
     features        0
     #path_grouping_policy   "multibus"
     }
   }

Надеюсь, это кому-то поможет.