Deploy a 2-node StarWind VSAN Free for VMware ESXi 6.5

StarWind VSAN Free provides a storage solution for several purposes such as store virtual machines. With VSAN Free, you can deploy a 2-node cluster to present a highly available storage solution to hypervisor such as Hyper-V or ESXi for free. When you deploy multi VSAN Free nodes, the data are synchronized across the network between nodes.

You can deploy StarWind VSAN Free in hyperconverged model where VSAN Free is installed on hypervisor nodes or in a disaggregated model where compute and storage are separated. In the below table, you can find the difference between StarWind VSAN Free and paid edition.

As you can see, the big differences between both editions are the technical support assistance and management capabilities. With StarWind VSAN Free, you are able to manage only by PowerShell (and 30 trial days across StarWind Management console) and you have no access to technical support assistance.

Thanks to this free version, we are able to deploy a highly available storage solution. In this topic, we will see how to deploy StarWind VSAN Free in a 2-node configuration on Windows Server 2016 Core edition. Then we will connect the storage to VMware ESXi.

Requirements

To write this topic, I have deployed the following virtual machines. In production, I recommend you to implement the solution on physical servers. Each VM has the following hardware:

  • 2 vCPU
  • 4GB of memory
  • 1x OS disk (60GB dynamic)
  • 4x 100GB disks (100GB dynamic)
  • 1x vNIC for management (and heartbeat)
  • 1x vNIC for storage sync

In the end of the topic, I will connect the storage to a VMware ESXi. So if you want to follow this topic, you need a running vSphere environment.

You can download StarWind VSAN Free here.

Architecture overview

Both StarWind VSAN Free nodes will be deployed with Windows Server 2016 Core Edition. Both nodes have two network adapters each. One network is used for the synchronization between both nodes (not routed network). The other is used for iSCSI and management. Ideally, you should isolate management and iSCSI traffic in two separated vNICs.

Configure the data disks

Once the operating system is deployed, I run the following script to create a storage pool and a volume to host Starwind image files.

# Initialize data disks
get-disk |? OperationalStatus -notlike "Online" | Initialize-Disk

#Create a storage pool with previously initialized data disks
New-StoragePool -StorageSubSystemFriendlyName "*VMSAN*" `
                -FriendlyName Pool `
                -PhysicalDisks (get-physicaldisk |? canpool -like $True)

#Create a NTFS volume in 2-Way mirroring with maximum space. Letter: D:\
New-Volume -StoragePoolFriendlyName Pool `
           -FriendlyName Storage `
           -FileSystem NTFS `
           -DriveLetter D `
           -PhysicalDiskRedundancy 1 `
           -UseMaximumSize

#Create a folder on D: called Starwind
new-item -type Directory -Path D:\ -Name Starwind 

Install StarWind VSAN Free

I have copied the StarWind VSAN Free binaries in both nodes. Then I run from command line the installer. On the welcome screen, just click on next.

In the next screen, accept the license agreement and click on next.

The next window introduces the new features and improvements of StarWind Virtual SAN v8. Once you have read them, just click on next.

Next, choose a folder where will be installed StarWind VSAN Free binaries.

Then choose which features you want install. You can install powerful features such as SMI-S to connect to Virtual Machine Manager, the PowerShell management library or the cluster service.

In the next screen choose the start menu folder and click on next.

In the next screen, you can request the free version key. StarWind has already kindly given me a license file so I choose Thank you, I do have a key already.

Then I specify the license file and I click on next.

Next you should have information about the provided license key. Just click on next.

To finish, click on install to deploy the product.

You have to repeat these steps for each node.

Deploy the 2-node configuration

StarWind provides some PowerShell script samples to configure the product from command line. To create the 2-node cluster, we will leverage the script CreateHA(two nodes).ps1. You can get script samples in <InstallPath>\StarWind Software\StarWind\StarWindX\Samples\PowerShell.

Copy scripts CreateHA(two nodes).ps1 and enumDevicesTargets.ps1 and edit them.

Below you can find my edited CreateHA(two nodes).ps1:

Import-Module StarWindX

try
{
    #specify the IP address and credential (this is default cred) of a first node
    $server = New-SWServer -host 10.10.0.46 -port 3261 -user root -password starwind

    $server.Connect()

    $firstNode = new-Object Node

    # Specify the path where image file is stored
    $firstNode.ImagePath = "My computer\D\Starwind"
    # Specify the image name
    $firstNode.ImageName = "VMSto1"
    # Size of the image
    $firstNode.Size = 65536
    # Create the image
    $firstNode.CreateImage = $true
    # iSCSI target alias (lower case only supported because of RFC)
    $firstNode.TargetAlias = "vmsan01"
    # Synchro auto ?
    $firstNode.AutoSynch = $true
    # partner synchronization interface (second node)
    $firstNode.SyncInterface = "#p2=10.10.100.47:3260"
    # partner heartbeat interface (second node)
    $firstNode.HBInterface = "#p2=10.10.0.47:3260"
    # cache size
    $firstNode.CacheSize = 64
    # cache mode (write-back cache)
    $firstNode.CacheMode = "wb"
    # storage pool name
    $firstNode.PoolName = "pool1"
    # synchronization session count. Leave this value to 1
    $firstNode.SyncSessionCount = 1
    # ALUA enable or not
    $firstNode.ALUAOptimized = $true
    
    #
    # device sector size. Possible values: 512 or 4096(May be incompatible with some clients!) bytes. 
    #
    $firstNode.SectorSize = 512
	
	#
	# 'SerialID' should be between 16 and 31 symbols. If it not specified StarWind Service will generate it. 
	# Note: Second node always has the same serial ID. You do not need to specify it for second node
	#
	$firstNode.SerialID = "050176c0b535403ba3ce02102e33eab" 
    
    $secondNode = new-Object Node

    $secondNode.HostName = "10.10.0.47"
    $secondNode.HostPort = "3261"
    $secondNode.Login = "root"
    $secondNode.Password = "starwind"
    $secondNode.ImagePath = "My computer\D\Starwind"
    $secondNode.ImageName = "VMSto1"
    $secondNode.Size = 65536
    $secondNode.CreateImage = $true
    $secondNode.TargetAlias = "vmsan02"
    $secondNode.AutoSynch = $true
    # First node synchronization IP address
    $secondNode.SyncInterface = "#p1=10.10.100.46:3260"
    # First node heartbeat IP address
    $secondNode.HBInterface = "#p1=10.10.0.46:3260"
    $secondNode.ALUAOptimized = $true
        
    $device = Add-HADevice -server $server -firstNode $firstNode -secondNode $secondNode -initMethod "Clear"
    
    $syncState = $device.GetPropertyValue("ha_synch_status")

    while ($syncState -ne "1")
    {
        #
        # Refresh device info
        #
        $device.Refresh()

        $syncState = $device.GetPropertyValue("ha_synch_status")
        $syncPercent = $device.GetPropertyValue("ha_synch_percent")

        Start-Sleep -m 2000

        Write-Host "Synchronizing: $($syncPercent)%" -foreground yellow
    }
}
catch
{
    Write-Host "Exception $($_.Exception.Message)" -foreground red 
}

$server.Disconnect() 

Next I run the script. An image file will be created in both nodes. These image files will be synchronized.

Thanks to the 30 trial days of the management console, you can get graphical information about the configuration. As you can see below, you have information about image files.

You can also review the configuration of network interfaces:

If you browse the starWind folder in each node, you should have the image files.

Now you can edit and run the script enumDevicesTargets.ps1:

Import-Module StarWindX

# Specify the IP address and credential of the node you want to enum
$server = New-SWServer 10.10.0.46 3261 root starwind

$server.Connect()

if ( $server.Connected )
{
    write-host "Targets:"
    foreach($target in $server.Targets)
    {
        $target
    }
    
    write-host "Devices:"
    foreach($device in $server.Devices)
    {
        $device
    }
    
    $server.Disconnect()
}

By running this script, you should have the following result:

If I run the same script against 10.10.0.47, I have these information:

Connect to vSphere environment

Now that the storage solution is ready, I can connect it to vSphere. So, I connect to vCenter Web Client and I edit the target server on my software iSCSI adapter. I add the following static target server.

Next if I navigate to paths tab, you should have both paths marked as Active.

Now you can create a new datastore and use the previously created StarWind image file.

Conclusion

StarWind VSAN free provides an inexpensive software storage solution for POC or small environment. You need only to buy hardware and deploy the product as we’ve seen in this topic. If you use Hyper-V, you can deploy StarWind VSAN Free in the Hyper-V node to get a HyperConverged solution. Just don’t forget that the StarWind VSAN Free edition doesn’t provide any kind of technical assistance (excepted on StarWind forum) and management console (just 30 trial days).

About Romain Serre

Romain Serre works in Lyon as a Senior Consultant. He is focused on Microsoft Technology, especially on Hyper-V, System Center, Storage, networking and Cloud OS technology as Microsoft Azure or Azure Stack. He is a MVP and he is certified Microsoft Certified Solution Expert (MCSE Server Infrastructure & Private Cloud), on Hyper-V and on Microsoft Azure (Implementing a Microsoft Azure Solution).

Leave a Reply