User Tools

Site Tools


storage_spaces_direct_-_настройка

Настройка гиперконвергентного отказоустойчивого кластера Storage Spaces Direct

1. Развертываем две ноды: настраиваем BIOS и оборудование, устанавливаем системы на отдельные RAID-массивы, подключаем в сети (heartbeat между нодами) и другие.

2. Обновляем прошивки, драйвера, а также устанавливаем одинаковый набор обновлений систем Windows.

3. Диски для Storage Spaces Direct должны быть directly attached, без всяких RAID-контроллеров и должны видеться в системе как обычные диски в диспетчере устройств.

4. Устанавливаем на каждой ноде нужный набор ролей и фич:

Install-WindowsFeature -Name "Hyper-V", "Failover-Clustering", "Data-Center-Bridging", "RSAT-Clustering-PowerShell", "Hyper-V-PowerShell", "FS-FileServer", "FS-Data-Deduplication"

5. MS рекомендует использовать скрипт очистки дисков, которые будут участвовать в массиве. Этот скрипт рассчитан на удаленное использование.

# Fill in these variables with your values
$ServerList = "Server01", "Server02", "Server03", "Server04"
Invoke-Command ($ServerList) {
Update-StorageProviderCache
Get-StoragePool | ? IsPrimordial -eq $false | Set-StoragePool -IsReadOnly:$false -ErrorAction SilentlyContinue
Get-StoragePool | ? IsPrimordial -eq $false | Get-VirtualDisk | Remove-VirtualDisk -Confirm:$false -ErrorAction SilentlyContinue
Get-StoragePool | ? IsPrimordial -eq $false | Remove-StoragePool -Confirm:$false -ErrorAction SilentlyContinue
Get-PhysicalDisk | Reset-PhysicalDisk -ErrorAction SilentlyContinue
Get-Disk | ? Number -ne $null | ? IsBoot -ne $true | ? IsSystem -ne $true | ? PartitionStyle -ne RAW | % {
$_ | Set-Disk -isoffline:$false
$_ | Set-Disk -isreadonly:$false
$_ | Clear-Disk -RemoveData -RemoveOEM -Confirm:$false
$_ | Set-Disk -isreadonly:$true
$_ | Set-Disk -isoffline:$true
}
Get-Disk | Where Number -Ne $Null | Where IsBoot -Ne $True | Where IsSystem -Ne $True | Where PartitionStyle -Eq RAW | Group -NoElement -Property FriendlyName
} | Sort -Property PsComputerName, Count

6. Настраиваем heartbeat-сеть кластера. В случае двух нод с двумя 25-гигабитными адаптерами можно подключить каждый к противоположному (по крайней мере, HP рекомендует делать именно так) и сделать две разных сети. В настройках адаптеров и настройках BIOS выставляем iWARP в качестве network-direct technology. Переименовываем адаптеры для наглядности в CLUSTER_1 и CLUSTER_2. CLUSTER_1 одного сервера будет подключен в CLUSTER_2 другого и наоборот.

На всякий случай включаем RDMA явно, командлетом на обоих нодах:

Enable-NetAdapterRdma CLUSTER_1
Enable-NetAdapterRdma CLUSTER_2

И проверяем выполнение:

Get-NetAdapterRdma CLUSTER_1
Get-NetAdapterRdma CLUSTER_2

Должны получить что-то вроде:

CLUSTER_1 Chelsio Network Adapter         True

Проверяем, что протокол SMB видит наличие RDMA:

Get-SmbClientNetworkInterface

Должны получить, что:

RDMA capable = true

На сайте Microsoft есть скрипт, который проверяет работу RDMA. В инструкции, которая приложена к статье описывается его выполнение. Сначала нужно скачать DiskSpd.exe, а потом выполнить команду (для iWARP -IsRoCE должно быть именно false):

C:\TEST\Test-RDMA.PS1 -IfIndex 3 -IsRoCE $false -RemoteIpAddress 10.5.5.2 -PathToDiskspd C:\TEST\Diskspd-v2.0.17\amd64fre\

Скрипт тестирует запись на удаленный сервер при помощи RDMA. В нашем случае скрипт создал файл, успешно передавал данные, но по какой-то причине в конце выдавал странную ошибку о том, что нет прав на запись. Но трафик по RDMA шёл и данные отлично передавались, о чем можно посмотреть было в системном мониторе по группе показателей RDMA. Т.е., на ошибку можно забить потому что данные передаются вполне успешно и передаются именно с использованием RDMA.

7. Производим валидацию кластера со станции управления. Кстати, на ней должен быть установлен RSAT с компонентами администрирования кластера. Проверяем получившийся html-отчёт и если там нет проблем - идем дальше.

Test-Cluster -Node node1, node2 -Include "Storage Spaces Direct", "Inventory", "Network", "System Configuration"

8. Создаем новый кластер с новым статическим адресом и именем. Без общего стораджа, он создается отдельно.

New-Cluster –Name <ClusterName> –Node node1, node2 –StaticAddress <X.X.X.X> –NoStorage

9. Если кластер имеет чётное количество нод, то обязательно сделать witness. Это довольно удобно делать через mmc-оснастку управления кластером. В нашем случае был выбран файловый ресурс на серерве sql03. В права файлового ресурса обязательно нужно добавить учетные записи нод кластера и аккаунт самого кластера с полным доступом.

Посмотреть конфигурацию witness можно используя командлет:

Get-ClusterQuorum | fl

А проверить статус голосования конкретной ноды можно следующим способом:

Get-ClusterNode | Select-Object *

В выводе нужно поискать значение параметра NodeWeight.

10. Включаем Storage Spaces Direct для кластера командой:

Enable-ClusterStorageSpacesDirect –CimSession <ClusterName>

11. Создаем шаблон стораджа, который мы хотим использовать. Для нашего кластера был выбран nested mirror - сервера зеркалируют друг друга, плюс в каждом массиве каждого сервера есть зеркало. Такой шаблон оставляет для использования лишь 25% общей ёмкости дисков, но является во-первых достаточно надёжным и позволяет кластеру одновременно выдержать два аппаратных сбоя сразу: например, сервер и диск, два диска и т.д., а во-вторых такая конфигурация является более производительной, чем, например, nested mirror accelerated parity, где полезная ёмкость дисков составляет 35-40 процентов, а отказоустойчивость организуется по типу RAID 5.

New-StorageTier -StoragePoolFriendlyName S2D* -FriendlyName NestedMirror -ResiliencySettingName Mirror -MediaType SSD -NumberOfDataCopies 4

12. После создания шаблона мы можем переходить к созданию конкретных разделов, которые будут использоваться для хранения данных. Для того, чтобы понять - какого максимального размера раздел мы сможем создать - лучше подключиться к кластеру при помощи Windows Admin Center и посмотреть, сколько места дисков осталось незарезервированным. Storage Spaces резервирует определенное количество места для нужд восстановления на горячую. Т.е. если в кластере вылетит один из дисков, а новый не будет сразу же воткнут “на горячую” - кластер использует это зарезервированное пространство для восстановления. Итого: нам нужно посмотреть незанятое место и разделить в нашем случае на 4, т.к. nested mirror позволит использовать 25 процентов. Затем мы запускаем создание раздела командой, в которой указываем созданный выше шаблон, название раздела и его объем:

New-Volume -StoragePoolFriendlyName S2D* -FriendlyName Volume01 -StorageTierFriendlyNames NestedMirror -StorageTierSizes 5900GB

13. Теперь общий раздел будет доступен для записи на всех нодах по следующему пути: c:\ClusterStorage\Volume01. Раздел создается в файловой системе ReFS по умолчанию. Она сильно оптимизирована как для Storage Spaces, так и для задач виртуализации HYPER-V.

14. Для ускорения операций чтения стоит настроить CSV in-memory read cache. Размер обычно используют в районе 2ГБ, но т.к. на серверах нет нехватки в памяти, было решено поставить 4ГБ на каждом. Скрипт, который можно использовать на станции управления, подключаясь к кластеру удаленно:

$ClusterName = "master1"
$CSVCacheSize = 4096 #Size in MB

Write-Output "Setting the CSV cache..."
(Get-Cluster $ClusterName).BlockCacheSize = $CSVCacheSize

$CSVCurrentCacheSize = (Get-Cluster $ClusterName).BlockCacheSize
Write-Output "$ClusterName CSV cache size: $CSVCurrentCacheSize MB"

15. После создания дискового раздела - не лишним будет измерить его производительность. Для этого лучше использовать утилиту от MS DiskSpd. Некоторые другие утилиты могут показывать неадекватные результаты, поскольку, не умеют работать с CSV-in memory cache. Скачиваем утилиту и запускаем с такими параметрами:

 .\diskspd -t2 -o32 -b4k -r4k -w50 -d120 -Sh -D -L -c5G C:\ClusterStorage\Volume01\IO2.dat > test02.txt

В данном случае процент операций записи и чтения будет составлять 50% - за это отвечает параметр -w50. Результаты можно посмотреть в текстовом файле. В самом конце они разбиты на чтение, запись и полную сумму. Производительность хранилища вышла: 81393.54 I/O per s. Утилиту можно использовать на любых дисках, не обязательно массивах Storage Spaces Direct.

16. После создания радела стоит включить функцию дедупликации данных, которая позволяет не записывать дубликаты данных, экономя место. Удобно это сделать через WAC в свойствах раздела. Если соответствующая роль (“FS-Data-Deduplication”) на обоих нодах была установлена - нужно только отметить соответствующий переключатель, после чего функция заработает.

17. После создания кластера, виртуальные машины можно свободно перемещать между нодами. Выключение одной из нод вызовет автоматическое перемещение виртуальных машин на другую. После включения виртуальные машины вернутся обратно.

18. Для обновления нод нужно использовать механизм cluster aware updating. Можно это делать через WAC. Для того, чтобы он не ругался на ошибку CredSPP - нужно обязательно сохранить свой аккаунт в WAC и отметить использование этих учётных данных для всех соединений.

19. Корректную перезагрузку ноды кластера s2d следует осуществлять в таком порядке:  Проверить все ли диски в нормальном состоянии: 

Get-VirtualDisk

Сделать Drain ролей перезагружаемой ноды (виртуальные машины будут мигрированы на другую ноду):

Suspend-ClusterNode -Drain

Кластер переидет в состояние “paused” и после миграции машин можно будет перезагрузить/выключить его. После перезагрузки возвращаем ноду в кластер: 

Resume-ClusterNode

Либо, чтобы сразу же вернуть ей прежние роли, запустить:  

 
Resume-ClusterNode –Failback Immediate

После возвращения будет произведена пересинхронизация стораджа, за которой можно наблюдать при помощи команды: 

Get-StorageJob

Полезные ссылки

Основная статья по Storage Spaces Direct и всеми его аспектами MS:

https://docs.microsoft.com/en-us/windows-server/storage/storage-spaces/storage-spaces-direct-overview

Мониторинг здоровья стораджа:

https://docs.microsoft.com/en-us/windows-server/storage/storage-spaces/understand-storage-resync

Механизм обновления прошивок дисков:

https://docs.microsoft.com/en-us/windows-server/storage/update-firmware

Утилита DiskSpd

https://docs.microsoft.com/en-us/azure-stack/hci/manage/diskspd-overview

Неплохой пример деплоя, правда, на Server Core:

https://techblog.ptschumi.ch/windows-server/storage-spaces-direct/deploy-storage-spaces-direct-on-two-node-cluster-with-windows-server-core/

Файлы

storage_spaces_direct_-_настройка.txt · Last modified: 2024/09/25 12:33 by jp