After the Ignite Session about the new storage spaces direct feature in Windows Server 2016 TP2 I created 4 node cluster on my newly created 2016 TP2 Hyper-V stand-alone host and added it to VMM 2016 TP to play little bit with it, and I discovered that I can manage and even deploy VMs to the clustered file share. It is not that performant but it works 😉
How did I get there, you ask?
- Create a 2016 TP2 template
- Deploy 4 VMs for the SSD Cluster
- Add a few disks to each VM
- Create a new fileserver cluster in VMM
- Create shares and assign them to you Hyper-V hosts
- Done
- You can install a new template server from the ISO media or you can use the Convert-WindowsImage.ps1 Script to create the VHD(x). The script needs some adjustments to work for and on a 2016 server.
You need to change this variable
$lowestSupportedBuild = 8250
Into this
$lowestSupportedBuild = 10074
And you need to modify this function from Version 6.2 into 10.0
function
Test-WindowsVersion {
$os = Get-WmiObject -Class Win32_OperatingSystem
$isWin8 = (($os.Version -ge 6.2) -and ($os.BuildNumber -ge $lowestSupportedBuild))
Write-W2VTrace “isWindows8? $isWin8”
return $isWin8
}
Into this
function
Test-WindowsVersion {
$os = Get-WmiObject -Class Win32_OperatingSystem
$isWin8 = (($os.Version -ge 10.0) -and ($os.BuildNumber -ge $lowestSupportedBuild))
Write-W2VTrace “isWindows8? $isWin8”
return $isWin8
}
After you have done that you can run the Script to create the VHD(x).
You can create from the WIM file (unpack the ISO and change the path in this script)
Nano Server:
C:\VM\Convert-WindowsImage.ps1 –WIM ‘C:\VM\Server2016TP2\NanoServer\nanoserver.wim’ –VHD ‘c:\vm\nanoserver.vhdx’ -DiskType Dynamic -VHDFormat VHDx -SizeBytes 10GB –Edition 1
“normal server”:
C:\VM\Convert-WindowsImage.ps1 –WIM ‘C:\VM\Server2016TP2\sources\install.wim’ –VHD ‘c:\vm\2016TP2.vhdx’ -DiskType Dynamic -VHDFormat VHDx -SizeBytes 60GB –Edition 2
- I deployed four nodes, 2016TP1, 2016TP2,2016PT3 and 2016TP4 and attached 20 disks to each one of them
- You can use this script to do this, just change the VM Names to yours. Make sure they are numbered 1,2,3,4 in the end.
# creating VHDX files for all SSD servers
1..4 | % {
$location = “C:\VM\2016TP$_”
$vmname = “2016TP$_”
#Set-Location $location
1..20 | %{New-VHD -Path $location\DATADisk$_.vhdx -Dynamic -SizeBytes 20GB}
1..20 | %{Add-VMHardDiskDrive -VMName $vmname -Path $location\DATADisk$_.vhdx -ControllerType SCSI }
}
- Go to your 2016 VMM console under fabric and create a new file server cluster
Select a Name for the cluster and the SOFS resource (leave the Cluster IP Address empty if you want to use DHCP) and select “storage attached directly to each cluster node (Storage Spaces direct)
- Select a RunAs Account with administrative rights on the servers -> Next
- Add all nodes to the list, click next and click “Finish”
! Make sure the correct firewall ports are open, otherwise VMM will fail to install the agents!
This Script enables remote desktop and disables the firewall on the nodes
#Enable Remote desktop and disable firewall on the servers
1..4 | %{Invoke-Command -ScriptBlock {
set-ItemProperty -Path ‘HKLM:\System\CurrentControlSet\Control\Terminal Server’-name “fDenyTSConnections” -Value 0
set-ItemProperty -Path ‘HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp’ -name “UserAuthentication” -Value 1
netsh advfirewall set allprofiles state off
} -ComputerName 2016TP$_ }
If everything is correcly configured the deployment will look like this. .it took about 16 minutes on my machine
Now you have to create a storage pool out of the attached disks then you need a virtual disk/share with the need configuration (2-Way/3-Way/paritiy etc.)
- select the newly created file server cluster und Fabric -> Storage -> File server and click “manage pools”
- select all disks to the pool (you can add up to 240)
- after that you can add a file share and select the layout
File shares
Infrastructure after the deployment
5.
Host config
VM Running on the assigned share
So you can test “highly-available” deployments with local storage.
Setup:
1 host with 1 local attached SSD and 32GB RAM
If you want to measure the performance of your VM you can run this cmdlet, remotely, on one of the file servers
Get-StorageQoSFlow -CimSession 2016tp1| ? InitiatorName -notlike “” | sort Initiatoriops -Descending | ft initiatorname,initiatoriops,initiatorlatency
Happy testing.