Комаров Михаил Microsoft MVP Оглавление • Краткая история скрипта для создания дата центра • Краткий обзор используемых в скрипте технологий • Nano Server - развертываем и настраиваем Hyper-V cluster • Создаем SMB cluster • Создаем виртуальные машины в Hyper-V cluster (вложенная виртуализация) Встречаем Windows 2016 TP4 Краткая история скрипта PowerShell - наше всё Серверные системы: пройденный путь* Роли и функции сервера GUI Shell (Оболочка графического интерфейса пользователя) Windows/ Windows NT Full Server Server Core От Windows NT до Windows Server 2003 Windows Server 2008 и Windows Server 2008 R2 Минимальный интерфейс сервера Server Core Windows Server 2012 и Windows Server 2012 R2 * Графический интерфейс для администрирования серверов — вреден Nano Server — следующий этап нашего облачного путешествия • Новый вариант развертывания основных компонентов Windows Server Базовое (только для 64-разрядных систем) взаимодействие • Глубокий рефакторинг, направленный на – Инфраструктуру Cloud OS – Облачные приложения • Повторяет структуру Server Core Nano Server с клиентом Сервер с локальными инструментами администрирования Server Core Подробный взгляд • Nano Server — это будущее ядро Windows Server – Предназначен для облачных компонентов и приложений – Новый фундамент для всех компонентов • Модель Just Enough OS («только необходимое») для всех приложений • Не все приложения можно запустить на Nano Server – Server Core обеспечивает совместимость с существующими бизнес-приложениями Исходно облачные приложения Существующие бизнес-приложения Server Core Nano Server Физические и виртуальные компоненты, контейнеры Роли и функции Nano Server • Нулевая ресурсоемкость – Серверные роли и дополнительные функции находятся вне Nano Server – Самостоятельные пакеты устанавливаются как приложения • Ключевые роли и функции – Hyper-V, системы хранения (SoFS) и кластеризация – Ядро CLR, ASP.NET 5 и PaaS • Полная поддержка драйверов Windows Server • Встроенная защита от вредоносного ПО • Агенты приложений Apps Insight и System Center в ближайшем будущем Вложенная виртуализация • Проброс флага виртуализации и поведение системы Вложенная виртуализация • Проброс флага виртуализации и поведение системы PowerShell Direct напрямую в гостевую ОС • Сценарий PowerShell в гостевой ОС можно выполнить напрямую из хоста виртуализации ОС • Не нужно настраивать удаленное взаимодействие с PowerShell • Можно обойтись даже без сетевого подключения • Но требуются гостевые учетные данные PowerShell Direct напрямую в гостевую ОС, пример Storage Space Direct Hyper-V Clusters SMB3 Storage Network Fabric Scale-Out File Server Internal Disks Shared JBOD Storage Storage Space Direct SMB3 Storage Network Fabric Scale-Out File Server \\FileServer\Share Cluster Shared Volumes C:\ClusterStorage Storage Space Virtual Disks Storage Pool Software Storage Bus Storage Node Storage Node Storage Node Software Defined Storage System Storage Node Spaces Direct I/O Stack Server 1 Server 2 File Server Virtualization Layer 4. SBL forwards write to block target on destination node with shortest queue Physical Layer 3. Spaceport sends write to each copy on disk \\fileserver\share1 C:\clusterstorage\volume1 CSVFS 2. SMB sends it downstream Storage Bus Layer Access Layer 1. Write arrives from compute node File System File System VolMgr VolMgr PartMgr PartMgr Disk Disk SpacePort SpacePort Virtual Disks 5. SBL on each node sends data to physical stack Clusport Virtual HBA ClusBT Volume Mgr Clusport Virtual HBA ClusBT Volume Mgr SBL Disks PartMgr PartMgr Disk Disk HBA Miniport HBA Miniport Physical Disks ReFS файловая система для S2D Ускорение VHD создание и расширение • Нет необходимости заполнять новые и расширяемые файлы нулями • Быстрое создание больших дисков фиксированного размера VHDs • Быстрое расширение динамических VHDs Эффективность VM очистка снимков после резервного копирования • После резервного копирования Hyper-V проводит слияние данных между основным диском и снимком, возникшим во время резервного копирования • Используя ReFS, Hyper-V быстро переназначает блоки от потомка к родителю SSD Доступное по бюджету производительность SSDs с ёмкостью HDDs Эластичность Автоматическая коррекция ошибок • HDDs оптимизированная по цене ёмкость • Доступная на уровне файла целостность содержимого • SSD оптимизирован по производительности • После обнаружения повреждения ReFS может получить корректную копию с хранилища • ReFS хранит горячие данные на SSD, а холодные данные - на HDDs, предоставляя производительность и ёмкость • ReFS использует правильную копию для автоматического Nano Server - развертывание Import-Module NanoServerImageGenerator.psm1 -Force New-NanoServerImage -MediaPath "$($DVDDriveLetter):\" BasePath $BaseVHDPath -TargetPath "$($BaseVHDPath)\NanoBase.vhdx" -GuestDrivers -Compute Clustering -AdministratorPassword (ConvertTo-SecureString $adminPassword -AsPlainText -Force) Создание виртуальной машины new-vm -Name $VMName -MemoryStartupBytes 2400MB -SwitchName $VirtualSwitchName ` -VHDPath "$($VMPath)\$($GuestOSName).vhdx" -Generation 2 Set-VMMemory -VMName $VMName -DynamicMemoryEnabled $false Set-VMProcessor -VMName $VMName -Count 2 -ExposeVirtualizationExtensions $true Add-VMNetworkAdapter -VMName $VMName -SwitchName $VirtualSwitchName Get-VMNetworkAdapter -VMName $VMName | Set-VMNetworkAdapter -MacAddressSpoofing on do {start-vm $VMName} until ($?) Nano Server - продолжение Делаем на машине в домене djoin.exe /provision /domain $domainName /machine "HVNode1" /savefile \\10.10.10.1\c$\HVNode1.txt Делаем на самом Nano сервере djoin /requestodj /loadfile "\\10.10.10.1\c$\$($GuestOSName).txt" Создаем кластер на машине с установленной ролью Failover Cluster New-Cluster –Name HVCluster –Node HVNode1,HVNode2,HVNode3,HVNode4,HVNode5,HVNode6,HVNode7,HVNode8 –NoStorage Создаем ноду Storage Space Direct Add-VMNetworkAdapter -VMName $VMName -SwitchName $VirtualSwitchName new-vhd -Path "$($VMPath)\$($GuestOSName) - Data 1.vhdx" -Dynamic -SizeBytes 200GB Add-VMHardDiskDrive -VMName $VMName -Path "$($VMPath)\$($GuestOSName) - Data 1.vhdx" new-vhd -Path "$($VMPath)\$($GuestOSName) - Data 2.vhdx" -Dynamic -SizeBytes 200GB Add-VMHardDiskDrive -VMName $VMName -Path "$($VMPath)\$($GuestOSName) - Data 2.vhdx" Включаем необходимые компоненты и добавляем в домен icm -VMName $VMName -Credential $localCred { param($VMName, $domainCred, $domainName) Write-Output "[$($VMName)]:: Installing Clustering" Install-WindowsFeature –Name File-Services, Failover-Clustering –IncludeManagementTools | out-null Write-Output "[$($VMName)]:: Joining domain as `"$($env:computername)`"" while (!(Test-Connection -Computername $domainName -BufferSize 16 -Count 1 -Quiet -ea SilentlyContinue)) {sleep seconds 1} do {Add-Computer -DomainName $domainName -Credential $domainCred -ea SilentlyContinue} until ($?) } -ArgumentList $VMName, $domainCred, $domainName Конфигурируем кластер Storage Space Direct icm -VMName "Management Console" -Credential $domainCred { param ($domainName) do {New-Cluster –Name S2DCluster –Node S2DNode1,S2DNode2,S2DNode3,S2DNode4 –NoStorage} until ($?) while (!(Test-Connection -Computername "S2DCluster.$($domainName)" -BufferSize 16 -Count 1 -Quiet -ea SilentlyContinue)) {ipconfig /flushdns; sleep -seconds 1} Enable-ClusterStorageSpacesDirect -Cluster "S2DCluster.$($domainName)" Add-ClusterScaleoutFileServerRole -name S2DFileServer -cluster "S2DCluster.$($domainName)" } -ArgumentList $domainName Конфигурируем кластер Storage Space Direct icm -VMName "Storage Node 1" -Credential $domainCred { param ($domainName) New-StoragePool -StorageSubSystemName "S2DCluster.$($domainName)" -FriendlyName S2DPool -WriteCacheSizeDefault 0 -ProvisioningTypeDefault Fixed -ResiliencySettingNameDefault Mirror -PhysicalDisk (Get-StorageSubSystem -Name "S2DCluster.$($domainName)" | Get-PhysicalDisk) New-Volume -StoragePoolFriendlyName S2DPool -FriendlyName S2DDisk -PhysicalDiskRedundancy 2 -FileSystem CSVFS_REFS –Size 500GB Set-FileIntegrity "C:\ClusterStorage\Volume1" –Enable $false MD C:\ClusterStorage\Volume1\VHDX New-SmbShare -Name VHDX -Path C:\ClusterStorage\Volume1\VHDX -FullAccess "$($domainName)\administrator", "$($domainName)\Benjamin", "$($domainName)\Management$" Set-SmbPathAcl –ShareName VHDX MD C:\ClusterStorage\Volume1\ClusQuorum New-SmbShare -Name ClusQuorum -Path C:\ClusterStorage\Volume1\ClusQuorum -FullAccess "$($domainName)\administrator", "$($domainName)\Benjamin", "$($domainName)\Management$" Set-SmbPathAcl –ShareName ClusQuorum Конфигурируем кластер Storage Space Direct icm -VMName "Storage Node 1" -Credential $domainCred { param ($domainName) get-SmbShareAccess VHDX | Grant-SmbShareAccess -AccountName "$($domainName)\HVNode1$","$($domainName)\HVNode2$","$($domainName)\HVNode3$", ` "$($domainName)\HVNode4$","$($domainName)\HVNode5$","$($domainName)\HVNode6$", ` "$($domainName)\HVNode7$","$($domainName)\HVNode8$","$($domainName)\HVCluster$" ` -AccessRight full -Confirm:$false get-SmbShareAccess ClusQuorum | Grant-SmbShareAccess -AccountName "$($domainName)\HVNode1$","$($domainName)\HVNode2$","$($domainName)\HVNode3$", ` "$($domainName)\HVNode4$","$($domainName)\HVNode5$","$($domainName)\HVNode6$", ` "$($domainName)\HVNode7$","$($domainName)\HVNode8$","$($domainName)\HVCluster$" ` -AccessRight full -Confirm:$false Set-SmbPathAcl –ShareName VHDX Set-SmbPathAcl –ShareName ClusQuorum } -ArgumentList $domainName Создаем виртуальную машину на кластере Storage Space Direct foreach ($i in 1..8) { icm -VMName "Hyper-V Node $($i)" -Credential $domainCred { param ($k, $domainName, $localCred) Set-VMHost -VirtualHardDiskPath "\\S2DFileServer.$($domainName)\VHDX" ` -VirtualMachinePath "\\S2DFileServer.$($domainName)\VHDX" $j = $k - 1 do {New-VHD -Path "\\s2dfileserver\vhdx\Container Host $($j).VHDX" -ParentPath "\\s2dfileserver\vhdx\ContainerBase.VHDX" -Differencing -ea 0| Out-Null} until ($?) do {new-vm -Name "Container Host $($j)" -MemoryStartupBytes 768MB -SwitchName "Virtual Switch" ` -VHDPath "\\s2dfileserver\vhdx\Container Host $($j).VHDX" -Generation 2 -ea 0} until ($?) Set-VM -name "Container Host $($j)" -ProcessorCount 2 Get-VMNetworkAdapter -VMName "Container Host $($j)" | Set-VMNetworkAdapter -MacAddressSpoofing on start-vm "Container Host $($j)" По завершению работы скрипта видим результат. ДЕМОНСТРАЦИЯ Полученные результаты Ресурсы Windows Server 2016 Technical Preview 4 http://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-technical-preview System Center Technical Preview 4 http://www.microsoft.com/en-us/evalcenter/evaluate-system-center-technical-preview Оригинальный скрипт https://github.com/scooley/Virtualization-Documentation/blob/b97e59ad81a5510662bce5f214641daa170f2eff/demos/2015BigBuild/BigBuild.ps1 Microsoft Virtual Academy http://www.microsoft.com/en-us/evalcenter/evaluate-system-center-technical-preview Microsoft Channel 9 (Видео и презентации с последних форумов Microsoft) https://mva.microsoft.com/ СПАСИБО!