we setup starwind vsan free in our lab.
We set up two server 2022, installed starwind vsan free onto them and setup a failovercluster.
Everything works really well except some performance anomaly we cant nail down.
We noticed having reduced performance on the primary node accessing the csvfs.
Write speeds in virtual containers and copying big files into the cluster volume, directly from the primary node, are way slower than on node 2. (unstable 30-240MB/s compared to stable 220-240MB/s)
Drive benchmark in VMs and generel performance also reflect this behavior.
We did test 3 different clusters with this, using different server plattforms and all did show this problem.
1. Ryzen 5 3600 using 3.0 NVMEs
2. Epyc 7252
3. Xeon E-2324G
2 & 3 used a 6G SATA Raid 1, on write through cached Adaptec SmartRAID 3102E-8i 2GB
-Using Version 8.0.15020.0 & 8.0.15159.0
We used different hardware on all those setups except using the same network card models:
-Broadcom 25Gb 2-Port PCIe Adapter P225P
-Using 25g direct attached cables
-We tried swapping those with different cards of the same model
The Sync between the nodes seem fine, its just node-1 accessing its cluster storage slower.
This issue even persists if we shutdown node-2.
We also set this up using both 25g ports on those cards as sync interfaces, it did split the load on both card but it didn't changed the behavior.
-We set all of those nodes to high performance mode in windows
-MPIO is installed and setup using last queue depth for storage
-Both iscsi initiators are connected with 127.0.0.1 and the partner sync interface.
We used this example to setup those HA-devices, Sync and HB are on a /29 subnet.
Code: Select all
param($addr="10.131.83.1", $port=3261, $user="root", $password="starwind",
$addr2="10.131.83.2", $port2=$port, $user2=$user, $password2=$password,
#common
$initMethod="Clear",
$size=12,
$sectorSize=512,
$failover=0,
$bmpType=1,
$bmpStrategy=0,
#primary node
$imagePath="My computer\D\starwind",
$imageName="storage-image-n1",
$createImage=$true,
$storageName="",
$targetAlias="storage-target-n1",
$autoSynch=$true,
$poolName="pool1",
$syncSessionCount=1,
$aluaOptimized=$true,
$cacheMode="wb",
$cacheSize=128,
$syncInterface="#p2=172.16.32.10:3260" -f $addr2,
$hbInterface="#p2=172.16.32.2:3260",
$createTarget=$true,
$bmpFolderPath="",
#secondary node
$imagePath2="My computer\D\starwind",
$imageName2="storage-image-n2",
$createImage2=$true,
$storageName2="",
$targetAlias2="storage-target-n2",
$autoSynch2=$true,
$poolName2="pool1",
$syncSessionCount2=1,
$aluaOptimized2=$false,
$cacheMode2=$cacheMode,
$cacheSize2=$cacheSize,
$syncInterface2="#p1=172.16.32.9:3260" -f $addr,
$hbInterface2="#p1=172.16.32.1:3260",
$createTarget2=$true,
$bmpFolderPath2=""
)
Import-Module StarWindX
try
{
Enable-SWXLog -level SW_LOG_LEVEL_DEBUG
$server = New-SWServer -host $addr -port $port -user $user -password $password
$server.Connect()
$firstNode = new-Object Node
$firstNode.HostName = $addr
$firstNode.HostPort = $port
$firstNode.Login = $user
$firstNode.Password = $password
$firstNode.ImagePath = $imagePath
$firstNode.ImageName = $imageName
$firstNode.Size = $size
$firstNode.CreateImage = $createImage
$firstNode.StorageName = $storageName
$firstNode.TargetAlias = $targetAlias
$firstNode.AutoSynch = $autoSynch
$firstNode.SyncInterface = $syncInterface
$firstNode.HBInterface = $hbInterface
$firstNode.PoolName = $poolName
$firstNode.SyncSessionCount = $syncSessionCount
$firstNode.ALUAOptimized = $aluaOptimized
$firstNode.CacheMode = $cacheMode
$firstNode.CacheSize = $cacheSize
$firstNode.FailoverStrategy = $failover
$firstNode.CreateTarget = $createTarget
$firstNode.BitmapStoreType = $bmpType
$firstNode.BitmapStrategy = $bmpStrategy
$firstNode.BitmapFolderPath = $bmpFolderPath
#
# device sector size. Possible values: 512 or 4096(May be incompatible with some clients!) bytes.
#
$firstNode.SectorSize = $sectorSize
$secondNode = new-Object Node
$secondNode.HostName = $addr2
$secondNode.HostPort = $port2
$secondNode.Login = $user2
$secondNode.Password = $password2
$secondNode.ImagePath = $imagePath2
$secondNode.ImageName = $imageName2
$secondNode.CreateImage = $createImage2
$secondNode.StorageName = $storageName2
$secondNode.TargetAlias = $targetAlias2
$secondNode.AutoSynch = $autoSynch2
$secondNode.SyncInterface = $syncInterface2
$secondNode.HBInterface = $hbInterface2
$secondNode.SyncSessionCount = $syncSessionCount2
$secondNode.ALUAOptimized = $aluaOptimized2
$secondNode.CacheMode = $cacheMode2
$secondNode.CacheSize = $cacheSize2
$secondNode.FailoverStrategy = $failover
$secondNode.CreateTarget = $createTarget2
$secondNode.BitmapFolderPath = $bmpFolderPath2
$device = Add-HADevice -server $server -firstNode $firstNode -secondNode $secondNode -initMethod $initMethod
while ($device.SyncStatus -ne [SwHaSyncStatus]::SW_HA_SYNC_STATUS_SYNC)
{
$syncPercent = $device.GetPropertyValue("ha_synch_percent")
Write-Host "Synchronizing: $($syncPercent)%" -foreground yellow
Start-Sleep -m 2000
$device.Refresh()
}
}
catch
{
Write-Host $_ -foreground red
}
finally
{
$server.Disconnect()
}
Grüße,
Sebastian