Введение
Общие понятия (очень кратко)
Multipath I/O - технология, при которой от компьютера до дискового устройства имеется более одного пути, реализуемого с помощью нескольких адаптеров, шин, свитчей и т.п. Используется для повышения надёжности (отказоустойчивости) и производительности (при распределении нагрузки).
В Linux данная технология реализуется с помощью драйвера Device Mapper Multipath (DM-MP), включенного в ядро, начиная с версии 2.6.13 (август 2005 года).
Применимость к нашей среде
Достаточно стандартной конфигурацией у нас является ситуация, когда для production-систем данные находятся на внешнем дисковом массиве (IBM серии DS6000 или NetApp FAS 2040/2050). Сервер в этом случае, как правило, оборудуется двумя FC-адаптерами, которые коммутируются каждый на свой FC-свитч, куда, в свою очередь, также скоммутированы и оптические интерфейсы дисковых массивов. В результате один и тот же LUN, выделенный на массиве, доступен серверу несколькими путями (2-4) через различные адаптеры, FC-свитчи и контроллеры самого массива. Массивы NetApp, которые будут рассматриваться здесь далее, не позволяют делать распределение нагрузки между своими контроллерами: каждый LUN обслуживается только одним контроллером, но может автоматически переключиться на другой в случае проблем.
Задача
Настроить multipath I/O для работы сервера SLES10sp3 с LUN-ом, выделенным на массиве NetApp. Распределение нагрузки не использовать (поскольку это не позволяет делать массив NetApp в нынешней конфигурации), но настроить отказоустойчивость.
Начальные условия: сервер IBM xSeries 3650 с двумя FC-адаптерами IBM QLE2460 (OEM QLogic QLA2432, 4Gbps). На массиве выделен LUN, доступы на FC-свитчах с помощью зон сделаны, провода скоммутированы. На сервер установлена операционная система SLES10sp3 с обновлениями.
Решение
Начальная ситуация
Без использования драйвера DM-MP Linux видит каждый путь до устройства хранения как отдельный диск, соответственно назначаются и имена устройств:
- /dev/sda - первый локальный диск (на самом деле - зеркало из пары дисков, сделанное аппаратным RAID-контроллером);
- /dev/sdb - второй локальный диск (аналогично, вторая пара локальных дисков);
- /dev/sdc - LUN на массиве NetApp, доступный через первый FC-адаптер;
- /dev/sdd - тот же самый LUN, доступный через второй FC-адаптер.
Теория (небольшое отступление)
Драйвер DM-MP умеет "собирать" вместе разные пути к одному и тому же устройству, создавая новое поблочное устройство с отдельным именем. Все пути (до того же устройства) при этом группируются в группы путей; причём распределение нагрузки может выполняться лишь в пределах группы. В свою очередь, при отказе путей может происходить переключение на другую группу (fail-over) и возврат обратно (fail-back).Т.е. при наличии нескольких групп будет активна лишь одна из них, остальные будут резервными. При наличии нескольких путей в активной группе при отказе одного из них он просто временно исключается из этой группы (работа продолжается по остальным путям этой группы). При отказе всех путей в активной группе происходит переключение на резервную группу путей. На самом деле всё несколько сложнее, поскольку каждый путь (и группа путей) имеет ещё и свой приоритет, который тоже учитывается.
Для поставленной задачи из этого следует, что два доступных пути должны попасть каждый в свою группу.