Вопрос или проблема
Я работаю в StarWind и в настоящее время изучаю путь ввода-вывода данных в Storage Spaces Direct для своих блогов.
Я столкнулся с необычным поведением: в 2-узловом кластере S2D, сконфигурированном с Nested Mirror-Accelerated Parity, сетевой трафик на запись операций удвоился.
Во время тестов на запись произошло что-то неожиданное: при записи со скоростью 1 GiB/c, сетевой трафик к партнерскому узлу постоянно составлял 2 GiB/c вместо ожидаемых 1 GiB/c.
Может быть, это связано с тем, что S2D настраивает зеркальный уровень хранения с четырьмя копиями данных (NumberOfDataCopies = 4), где S2D записывает две копии данных на локальном узле и еще две на партнерском узле?
Детали настройки:
Среда — это 2-узловой кластер S2D, работающий на Windows Server 2022 Datacenter 21H2 (сборка ОС 20348.2527). Я следовал рекомендациям Microsoft по resiliency для вложенных конфигураций, описанным здесь: https://learn.microsoft.com/en-us/azure-stack/hci/concepts/nested-resiliency#resiliency-options и создал том с вложенным зеркалом и ускоренной четностью с помощью следующих команд:
New-StorageTier -StoragePoolFriendlyName s2d-pool -FriendlyName NestedPerformance -ResiliencySettingName Mirror -MediaType SSD -NumberOfDataCopies 4
New-StorageTier -StoragePoolFriendlyName s2d-pool -FriendlyName NestedCapacity -ResiliencySettingName Parity -MediaType SSD -NumberOfDataCopies 2 -PhysicalDiskRedundancy 1 -NumberOfGroups 1 -FaultDomainAwareness StorageScaleUnit -ColumnIsolation PhysicalDisk -NumberOfColumns 4
New-Volume -StoragePoolFriendlyName s2d-pool -FriendlyName Volume01 -StorageTierFriendlyNames NestedPerformance, NestedCapacity -StorageTierSizes 820GB, 3276GB
Тестовая виртуальная машина была создана на этом томе и специально размещена на узле, которому принадлежит том, избегая какого-либо перенаправления ввода-вывода (так как объемы ReFS работают в режиме перенаправления файловой системы).
Подход к тестированию:
Внутри виртуальной машины я проводил тесты с 1M на чтение и 1M на запись, устанавливая контрольные точки для ограничения производительности до 1 GiB/c и ограничивая сетевой трафик до одной сети кластера. Цель заключалась в мониторинге использования сетевого интерфейса.
Во время тестов на чтение сетевые интерфейсы оставались тихими, что подтверждало, что чтения обрабатывались локально.
Однако, снова, во время тестов на запись, при записи со скоростью 1 GiB/c, я заметил, что сетевой трафик к партнерскому узлу постоянно достигал 2 GiB/c, вместо ожидаемых 1 GiB/c.
Есть идеи, почему этот удвоенный трафик возникает при нагрузках на запись?
Буду очень благодарен за любые insights!
Для получения дополнительной информации, вот ссылка на мой блог с полным разбором: https://www.starwindsoftware.com/blog/microsoft-s2d-data-locality
Ответ или решение
Увеличенный сетевой трафик при записи в кластер S2D с вложенным зеркалом и ускоренной парити: причины и решения
Введение
При тестировании I/O в кластере Storage Spaces Direct (S2D) с вложенной зеркальной и ускоренной паритной конфигурацией вы столкнулись с неожиданным поведением: при записи с нагрузкой 1 GiB/c сетевой трафик к партнерскому узлу стабильно составил 2 GiB/s. Данное явление, безусловно, вызывает вопросы, требующие подробного объяснения с учетом архитектурных особенностей S2D и конфигурации, которую вы применили.
Архитектура S2D и работа с трафиком
Для начала разберёмся с конфигурацией вашей системы. Вы создали два уровня хранения с настройками:
-
Вложенный уровень производительности (NestedPerformance):
- Резилиентность: Зеркало
- Копии данных: 4
-
Вложенный уровень ёмкости (NestedCapacity):
- Резилиентность: Паритет
- Копии данных: 2
Эта комбинация предполагает использование технологий, по типу хранения и записи данных, которые могут приводить к увеличению сетевого трафика.
Почему увеличивается трафик при записи?
1. Копирование данных
При использовании настройки с четырьмя копиями данных S2D создает две копии на локальном узле и две копии на удалённом узле. Это означает, что при записи данных происходит следующее:
- Запись на локальном узле: запись данных происходит в два экземпляра на локальном узле.
- Запись на удалённом узле: для обеспечения устойчивости также сохраняются две копии на удалённом узле.
Таким образом, при записи 1 GiB данных каждый из узлов фактически должен обработать 1 GiB данных несколько раз, что в итоге приводит к 2 GiB трафика в сторону партнерского узла.
2. Параллельность записи
S2D оптимизирован для работы с сетью, что позволяет осуществлять параллельные записи. Однако, поскольку вы используете зеркалирование, система повторно отправляет данные на удалённый узел для создания дополнительных копий, что удваивает сетевой поток.
3. Работа сетевого протокола
Сетевые протоколы, такие как SMB, могут вносить свои особенности в поведение трафика. Например, при использовании определённых параметров конфигурирования в SMB, данные могут быть дублированы в процессе передачи, что также может привести к увеличению трафика.
Выводы и рекомендации
Ваше наблюдение о doubled network traffic – это ожидаемое поведение в условиях, когда в конфигурации предусмотрено создание нескольких копий данных. Вот несколько рекомендаций для оптимизации работы:
-
Переосмотрите настройки зеркалирования: Если избыточный трафик представляет проблему, возможно, стоит рассмотреть уменьшение количества копий данных.
-
Мониторинг и анализ: Убедитесь, что у вас настроены инструменты мониторинга, чтобы отслеживать трафик и производительность сети, что поможет в дальнейшем анализе.
-
Тестируйте альтернативные настройки: Для более глубокого понимания, попробуйте тестирование с различными конфигурациями S2D, изменяя количество копий или тип резилиентности.
Эта информация должна помочь вам в написании вашего блога о S2D и улучшении понимания тонкостей работы системы. Подобные архитектурные вопросы способствуют более глубокому пониманию взаимодействия компонентов в высоконагруженных системах.
Для получения дополнительной информации, пожалуйста, ознакомьтесь с полным анализом, представленным в вашей статье StarWind Blog, где вы найдете более детальный взгляд на работу S2D и его оптимизацию.