Отказоустойчивость и производительность систем хранения зависят не только от качества дисков, но и от того, как организованы пути доступа к данным. Маршрутизация операций ввода-вывода определяет, как запросы проходят от приложения к хранилищу и обратно. В сетях хранения данных (SAN) для этого используются протоколы iSCSI и Fibre Channel с механизмами multipathing. В распределенных файловых системах, таких как Ceph и GlusterFS, применяются сложные алгоритмы автоматического распределения запросов между узлами. Эта статья предоставляет проверенные пошаговые инструкции по настройке отказоустойчивой маршрутизации для SAN и сравнение архитектур распределенных систем, чтобы вы могли построить надежную и быструю инфраструктуру хранения.
Основы маршрутизации I/O в SAN: от протоколов к отказоустойчивости
Построение SAN начинается с выбора протокола, который определяет всю последующую архитектуру маршрутизации. Два основных варианта - iSCSI и Fibre Channel. После выбора протокола критически важна настройка multipathing для устранения единой точки отказа.
iSCSI vs Fibre Channel: какой протокол выбрать для вашей задачи маршрутизации?
iSCSI инкапсулирует команды SCSI в TCP/IP пакеты, что позволяет использовать стандартную Ethernet-инфраструктуру. Это снижает стоимость внедрения, но добавляет задержки из-за стека TCP/IP и накладных расходов на обработку. Fibre Channel - это выделенный протокол уровня 2, работающий через оптические или медные кабели. Он обеспечивает крайне низкие задержки и высокую пропускную способность, но требует специализированного оборудования: FC-адаптеров (HBA) и коммутаторов.
С точки зрения маршрутизации ключевое различие в следующем:
- iSCSI: маршрутизация происходит на сетевом уровне (IP). Для создания нескольких путей к одному LUN (Logical Unit Number) необходимо несколько IP-адресов на таргете и несколько сетевых интерфейсов на инициаторе. Балансировка и failover управляются ПО на хосте, например, DM-MPIO в Linux.
- Fibre Channel: маршрутизация осуществляется на уровне портов коммутатора. Каждый порт HBA имеет уникальный WWN (World Wide Name). Multipathing настраивается через комбинацию зонирования на FC-коммутаторе и ПО на хосте.
Выбор зависит от бюджета, требований к производительности и квалификации команды. iSCSI подходит для среднего бюджета и виртуализации общего назначения. Fibre Channel выбирают для высокопроизводительных СУБД и систем, критичных к задержкам.
Архитектура multipathing: как дублирование путей предотвращает простои
Multipathing - это технология, которая предоставляет операционной системе несколько независимых путей к одному устройству хранения. При отказе одного пути (например, обрыве кабеля, сбое сетевого порта или HBA) трафик автоматически перенаправляется по резервному пути, предотвращая простой.
Существуют две основные конфигурации:
- Active-Active: все пути активны и используются одновременно для балансировки нагрузки. Это повышает общую пропускную способность.
- Active-Passive: один путь активен, остальные находятся в режиме ожидания и активируются только при отказе основного. Эта конфигурация проще, но не дает прироста производительности.
На Linux за работу multipathing отвечает пакет multipath-tools и его демон multipathd. Он автоматически обнаруживает устройства и объединяет несколько путей к одному LUN в одно виртуальное устройство /dev/mapper/mpathX.
Практическая настройка multipathing для iSCSI и Fibre Channel
Теория важна, но результат дает только практическая реализация. Ниже приведены проверенные инструкции для настройки отказоустойчивого доступа к хранилищу.
Пошаговая настройка DM-MPIO для iSCSI-таргета в Linux
Предположим, у нас есть iSCSI-таргет с двумя сетевыми интерфейсами (IP: 192.168.1.10 и 192.168.2.10) и два соответствующих интерфейса на хосте-инициаторе.
- Установите необходимые пакеты:
sudo apt update && sudo apt install -y open-iscsi multipath-tools # Для Debian/Ubuntu sudo yum install -y iscsi-initiator-utils device-mapper-multipath # Для RHEL/CentOS - Настройте и запустите демон iSCSI:
sudo systemctl enable --now iscsid - Обнаружьте таргеты с обоих IP-адресов:
sudo iscsiadm -m discovery -t st -p 192.168.1.10 sudo iscsiadm -m discovery -t st -p 192.168.2.10 - Подключитесь ко всем обнаруженным таргетам:
sudo iscsiadm -m node -l - Настройте файл
/etc/multipath.conf. Минимальная рабочая конфигурация:
Параметрdefaults { user_friendly_names yes find_multipaths yes } devices { device { vendor "NETAPP" # Замените на вендора вашего хранилища product "LUN" path_grouping_policy multibus path_selector "service-time 0" failback immediate no_path_retry queue } }path_grouping_policy multibusобъединяет все пути в одну группу (Active-Active).path_selector "service-time 0"выбирает путь с наименьшей расчетной задержкой. - Перезапустите демон multipath и проверьте конфигурацию:
Вывод команды должен показать одно устройствоsudo systemctl restart multipathd sudo multipath -llmpathXс двумя активными путями в состоянииready running.
Теперь вы можете создать файловую систему на устройстве /dev/mapper/mpathX и смонтировать его. При отключении одного из сетевых кабелей команда multipath -ll покажет изменение состояния пути на failed faulty, но доступ к данным сохранится через второй путь.
Настройка failover для Fibre Channel: особенности и проверка
В среде FC настройка multipathing часто сводится к корректной настройке операционной системы, так как пути физически предоставляются HBA. После подключения кабелей и настройки зонирования на коммутаторе выполните следующие шаги:
- Убедитесь, что система видит оба HBA и их порты:
sudo lspci | grep -i fibre sudo systool -c fc_host -v - Проверьте, что виден один и тот же LUN с разных портов. Используйте
lsscsiили загляните в/sys/class/fc_transport/. - Конфигурация
/etc/multipath.confдля FC часто проще, так как устройство уже корректно определяется. Убедитесь, что в секцииblacklistне добавлены ваши HBA. - Для тестирования failover можно временно отключить один из портов на FC-коммутаторе или вытащить кабель. Мониторинг состояния в реальном времени:
watch -n 1 "multipath -ll | grep -A2 mpath"
Для комплексной проверки отказоустойчивости вашей SAN-инфраструктуры рекомендуем ознакомиться с руководством по полной настройке дисковых массивов HPE для гипервизоров, где детально разбирается интеграция MPIO с VMware и Hyper-V.
Оптимизация производительности: выбор политики балансировки нагрузки
После обеспечения отказоустойчивости можно заняться оптимизацией. Ключевой параметр - path_selector в multipath.conf.
service-time: Выбирает путь с наименьшей расчетной задержкой обслуживания. Подходит для смешанной нагрузки.queue-length: Направляет I/O на путь с наименьшей текущей очередью. Эффективен при высокой параллельной нагрузке.round-robin: Циклически перебирает все доступные пути, равномерно распределяя нагрузку. Подходит для последовательных операций чтения/записи.
Для тестирования используйте утилиту fio. Например, сравните производительность случайного чтения:
fio --name=randread --ioengine=libaio --rw=randread --bs=4k --numjobs=4 --size=1G --runtime=60 --time_based --group_reporting --filename=/dev/mapper/mpathX
Измерьте показатели IOPS и задержки для каждой политики в вашей конкретной среде. Помните, что неправильная политика может снизить производительность даже при наличии нескольких путей.
Маршрутизация в распределенных файловых системах: Ceph и GlusterFS
В распределенных файловых системах концепция физических путей заменяется логической маршрутизацией запросов между десятками или сотнями узлов. Классический multipathing здесь не применяется - отказоустойчивость и производительность закладываются в саму архитектуру.
Архитектура Ceph CRUSH: как запросы находят свои данные
Ceph использует алгоритм CRUSH (Controlled Replication Under Scalable Hashing) для определения местоположения объектов. Когда клиент хочет записать объект, он обращается к мониторам (MON) за актуальной картой кластера. Затем, используя идентификатор объекта и правила размещения (CRUSH rules), алгоритм вычисляет, в какие группы размещения (PG) и на какие OSD (Object Storage Daemon) должны быть записаны данные и их реплики.
Маршрутизация операции записи выглядит так:
- Клиент вычисляет PG для объекта.
- CRUSH определяет список OSD для этой PG (например, первичный OSD и два вторичных).
- Клиент отправляет данные напрямую на первичный OSD.
- Первичный OSD реплицирует данные на вторичные OSD и только после получения подтверждения от всех отправляет подтверждение клиенту.
Для чтения клиент может обратиться напрямую к любому OSD, хранящему копию объекта, что позволяет распределять нагрузку. Вся маршрутизация детерминирована и не требует централизованного метаданного сервера.
GlusterFS: маршрутизация через эластичные хэш-таблицы и DHT
GlusterFS использует другой подход. При создании тома типа Distributed Hash Table (DHT) файловая система разбивает пространство имен файлов на диапазоны, распределенные по серверам-брикам. Клиентский модуль (translator) вычисляет хэш от имени файла и определяет, на каком именно брике он должен находиться.
В отличие от Ceph, в GlusterFS нет понятия первичного узла для файла. Все узлы, хранящие данные для данного тома, равноправны. Однако для томов с репликацией (Replicated Volume) один из узлов становится де-факто первичным для операции записи, чтобы обеспечить консистентность. Маршрутизация запросов на чтение может происходить на любой реплике, что улучшает производительность.
Для глубокого погружения в развертывание подобных систем обратитесь к нашему практическому руководству по построению SDS-кластеров на Ceph и GlusterFS.
Ceph vs GlusterFS: сравнение механизмов маршрутизации для разных сценариев
Выбор между Ceph и GlusterFS зависит от типа workload и требований к согласованности данных.
Производительность I/O и отказоустойчивость: как архитектура влияет на результат
Ceph обеспечивает строгую согласованность. Запись считается успешной только после подтверждения от всех реплик (по умолчанию - трех). Это гарантирует целостность данных, но увеличивает задержку записи, особенно в географически распределенных кластерах. Отказоустойчивость достигается за счет репликации или эразирного кодирования на уровне объектов.
GlusterFS по умолчанию предлагает eventual consistency для распределенных томов и strong consistency для реплицированных. Запись в реплицированном томе должна завершиться на всех узлах-репликах, что также вносит задержку. Восстановление после сбоя узла в GlusterFS (процесс геалинга) может быть более ресурсоемким, так как требует сравнения содержимого файлов между репликами.
С точки зрения маршрутизации, Ceph предоставляет более детальный контроль над размещением данных через CRUSH rules, что позволяет оптимизировать производительность под конкретное железо. GlusterFS проще в начальной настройке, но его производительность сильно зависит от правильного выбора размера блока и типа тома.
Что выбрать? Рекомендации на основе типовых workload
- Виртуализация (OpenStack, Kubernetes): Чаще выбирают Ceph из-за нативной поддержки блочных устройств (RBD), интеграции с CSI драйверами и предсказуемой производительности при случайных операциях ввода-вывода.
- Хранение больших файлов (медиа, архивы): GlusterFS с томом типа Dispersed (аналог RAID-5/6) может быть эффективнее из-за меньших накладных расходов на метаданные и эффективного использования места.
- Объектное хранилище (S3-совместимое): Только Ceph с его RADOS Gateway (RGW).
- Файловый сервер общего назначения (замена NFS): GlusterFS проще воспринимается пользователями, привыкшими к классическим файловым системам.
Ключевой фактор - квалификация команды. Ceph сложнее в администрировании и требует глубокого понимания его внутренней работы для тонкой настройки. GlusterFS проще освоить, но при масштабировании за пределы нескольких десятков узлов могут возникнуть сложности с производительностью.
Если вы рассматриваете российские решения для импортозамещения, изучите сравнение «Русский Щит» и Kraftway Storage, где также затрагиваются вопросы интеграции с распределенными системами.
Решение проблем: от мониторинга путей до восстановления после сбоев
Даже правильно настроенная система может столкнуться с проблемами. Умение быстро диагностировать их критически важно.
Диагностика проблем multipathing в SAN
Если система теряет путь к хранилищу, действуйте по порядку:
- Проверьте состояние путей:
sudo multipath -ll. Ищите пути в состоянииfailedилиfaulty. - Убедитесь, что iSCSI-сессии активны:
sudo iscsiadm -m session -P 3. - Проверьте сетевую связность до IP-адресов таргета:
ping 192.168.1.10. - Изучите логи:
sudo journalctl -u multipathd -u iscsid --since "5 minutes ago" sudo dmesg | tail -50 - Проверьте, видны ли устройства на уровне SCSI:
sudo lsscsi -t.
Частая ошибка - конфликт WWID, когда два разных LUN имеют одинаковый идентификатор. В этом случае поможет ручное задание alias в multipath.conf.
Мониторинг здоровья и перебалансировка в Ceph и GlusterFS
Для Ceph основная команда - ceph -s. Она показывает общее состояние кластера. Более детальную информацию дают:
ceph osd tree: показывает иерархию OSD и их состояние (up/down, in/out).ceph pg dump_stuck: отображает PG, которые застряли в состояниях, например,inactiveилиstale.ceph health detail: дает развернутое описание любой обнаруженной проблемы.
Если OSD помечен как down, система автоматически начнет восстановление его данных на других OSD. Вмешательство администратора требуется, если OSD не может вернуться в строй.
Для GlusterFS используйте:
gluster volume status all: статус всех томов и бриков.gluster volume heal VOLNAME info: показывает список файлов, требующих геалинга между репликами.gluster volume rebalance VOLNAME fix-layout start: запускает перебалансировку данных после добавления нового брика.
Для поддержания высокой производительности как SAN, так и распределенных систем, необходима регулярная оптимизация базовых серверов. Наш гайд по практической настройке Linux-серверов для DevOps содержит готовые конфигурации для разгона производительности ввода-вывода.
Интеграция и гибридные сценарии: SAN как бэкенд для распределенных систем
Продвинутый сценарий - использование отказоустойчивой SAN в качестве бэкенда для узлов распределенной файловой системы. Например, каждый физический сервер в кластере Ceph подключается к своему высокодоступному LUN через iSCSI с multipathing, а этот LUN используется OSD для хранения объектов.
Схема развертывания и предостережения
Архитектура выглядит так: центральное SAN-хранилище (например, NetApp или Dell PowerStore) предоставляет несколько LUN. Каждый LUN подключен к двум разным портам хранилища и через две независимые сети к двум сетевым картам на физическом сервере. На сервере настроен multipathing, создающий устройство /dev/mapper/mpathX. На это устройство разворачивается OSD Ceph.
Преимущества:
- Высокая отказоустойчивость на уровне дискового массива (RAID, горячие запасные).
- Возможность использовать продвинутые функции хранилища (снимки, клонирование, дедупликация).
- Упрощение замены серверов: при выходе из строя физического узла его LUN можно быстро переназначить на новый сервер.
Накладные расходы и риски:
- Двойное преобразование протоколов: Приложение -> Ceph (RADOS) -> OSD -> SCSI команды -> SAN. Это добавляет задержку.
- Единая точка отказа: Само SAN-хранилище становится такой точкой. Необходимо строить его в отказоустойчивой конфигурации с двумя контроллерами и несколькими массивами.
- Сложность диагностики: Проблема с производительностью может быть как в Ceph (на уровне PG), так и в SAN (очередь на контроллере, медленные диски).
Такой подход оправдан в корпоративных средах, где уже есть инвестиции в высококлассное SAN и требуется добавить уровень гибкого масштабирования и объектного хранилища через Ceph. Для развертывания и управления гибридной инфраструктурой могут потребоваться облачные ресурсы. Сервисы, подобные Timeweb Cloud, предоставляют гибкие возможности для размещения и масштабирования таких решений.
Понимание принципов маршрутизации данных - от физических путей в SAN до алгоритмов CRUSH в Ceph - позволяет не просто следовать инструкциям, а осознанно проектировать и поддерживать надежные, производительные системы хранения. Используйте приведенные команды и рекомендации как основу для построения инфраструктуры, которая будет соответствовать требованиям ваших приложений.