Storage Spaces Direct в Windows Server: гиперконвергенция

Что такое Storage Spaces Direct

Storage Spaces Direct (S2D) — технология Microsoft, которая позволяет собрать программно-определяемое хранилище (SDS) из обычных локальных дисков ваших серверов. Никаких SAN, никаких NAS — дисковые ресурсы нескольких машин объединяются в единый отказоустойчивый пул прямо через сеть.

Чем это интересно на практике:

  • Нет зависимости от SAN — берёте обычные SATA/SAS/NVMe диски прямо из серверов, и этого достаточно
  • Встроенная отказоустойчивость — зеркалирование, erasure coding, тройное зеркало: выбираете то, что подходит под задачу
  • Линейное масштабирование — добавили узел и получили сразу и ёмкость, и производительность
  • Интеграция с Hyper-V — классическая гиперконвергенция: compute и storage живут на одних и тех же узлах
  • Кеширование на SSD/NVMe — автоматический tiering сам разберётся, какие данные горячие, и подтянет их поближе

S2D работает только на Windows Server 2016/2019/2022 в редакции Datacenter. Standard edition — это другая история: только обычные Storage Spaces, без Direct. Стартовать можно с 2 узлов, но тогда обязательно нужен witness — без него кворум не выживет.

Требования к оборудованию

Что нужно для нормального продакшена:

  • 2–16 серверов под управлением Windows Server 2022 Datacenter
  • Сетевые адаптеры — меньше 10 GbE даже не рассматривайте, а для реальной нагрузки берите 25 GbE RDMA: iWARP или RoCE
  • Диски — минимум 2 на сервер (не считая диска под ОС); хороший вариант: NVMe под кеш плюс HDD или SSD под ёмкость
  • RAM — от 64 ГБ на узел, иначе кеширование метаданных будет работать не так, как ожидаете
  • Идентичная конфигурация — все узлы должны иметь одинаковый набор дисков, никаких «у одного 4 диска, у другого 6»

Если планируете RDMA — коммутаторы должны поддерживать DCB (Data Center Bridging) и PFC (Priority Flow Control). Без этого RDMA просто не заработает как надо.

Подготовка узлов кластера

На каждом узле ставим нужные роли и компоненты:

# На каждом узле кластера
Install-WindowsFeature -Name Hyper-V, Failover-Clustering, `
    Data-Center-Bridging, RSAT-Clustering-PowerShell, `
    Hyper-V-PowerShell -IncludeManagementTools -Restart

Настраиваем сетевые адаптеры под трафик хранилища — лучше сразу выделенная сеть, без смешивания с остальным:

# Создание виртуального коммутатора для RDMA
New-VMSwitch -Name "S2D-Switch" -NetAdapterName "NIC1","NIC2" `
    -EnableEmbeddedTeaming $true -AllowManagementOS $true

# Настройка vNIC для хранилища
Add-VMNetworkAdapter -ManagementOS -Name "Storage1" -SwitchName "S2D-Switch"
Add-VMNetworkAdapter -ManagementOS -Name "Storage2" -SwitchName "S2D-Switch"

# Назначение VLAN и IP
Set-VMNetworkAdapterVlan -ManagementOS -VMNetworkAdapterName "Storage1" `
    -Access -VlanId 100
New-NetIPAddress -InterfaceAlias "vEthernet (Storage1)" `
    -IPAddress 10.10.100.1 -PrefixLength 24

Включаем RDMA на адаптерах хранилища:

Enable-NetAdapterRDMA -Name "vEthernet (Storage1)","vEthernet (Storage2)"
Get-NetAdapterRDMA | Format-Table Name, Enabled

Валидация и создание кластера

Перед созданием кластера запускаем валидацию — она честно покажет всё, что настроено криво:

Test-Cluster -Node "S2D-Node1","S2D-Node2","S2D-Node3","S2D-Node4" `
    -Include "Storage Spaces Direct","Inventory","Network","System Configuration"

Все тесты должны вернуть «Suitable for Clustering». Предупреждения — не повод продолжать, исправьте их сначала.

Создаём кластер:

New-Cluster -Name "S2D-Cluster" `
    -Node "S2D-Node1","S2D-Node2","S2D-Node3","S2D-Node4" `
    -StaticAddress 10.10.0.100 `
    -NoStorage

Параметр -NoStorage здесь критичен — без него кластер попытается сам добавить общие диски, а этого нам не нужно. S2D берёт управление хранилищем в свои руки.

Настройка кворума

Для четырёхузлового кластера настраиваем облачный witness — это проще и надёжнее файлового в большинстве случаев:

# Облачный witness в Azure
Set-ClusterQuorum -CloudWitness `
    -AccountName "s2dwitness" `
    -AccessKey "ключ_Azure_Storage_Account"

# Или файловый witness на отдельном сервере
Set-ClusterQuorum -FileShareWitness "\\witness-server\S2D-Witness$"

В двухузловом кластере witness — не опция, а необходимость. Потеряли один узел без witness — потеряли кворум и весь кластер встал.

Включение Storage Spaces Direct

Активируем S2D на кластере:

Enable-ClusterStorageSpacesDirect -Confirm:$false

Команда сама найдёт все подходящие диски, создаст пул и настроит кеширование. На практике это занимает 5–15 минут — просто ждите.

Смотрим, что получилось:

# Состояние пула
Get-StoragePool | Where-Object IsPrimordial -eq $false | Format-List FriendlyName, OperationalStatus, HealthStatus, Size, AllocatedSize

# Физические диски
Get-PhysicalDisk | Sort-Object DeviceId | Format-Table FriendlyName, SerialNumber, MediaType, Size, Usage

# Уровни хранения (tiers)
Get-StorageTier | Format-Table FriendlyName, MediaType, ResiliencySettingName, Size

S2D сам разберётся, что NVMe и SSD — это кеш, а HDD — ёмкость. Если у вас all-flash конфигурация и все диски одного типа — кеширования не будет, и это совершенно нормальное поведение.

Создание томов

Создаём тома с нужным уровнем отказоустойчивости:

# Трёхстороннее зеркало (выдерживает отказ 2 узлов)
New-Volume -FriendlyName "VM-Storage" `
    -StoragePoolFriendlyName "S2D on S2D-Cluster" `
    -Size 2TB `
    -ResiliencySettingName Mirror `
    -PhysicalDiskRedundancy 2 `
    -FileSystem CSVFS_ReFS

# Зеркальное ускоренное Parity (MirrorAcceleratedParity)
# Экономичнее для холодных данных
New-Volume -FriendlyName "Archive" `
    -StoragePoolFriendlyName "S2D on S2D-Cluster" `
    -Size 5TB `
    -ResiliencySettingName Parity `
    -PhysicalDiskRedundancy 2 `
    -FileSystem CSVFS_ReFS

Тома сразу подхватываются как CSV (Cluster Shared Volumes) и монтируются в C:\ClusterStorage\ на всех узлах кластера.

ТипЭффективностьПроизводительностьМин. узлов
2-way Mirror50%Высокая2
3-way Mirror33%Высокая4
Single Parity67–80%Средняя3
Dual Parity50–67%Низкая (запись)4

Мониторинг здоровья кластера

В S2D есть встроенный Health Service — он следит за состоянием кластера и хранилища без лишних телодвижений:

# Общее состояние кластера
Get-HealthFault | Format-Table FaultType, FaultingObjectDescription, Reason

# Производительность томов
Get-Volume -CimSession S2D-Cluster | Where-Object FileSystemType -eq "CSVFS" |
    Get-ClusterPerf | Format-Table FriendlyName, IOPs, Throughput, Latency

# Состояние физических дисков
Get-PhysicalDisk -CimSession S2D-Cluster | Format-Table FriendlyName, `
    OperationalStatus, HealthStatus, Usage, Size

# Ребалансировка после замены диска
Optimize-StoragePool -FriendlyName "S2D on S2D-Cluster"

Подключите Windows Admin Center — получите нормальный графический интерфейс с историей производительности, алертами и управлением томами без постоянного PowerShell.

Алерты через PowerShell

Для уведомлений сделайте простой скрипт мониторинга:

$Faults = Get-HealthFault
if ($Faults) {
    $Body = $Faults | Format-Table FaultType, Reason -AutoSize | Out-String
    Send-MailMessage -To "admin@company.ru" `
        -From "s2d-monitor@company.ru" `
        -Subject "S2D ALERT: $($Faults.Count) проблем" `
        -Body $Body -SmtpServer "smtp.company.ru"
}

# Проверка свободного места
Get-Volume -CimSession S2D-Cluster | Where-Object {
    $_.FileSystemType -eq "CSVFS" -and 
    ($_.SizeRemaining / $_.Size) -lt 0.15
} | ForEach-Object {
    Write-Warning "Том $($_.FriendlyName): осталось $([math]::Round($_.SizeRemaining/1GB))GB"
}

Обслуживание и масштабирование

Когда нужно обслужить узел — обновить, поменять железо — переводим его в режим обслуживания:

# Приостановка узла (VM мигрируют на другие узлы)
Suspend-ClusterNode -Name "S2D-Node2" -Drain

# После обслуживания
Resume-ClusterNode -Name "S2D-Node2" -Failback Immediate

Добавить новый узел в кластер:

# 1. Подготовьте узел (роли, сеть)
# 2. Добавьте в кластер
Add-ClusterNode -Name "S2D-Node5" -Cluster "S2D-Cluster"

# 3. Диски нового узла автоматически добавятся в пул
# 4. Запустите оптимизацию для ребалансировки
Optimize-StoragePool -FriendlyName "S2D on S2D-Cluster"

Что делать, если диск умер:

  1. Физически вытащите сломанный диск и вставьте новый
  2. Новый диск появится в пуле сам — ничего дополнительно делать не нужно
  3. S2D автоматически запустит восстановление (repair) данных
  4. Следите за прогрессом через Get-StorageJob

Скорость восстановления зависит от объёма и пропускной способности сети. На практике 2 ТБ при 25 GbE укладываются в 15–30 минут.

Часто задаваемые вопросы

Нет, Storage Spaces Direct — исключительно Datacenter edition. В Standard есть обычные Storage Spaces, но там совсем другая история: общая полка JBOD через SAS, без объединения локальных дисков по сети. Когда считаете стоимость кластера, сразу закладывайте лицензию Datacenter на каждый узел — это существенно влияет на бюджет.

10 GbE — это минимум, с которым S2D вообще поднимется. Для реальной нагрузки берите 25 GbE с RDMA: RoCEv2 или iWARP. Разница ощутима — латентность падает, CPU разгружается. И обязательно выделите отдельную сеть под S2D-трафик, не смешивайте его с клиентским и управляющим.

Трёхстороннее зеркало — это три копии данных на трёх разных узлах. Когда один узел падает, остальные два продолжают работать, данные никуда не деваются. VM, которые крутились на отказавшем узле, автоматически поднимутся на соседях — обычно это занимает меньше минуты. Параллельно S2D молча начнёт восстанавливать третью копию на свободных дисках. И даже если в этот момент упадёт ещё один узел, кластер всё равно устоит — для 3-way mirror это штатная ситуация.

Считаем полезную ёмкость просто: для 3-way mirror делите суммарный RAW на 3, для 2-way mirror — на 2, для dual parity на четырёх узлах умножайте RAW на 0.5. Конкретный пример из нашей практики: 4 узла, в каждом 4 диска по 4 ТБ — итого 64 ТБ RAW. При 3-way mirror на руках остаётся около 21 ТБ полезного пространства. И сразу закладывайте ещё 10–15% сверху на метаданные и ребалансировку — иначе потом будете удивляться, куда ушло место.

Нужна помощь с настройкой?

Если не хочется разбираться с этим самостоятельно — команда АйТи Фреш внедряла и настраивала S2D не один десяток раз за 15+ лет работы. Обслуживание от 15 000 ₽/мес.

📞 Связаться с нами
#Storage Spaces Direct#S2D#гиперконвергенция#Windows Server кластер#отказоустойчивое хранилище#HCI#Storage Pool#кластер хранения
Комментарии 0

Оставить комментарий

загрузка...