Маршрутизация данных в SAN и распределенных файловых системах: практическое руководство по настройке отказоустойчивости и производительности | AdminWiki

Маршрутизация данных в SAN и распределенных файловых системах: практическое руководство по настройке отказоустойчивости и производительности

16 июля 2026 11 мин. чтения
Содержание статьи

Отказоустойчивость и производительность систем хранения зависят не только от качества дисков, но и от того, как организованы пути доступа к данным. Маршрутизация операций ввода-вывода определяет, как запросы проходят от приложения к хранилищу и обратно. В сетях хранения данных (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) трафик автоматически перенаправляется по резервному пути, предотвращая простой.

Существуют две основные конфигурации:

  1. Active-Active: все пути активны и используются одновременно для балансировки нагрузки. Это повышает общую пропускную способность.
  2. 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) и два соответствующих интерфейса на хосте-инициаторе.

  1. Установите необходимые пакеты:
    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
  2. Настройте и запустите демон iSCSI:
    sudo systemctl enable --now iscsid
  3. Обнаружьте таргеты с обоих IP-адресов:
    sudo iscsiadm -m discovery -t st -p 192.168.1.10
    sudo iscsiadm -m discovery -t st -p 192.168.2.10
  4. Подключитесь ко всем обнаруженным таргетам:
    sudo iscsiadm -m node -l
  5. Настройте файл /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" выбирает путь с наименьшей расчетной задержкой.
  6. Перезапустите демон multipath и проверьте конфигурацию:
    sudo systemctl restart multipathd
    sudo multipath -ll
    Вывод команды должен показать одно устройство mpathX с двумя активными путями в состоянии ready running.

Теперь вы можете создать файловую систему на устройстве /dev/mapper/mpathX и смонтировать его. При отключении одного из сетевых кабелей команда multipath -ll покажет изменение состояния пути на failed faulty, но доступ к данным сохранится через второй путь.

Настройка failover для Fibre Channel: особенности и проверка

В среде FC настройка multipathing часто сводится к корректной настройке операционной системы, так как пути физически предоставляются HBA. После подключения кабелей и настройки зонирования на коммутаторе выполните следующие шаги:

  1. Убедитесь, что система видит оба HBA и их порты:
    sudo lspci | grep -i fibre
    sudo systool -c fc_host -v
  2. Проверьте, что виден один и тот же LUN с разных портов. Используйте lsscsi или загляните в /sys/class/fc_transport/.
  3. Конфигурация /etc/multipath.conf для FC часто проще, так как устройство уже корректно определяется. Убедитесь, что в секции blacklist не добавлены ваши HBA.
  4. Для тестирования 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) должны быть записаны данные и их реплики.

Маршрутизация операции записи выглядит так:

  1. Клиент вычисляет PG для объекта.
  2. CRUSH определяет список OSD для этой PG (например, первичный OSD и два вторичных).
  3. Клиент отправляет данные напрямую на первичный OSD.
  4. Первичный 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

Если система теряет путь к хранилищу, действуйте по порядку:

  1. Проверьте состояние путей: sudo multipath -ll. Ищите пути в состоянии failed или faulty.
  2. Убедитесь, что iSCSI-сессии активны: sudo iscsiadm -m session -P 3.
  3. Проверьте сетевую связность до IP-адресов таргета: ping 192.168.1.10.
  4. Изучите логи:
    sudo journalctl -u multipathd -u iscsid --since "5 minutes ago"
    sudo dmesg | tail -50
  5. Проверьте, видны ли устройства на уровне 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 - позволяет не просто следовать инструкциям, а осознанно проектировать и поддерживать надежные, производительные системы хранения. Используйте приведенные команды и рекомендации как основу для построения инфраструктуры, которая будет соответствовать требованиям ваших приложений.

Поделиться:
Сохранить гайд? В закладки браузера