Архив рубрики: Windows

Собираем кластер виртуализации на NanoServer

Исходные данные:
Есть два севера HP DL360G8 и FC СХД MSA P2000 G3. Задача - собрать кластер виртуализации на решении NanoServer.
Процесс создания волюмов и маппинга на ноды описывать не буду, это несложно. Для кластера надо кворумный волюм и волюм данных. У меня вышло 2 волюма данных, так как при 24 дисковой хранилке в RAID-группу можно собрать только 16 дисков... Но не суть.

Итак, подготовка и установка нод будущего кластера. Я использую отдельный сервер с Windows 2016 Standard для подготовки заливочной флешки. Сам дистрибутив у меня торчит на флешке по пути F:\

Копируем с дистрибутива 2016 каталог NanoServerGenerator (например в D:\Distribs\NanoServerGenerator\)

Запускаем PS с повышенными привилегиями, меняем текущий каталог на D:\Distribs\NanoServerGenerator\

Импортируем модуль NanoServerImageGenerator (работает в повершелле ОС 8.1, 10, 12R2, 16):
Import-Module .\NanoServerImageGenerator -Verbose

Отступление:
Для создания vhd с nanoserver, для использования nanoserver в качестве виртуалки делаем так:
New-NanoServerImage -Edition Standard -DeploymentType Guest -MediaPath F:\ -BasePath .\Base -TargetPath .\NanoServerVM\nano1.vhd -ComputerName s-mos1-nano1
и указываем административный пароль. В итоге в каталоге D:\Distribs\NanoServerGenerator\ получаем каталог NanoServerVM с vhd виртуалки наносервера.
vhd расширение создаст диск для виртуальной машины первого поколения, а vhdx создаст диск для второго поколения виртуальных машин) для компьютера с именем s-mos1-nano1

Отдельно создаем такой же образ для второй ноды - s-mos1-nano2

Создаем образ для развертывания хоста виртуализации на физическом железе:
Чтобы создать образ с поддержкой OEM драйверов для аппаратной развертки на физический хост используем опцию -OEMDrivers. В моем случае я еще добавляю поддержку кластеризации, файлсервера и Hyper-V (все опции сборки перечислены здесь: https://technet.microsoft.com/ru-ru/windows-server-docs/get-started/deploy-nano-server)
New-NanoServerImage -Edition Datacenter -DeploymentType Host -MediaPath F:\ -BasePath .\Base -TargetPath .\NanoServerPhysical\NanoServer.wim -ComputerName s-mos1-nano1 -OEMDrivers -Clustering -Storage -Compute -Package Microsoft-NanoServer-SecureStartup-Package, Microsoft-NanoServer-Host-Package

Копируем WIM образ на флешку с Windows PE, загружаемся с этой флешки на хосте где надо развернуть наносервер, запускаем diskpart, находим диск, который будет системным для NanoServ (пусть это 0 диск):

select disk 0
clean
create partition primary size=100
select partition 1
format quick fs=ntfs label="SYSTEM"
active
assign letter=s
create partition primary
select partition 2
format quick fs=ntfs label="NANOSERVER"
assign letter=n

выходим из diskpart и применяем образ NanoServer (изменив путь к WIM-файлу):

Dism.exe /apply-image /imagefile:.\nano1.wim /index:1 /applydir:n:\
Bcdboot.exe n:\Windows /s s: /f ALL

Убираем флешку и перезагружаем систему с помощью команды Wpeutil.exe reboot.

На всякий случай, как создать WinPE флешку:
нужен ADK Windows 10, на клиентской машине с Windows 10, или на сервере с Windows Server 2016. Запускаем среду средств развертывания и работы с образами с повышенными привилегиями, а в ней:

copype amd64 C:\WinPE_amd64
MakeWinPEMedia /UFD C:\WinPE_amd64 F:

После запуска нод нужно получить удаленное управление. Добавляем сервера в доверенные на сервере с GUI и RSAT (использовал этот же сервер с Windows Standard 2016 Desktop Experience):
Set-Item WSMan:\localhost\Client\TrustedHosts –Value "10.131.252.13"
Set-Item WSMan:\localhost\Client\TrustedHosts –Value "10.131.252.14"

Подцепляем их в Server Manager с локальной учеткой которая настроена на удаленных серверах и запускаем удаленный PS, настраиваем DNS сервера.
Get-NetAdapter даст нам индексные номера интерфейсов (ifIndex). Даем интерфейсу LAN адреса DNS:
Set-DnsClientServerAddress -InterfaceIndex 4 -ServerAddresses ("10.131.252.98","10.131.252.99")

Добавляем машину в домен, работает только оффлайн метод. На сервере уже находящемся в домене делаем запрос:
Djoin.exe /Provision /Domain "mydomain.ru" /Machine "s-mos1-nano1" /Savefile domainjoin.djoin /REUSE

Копируем на nanserver получившийся файлик (я копирую на c$\Users\Administrator\Documents, так как туда по умолчанию смотрит remote powershell сессия) и присоединяем в домен сервер:
djoin /requestodj /loadfile domainjoin.djoin /windowspath c:\windows /localos

Перегружаем сервер:
shutdown -r -t 0
Exit-PSSession

То же самое проделываем на второй ноде.
Я через Emergency Console назначил IP адреса на вторых интерфейсах для HerartBeat. Можно и через PS.

Для нормального создания кластера нужно прописать ноды в отдельную OU, дать права на создание объектов в этой OU нодам. После этого создаем кластер из серверов:
$Servers = 's-mos1-nano1','s-mos1-nano2'
New-cluster -name s-mos1-nanocl -node $Servers -StaticAddress 10.131.252.15

Далее можно управлять кластером через оснастку на сервере с GUI и нужным компонентом RSAT.
В моем случае еще есть полка, подключенная по избыточным FC линкам к хостам с презентованными дисками кворума и данных. Нужно корректно поднять MPIO и сделать кворумный и дата диски.
Установить MPIO можно через оснастку управления на сервере c GUI или через PS:
Enable-WindowsOptionalFeature -Online -FeatureName MultiPathIO

Для включения MPIO полезен скрипт MultipathIoClaim.ps1, который я взял тут:
https://technet.microsoft.com/en-us/windows-server-docs/get-started/mpio-on-nano-server

Форматируем подключенные диски:
Get-Disk | Where partitionstyle -eq ‘raw’ | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem NTFS -Confirm:$false

Дальше мне понадобилось на хосте Windows Server 2016 развернуть RSAT. Через консоль RSAT Failover Clustering можно определить роли дисков. У меня, как я писал выше, это был один свидетель и два CSV.
Через консоль RSAT создаем нужные виртуальные свичи на нодах. Все, можно создавать виртуальные машины, делать их высокодоступными.

Подмеченные проблемы:
1. Нет поддержки Teaming. Интерфейсы сингловые, что может приводить к нежелательным отказам на сетевом уровне. Ждем включения поддержки Teaming, хоть Microsoft на замену предлагает пользоватся инструментарием виртуалнього свитчинга.
2. Нельзя назначать static IP если на интерфейсе нет линка. Проблема тянется с powershell на 2012R2.
3. Не нашел как можно деинициализировать проинициализированные диски на нодах.

Собираем отказоустойчивый Storage Spaces Direct из 5 простых серверов

Итак, в наличии имеется пять дешевых серверов Supermicro с 8 D дисками по 2Tb, подключенных через RAID контроллер Adaptec 6805, одним диском SATA малого размера, подключенным напрямую к материнской плате. На каждом сервере по 2 гигабитные сетевые карты, 16 гигабайт оперативной памяти и по два процессора Xeon E5-2670.
По одному эти сервера для меня представляют мало пользы, но вместе, они представляют из себя сырой объем в 80 терабайт, что уже может быть вкусно для файлового хранилища, без требований к скорости.
Попробую собрать из этого отказоустойчивое хранилище с использованием технологии Storage Spaces Direct. Забегая вперед, скажу что нечетное количество серверов нам понадобится для того, чтобы не заводить в кластере свидетеля. Нечетное количество нод позволяет работать кластеру без свидетеля.

На момент написания статьи в доступе был релиз Windows Server 2016 TP4. Его я и установил на все пять серверов.
ОС определила все оборудование, имеющееся на борту, за исключением SAS контроллера с идентификатором PCI\VEN_8086&DEV_1D6B&CC_0107, что соответствует Intel(R) C600 Series Chipset SAS RAID, который мне сейчас не понадобится.

sas-controller-unidentified

RAID контроллер позволяет презентовать подключенные к нему диски в виде JBOD, что в нашем случае идеальный вариант.

Первая проблема, которую пришлось решать довольно старая, с которой я столкнулся еще в Windows 2008. Представленные диски ОС видит как набор маленьких RAID массивов:
Get-PhysicalDisk | FT FriendlyName, Mediatype, BusType -autosize

primary_drives

Такую шину S2D не поддерживает. Решить это дело в моем случае помог тот же прием, что и раньше - в реестре исправить тип шины на SATA для нужного типа контроллера:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\arcsas\Parameters]
"BusType"=dword:0000000b
вместо
"BusType"=dword:00000008
Делаем эту операцию на всех нодах, перегружаем их. Устанавливаем нужный нам для кластерного файлсервера роли и компоненты:
roles-install features-install

Проверяем работу интерфейсов. В моем случае с двумя сетевыми картами, сделал две сети - клиентскую и кластерную. В идеале, нужно иметь 4 сетевых интерфейса на каждой ноде, создать два switch independent тима и подключить их в два независимых свича, исключив отказ сетевого оборудования:
Get-NetAdapter | FT Name, InterfaceDescription, LinkSpeed -autosize

Name      InterfaceDescription                        LinkSpeed
----      --------------------                        ---------
HEARTBEAT Intel(R) I350 Gigabit Network Connection #2 1 Gbps
LAN       Intel(R) I350 Gigabit Network Connection    1 Gbps

Собираем кластер из 5 нод:

cluster-networkscluster-ready
Включаем функционал S2D:
Enable-ClusterStorageSpacesDirect

Смотрим какие локальные диски на нодах могут быть помещены в пул:
Get-PhysicalDisk | ? CanPool -eq $true

У меня это по 8 локальных физических дисков на каждом из 5 серверов:

drives_ready_to_pool

 

Проверяем работоспособность подсистемы StorageSubSystem
Get-StorageSubSystem *cluster*
FriendlyName                          HealthStatus OperationalStatus
------------                          ------------ -----------------
Clustered Windows Storage on s-ssdcl1 Healthy      OK

-----
Собираем пул:
Если у нас в пуле было бы три диска, то их можно собрать только в уровень Mirror:
New-StoragePool -StorageSubSystemName s-ssdcl1.tnt-tv.ru -FriendlyName StorageSpacesDirect -WriteCacheSizeDefault 0 -ProvisioningTypeDefault Fixed -ResiliencySettingNameDefault Mirror -PhysicalDisks (Get-StorageSubSystem -Name s-mos1-w16.tnt-tv.ru | Get-PhysicalDisk)

Так как дисков у нас сильно побольше, создаем пул Parity, который возможен от 4 и более дисков:
New-StoragePool -StorageSubSystemName s-ssdcl1.tnt-tv.ru -FriendlyName StorageSpacesDirect -WriteCacheSizeDefault 0 -ProvisioningTypeDefault Fixed -ResiliencySettingNameDefault Parity -PhysicalDisks (Get-StorageSubSystem -Name s-ssdcl1.tnt-tv.ru | Get-PhysicalDisk)

pool-created

-----
Обозначаем тир:
Тиринг нужен, при наличии разнородных носителей (SSD, SAS, SATA). Tier-зеркало (актуальный для SSD носителей) создается так:
New-StorageTier -StoragePoolFriendlyName "StorageSpacesDirect" -FriendlyName "MirrorTier" -MediaType SSD -ResiliencySettingName Mirror

В нашем случае, можно создавать тир, а можно обойтись и без него, так как диски все одинаковые. Я обозначил Parity тир больше для проформы:
New-StorageTier -StoragePoolFriendlyName "StorageSpacesDirect" -FriendlyName "ParityTier" -MediaType HDD -ResiliencySettingName Parity

-----
Создаем VHD с рабочей емкостью:
Для создания VHD, лично мне удобно пользоваться GUI Failover Clustering.

В повершелле это выглядит так. Если несколько тиров:
New-Volume -StoragePoolFriendlyName "StorageSpacesDirect" -FriendlyName "FailSafeData" -AccessPath "S:" -ResiliencySettingName "Parity" -ProvisioningType "Fixed" -StorageTiers (Get-StorageTier -FriendlyName "ParityTier") -StorageTierSizes 55000GB -FileSystem NTFS

Если один тир, можно просто:
New-Volume -StoragePoolFriendlyName "StorageSpacesDirect" -FriendlyName "FailSafeData" -Size 100GB -ResiliencySettingName "Mirror" -FileSystem NTFS -AccessPath "S: "-ProvisioningType Fixed

Выделил опцию Enclosure awareness - это поможет прозрачно отработать отказ одного из серверов в кластере. Тем не менее сразу теряю емкость 5 дисков (одной ноды).

vhd-enclosure-awareness

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

vhd-creation

Проверил отказоустойчивость отключением любого из серверов, и вытаскиванием двух любых дисков - хранилище доступно и работает!

Напоследок несколько заметок по работе с готовым S2D.
Проверить отказоустойчивость:
Get-StoragePool -FriendlyName "StorageSpacesDirect" | FL FriendlyName, Size, FaultDomainAwarenessDefault

Удаление в обратном порядке:
смотрим какие есть виртуальные диски (тут я его удалил из оснастки, но видно что он не удален раельно а только Detached)

Get-VirtualDisk
FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach   Size
------------ --------------------- ----------------- ------------ --------------   ----
StorageSpacesDirect    Parity                Detached          Unknown      True           402 GB

Удаляем диск
Remove-VirtualDisk "StorageSpacesDirect"

Если нужно, изменяем свойство пула IsReadonly на False (иначе не сможем удалить пул):
Set-StoragePool "StorageSpacesDirect" -IsReadOnly $False

Удаляем пул
Remove-StoragePool "StorageSpacesDirect"

Понижение FFL и DFL

Довольно известная фишка, появившаяся с релизом Windows server 2008R2 и присутствующая поныне, недавно мне понадобившаяся в связи с просьбой помочь установить устаревшее решение от Microsoft в инфраструктуру собранную нативно на 2012R2. Как показала практика, процесс отката уровня домена и леса - процедура очень простая с точки зрения трудозатрат, но требующая анализа включенных опций Active Directory и возможности их работы на разных уровнях домена и леса. Возьмем например опция корзины Active Directory: нельзя откатывать уровень домена или леса туда, где эта опция еще не поддерживается. Общее правило отката таково - посмотри какие опции включены, вспомни когда они появились и откати до того уровня домена или леса. Беда в том, что откатиться ниже не получится - однажды включенная корзина AD, отключена быть не может. А само понижение может быть выполнено из PowerShell следующим оператором (требуются права Enterprise Administrator):

Set-ADDomain Mode mydomain.ru -DomainMode Windows2003Domain

Очевидно, что в данном примере для домена mydomain.ru был установлен DFL Windows 2003.
Подробнее про командлет Set-ADDomain написано здесь.

Тестирую поддержку драйверов и интеграционных компонент Hyper-V во FreeBSD 10.0

Вчера вышла в релиз 10 версия FreeBSD в которой по умолчанию поддерживаются интеграционные компоненты для Hyper-V а так же драйвера для виртуализированных устройств Hyper-V. Строго говоря компоненты поддерживаются начиная с версии FreeBSD 8.3 (обусловлено это, как всем известно плотным сотрудничеством с NetAPP), только там их нужно устанавливать отдельно. Однако я решил сразу протестировать новый дистрибутив внутри виртуальной машины гипервизоров 2008R2 и 2012R2.
Как нам обещают здесь, поддерживаются следующие фичи: Читать далее Тестирую поддержку драйверов и интеграционных компонент Hyper-V во FreeBSD 10.0

Зависание загрузки Onboard Administrator на 69% в IE 10 и 11

Оставлю сегодня пометку-коротыш с тривиальным советом: Всем кому приходится работать с HP Blade Sysyem Onboard Administrator в рамках обслуживания корзин C3000 или C7000 сталкиваются с некорректной работой под Internet Explorer 10 или 11 версий. Обычно загрузка состояния шасси затормаживается на 69% и довольно долго висит. На IE 9 и ниже все работает замечательно. Обновление прошивки OA не дает эффекта. Выглядит это так:

enclosure_loading_stuck_69

Затем возможен запуск оснастки статуса, но состояние элементов корзины все равно не загружается. Решается все это очень просто: нужно заставить IE работать в режиме совместимости. Для этого достаточно нажать кнопку режима совместимости

enclosure_loading_stuck_69_correction

и работа с Onboard Administrator в дальнейшем будет беспроблемной.