Вопрос или проблема
Я пробую настроить 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, которые временно исключают устройство, чтобы избежать возможных повреждений данных.
Возможные Решения
-
Настройка DM Multipath:
- Вы попробовали отключить встроенную мультипутевую функциональность NVMe, установив параметр
nvme_core.multipath=N
. Вполне возможно, что в текущей конфигурации и сборке ядра Debian Bookworm и Proxmox 8.2.4 могут существовать ограничения, влияющие на или реагирование на путь. - Проверка версии ядра и драйверов может помочь. Убедитесь, что у вас установлены последние обновления, так как в более новых версиях могут быть исправлены известные ошибки.
- Вы попробовали отключить встроенную мультипутевую функциональность NVMe, установив параметр
-
Конфигурация NVMe Подсистемы:
- По поводу вашей попытки экспорта блока через разные NVMe подсистемы, порты и пространства имен, важно удостовериться, что каждая подсистема имеет правильные параметры конфигурации и поддерживает мультипуть.
- Проверьте настройки на уровне целевого устройства, чтобы убедиться, что каждая подсистема настроена на корректную работу с DM Multipath. Возможно, потребуется пересоздать или обновить конфигурацию экспорта.
-
Использование Альтернативных Протоколов:
- Рассмотрение возможности использования других протоколов, например, iSCSI с мультипутевым управлением. Это позволит вам использовать многопоточность для повышения отказоустойчивости.
- Однако при этом может потребоваться дополнительная настройка для интеграции с ZFS.
-
Мониторинг и Логирование:
- Настройте более детальный мониторинг и логирование, чтобы проявить дополнительные приоритеты, связанные с работой NVMe и сбоями путей. Это может привести к лучшему пониманию поведения системы и выявлению узких мест.
-
Обратитесь к Сообществу:
- Исследуйте сообщества и форумы, такие как форумы Proxmox и другие платформы по виртуализации и управлению хранилищем. Нередко аналогичные проблемы были решены другими пользователями.
Заключение
Сложности, возникшие при использовании NVMe-oF с ZFS, требуют системного подхода. С одной стороны, стоит настроить систему для более удачного управления путями с помощью DM Multipath, а с другой — переосмыслить архитектуру хранения, принимая во внимание отказоустойчивость и доступность. Надеемся, что представленные советы помогут вам добиться оптимизации вашей настройки и повышения производительности.