NVMe-oF, многопутевая передача и обработка сбоев путей

Вопрос или проблема

Я пробую настроить ZFS на блоках устройств, которые доступны по сети, с использованием NVME-oF. Я построил это через RDMA, используя интерфейсы ConnectX-3 IB, и TCP, используя классическое соединение Ethernet 10. Встроенная функция многопутевой передачи NVMe обрабатывает два пути к экспортированному устройству, и все работает хорошо, пока не произойдет сбой одного из путей.

Когда я деактивирую либо RDMA, либо TCP экспорт, инициатор отключает все устройство nvme на 10 секунд, прежде чем снова активировать его с оставшимся RDMA или TCP соединением. Проблема заключается в длительной задержке между сбоем соединения и восстановлением устройства на стороне инициатора. Я ожидал, что устройство NVMe будет работать без перебоев, если хотя бы одно соединение активно, но, похоже, это не так. Я подтвердил это поведение в некоторой документации по NVMe (раздел “Восстановление при ошибке пути”). Меня это не устраивает, потому что если мой пул ZFS используется во время такого сбоя, то все обращения к файловой системе пула зависают, даже после того как устройство NVMe вернулось в онлайн.

Я попытался настроить систему так, чтобы не использовать встроенную функцию многопутевой передачи NVMe, а вместо этого использовать DM multipath (добавив nvme_core.multipath=N в командную строку ядра инициатора и перезагрузив), но наблюдаю такое же поведение. Я также пробую экспортировать то же блок-устройство через отдельные подсистемы NVMe, порты и пространства имен (не только через различные порты NVMe) и использовать DM multipath, но тогда инициатор, похоже, может настроить только одно устройство NVMe для экспортируемого блок-устройства, вместо ожидаемых 2, и поэтому я не могу использовать DM multipath тоже.

В настоящее время функция многопутевой передачи кажется бесполезной для обеспечения отказоустойчивости. Кто-нибудь знает о каком-либо обходном решении этой проблемы?

Использую Debian Bookworm и Proxmox 8.2.4 в качестве ОС как для целевого устройства, так и для инициатора.

Ответ или решение

NVMe-oF, Мультипуть и Обработка Ошибок Путей: Профессиональное Рекомендательное Руководство

Введение

С настройкой NVMe-over-Fabrics (NVMe-oF) для использования с ZFS возникает множество вопросов, особенно в контексте управления несколькими путями и поведения системы при сбое одного из них. Данная статья освещает проблемы, с которыми вы столкнулись, и предлагает возможные пути их решения.

Проблема: Задержка при Обработке Сбоев Путей

Вы правильно заметили, что при отключении одного из экспортов (RDMA или TCP) инициатор отключает целый NVMe-устройство на 10 секунд, даже если один из путей по-прежнему активен. Это приводит к тому, что все операции со файловой системой ZFS приостанавливаются, что недопустимо для многих производственных сред.

Принцип Работы NVMe

Основой NVMe является его встроенная функция мультипути, которая должна обеспечивать надежность и отказоустойчивость. Однако, как вы подтвердили, поведение инициатора при сбое пути не соответствует вашим ожиданиям. По данным документации от SPDK, это поведение обусловлено механизмами управления ошибками в протоколе NVMe, которые временно исключают устройство, чтобы избежать возможных повреждений данных.

Возможные Решения

  1. Настройка DM Multipath:

    • Вы попробовали отключить встроенную мультипутевую функциональность NVMe, установив параметр nvme_core.multipath=N. Вполне возможно, что в текущей конфигурации и сборке ядра Debian Bookworm и Proxmox 8.2.4 могут существовать ограничения, влияющие на или реагирование на путь.
    • Проверка версии ядра и драйверов может помочь. Убедитесь, что у вас установлены последние обновления, так как в более новых версиях могут быть исправлены известные ошибки.
  2. Конфигурация NVMe Подсистемы:

    • По поводу вашей попытки экспорта блока через разные NVMe подсистемы, порты и пространства имен, важно удостовериться, что каждая подсистема имеет правильные параметры конфигурации и поддерживает мультипуть.
    • Проверьте настройки на уровне целевого устройства, чтобы убедиться, что каждая подсистема настроена на корректную работу с DM Multipath. Возможно, потребуется пересоздать или обновить конфигурацию экспорта.
  3. Использование Альтернативных Протоколов:

    • Рассмотрение возможности использования других протоколов, например, iSCSI с мультипутевым управлением. Это позволит вам использовать многопоточность для повышения отказоустойчивости.
    • Однако при этом может потребоваться дополнительная настройка для интеграции с ZFS.
  4. Мониторинг и Логирование:

    • Настройте более детальный мониторинг и логирование, чтобы проявить дополнительные приоритеты, связанные с работой NVMe и сбоями путей. Это может привести к лучшему пониманию поведения системы и выявлению узких мест.
  5. Обратитесь к Сообществу:

    • Исследуйте сообщества и форумы, такие как форумы Proxmox и другие платформы по виртуализации и управлению хранилищем. Нередко аналогичные проблемы были решены другими пользователями.

Заключение

Сложности, возникшие при использовании NVMe-oF с ZFS, требуют системного подхода. С одной стороны, стоит настроить систему для более удачного управления путями с помощью DM Multipath, а с другой — переосмыслить архитектуру хранения, принимая во внимание отказоустойчивость и доступность. Надеемся, что представленные советы помогут вам добиться оптимизации вашей настройки и повышения производительности.

Оцените материал
Добавить комментарий

Капча загружается...