starwind.cfg missing Sync & HB channels

Software-based VM-centric and flash-friendly VM storage + free version

Moderators: anton (staff), art (staff), Max (staff), Anatoly (staff)

Post Reply
paul59
Posts: 4
Joined: Sun Apr 19, 2020 1:24 pm

Sun Apr 19, 2020 1:49 pm

I am new to Starwind VSAN Free so I hope I can speak intelligently. I am setting-up a 2 node cluster for SQL server and I have 3 drives installed in each server. I have already created an image and target on each pair of drives, so I have 3 images (plus 1 quorum) and 3 targets. Everything seems fine, shows synchronized, but when I look at the Management Console it shows me all networks but does tell me anything about which ones are synchronization or heartbeat channels. So I run the Powershell script EnumDevicesTargets.ps1 it shows blank for SynchronizationChannels and HeartbeatChannels - like there is no data in these parameters. So when I look into the starwind.cfg file there is no mention of either of these parameters. Is this normal behavior?
If not, is there a way to either run a script that puts this info in, or modify the starwind.cfg to put in this info?
Thanks
yaroslav (staff)
Staff
Posts: 2340
Joined: Mon Nov 18, 2019 11:11 am

Tue Apr 21, 2020 12:17 pm

Hi paul59,
anything about which ones are synchronization or heartbeat channels.
Well, you can learn that from the config files as GUI is unfortunately unavailable for free users.
SInce you are using a free version, all the settings are specified while creating a HA device with CreateHA_2.ps1. Could you share the script with together IPs you used? We need to review its configuration.
modify the starwind.cfg to put in this info?
StarWind _HA.swdsk files have to be modified. Note that you need to pause service on the side which is to be modified. But let me review the script first.
paul59
Posts: 4
Joined: Sun Apr 19, 2020 1:24 pm

Tue Apr 21, 2020 5:59 pm

Below is my configuration and script file which I run 3 times, once for each pair of drives; I create image01, image02 and image03. It seems to work fine but I was concerned that I couldn't see the HB & Sync interfaces in the EnumDevicesTargets script.
Primary Node:
Sync network - 192.168.14.6
Heartbeat network - 192.168.10.6
Domain network - 192.168.16.6

Secondary Node:
Sync network - 192.168.14.2
Heartbeat network 192.168.10.2
Domain network - 192.168.16.2


Script file which is run from the primary server:

#Import-Module StarWindX

try
{
$server = New-SWServer -host 127.0.0.1 -port 3261 -user root -password starwind

$server.Connect()

$firstNode = new-Object Node

$firstNode.ImagePath = "My computer\J\VSAN"
$firstNode.ImageName = "LeahImage01"
$firstNode.Size = 370000
$firstNode.CreateImage = $true
$firstNode.TargetAlias = "LeahTarget01"
$firstNode.AutoSynch = $true
$firstNode.SyncInterface = "#p2=192.168.14.2:3260,192.168.16.2:3260"
$firstNode.HBInterface = "#p2=192.168.10.2:3260,192.168.16.2:3260"
$firstNode.CacheSize = 64
$firstNode.CacheMode = "wb"
$firstNode.PoolName = ""
$firstNode.SyncSessionCount = 1
$firstNode.ALUAOptimized = $true

#
# device sector size. Possible values: 512 or 4096(May be incompatible with some clients!) bytes.
#
$firstNode.SectorSize = 4096

#
# '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 = "192.168.16.2"
$secondNode.HostPort = "3261"
$secondNode.Login = "root"
$secondNode.Password = "starwind"
$secondNode.ImagePath = "My computer\J\VSAN"
$secondNode.ImageName = "LeviImage01"
$secondNode.Size = 370000
$secondNode.CreateImage = $true
$secondNode.TargetAlias = "LeviTarget01"
$secondNode.AutoSynch = $true
$secondNode.SyncInterface = "#p1=192.168.14.6:3260,192.168.16.6:3260"
$secondNode.HBInterface = "#p1=192.168.10.6:3260,192.168.16.6: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()
yaroslav (staff)
Staff
Posts: 2340
Joined: Mon Nov 18, 2019 11:11 am

Fri Apr 24, 2020 4:11 pm

Hi paul59,
$firstNode.SyncInterface = "#p2=192.168.14.2:3260,192.168.16.2:3260"
$firstNode.HBInterface = "#p2=192.168.10.2:3260,192.168.16.2:3260"
It was not necessary to type the IPs... Please use $addr2 and $addr for interfaces on the first and second nodes respectively.
Second, there is only one heartbeat - 192.168.16.* please add an additional heartbeat entity
$hbInterface="#p2=192.168.16.2:3260" -f $addr2,
and
$hbInterface2="#p1=192.168.16.6:3260" -f $addr,

Would like to review the StarWInd.cfg and _HA.swdsk files now. Could you share them via Google Drive or Dropbox?
paul59
Posts: 4
Joined: Sun Apr 19, 2020 1:24 pm

Sat Apr 25, 2020 9:13 pm

While I was waiting on response I revised my script file to use only 1 Heartbeat channel and 1 Sync channel, as you can see in the script . I notice you suggest I list the domain network as a second channel for both the iscsi and sync networks, but I thought the Sync network was not supposed to share the domain network? maybe I'm wrong here.
Either way, please note my networks are as follows:
Primary Node:
Sync network - 192.168.14.6
Heartbeat network - 192.168.10.6
Domain network - 192.168.16.6

Secondary Node:
Sync network - 192.168.14.2
Heartbeat network 192.168.10.2
Domain network - 192.168.16.2

If I understand what you are saying, then you say I should configure first node as:
$firstNode.SyncInterface = "#p2=192.168.14.2:3260"
$firstNode.HBInterface = "#p2=192.168.10.2:3260,192.168.16.2:3260"
And second node as:
$secondNode.SyncInterface = "#p1=192.168.14.6:3260"
$secondNode.HBInterface = "#p1=192.168.10.6:3260,192.168.16.6:3260"

This look right considering I only have the 3 networks I have listed?
Thanks
Paul



LATEST SCRIPT FILE:
#Import-Module StarWindX

try
{
$server = New-SWServer -host 127.0.0.1 -port 3261 -user root -password starwind

$server.Connect()

$firstNode = new-Object Node

$firstNode.ImagePath = "My computer\J\VSAN1"
$firstNode.ImageName = "LeahDataimg01"
$firstNode.Size = 250000
$firstNode.CreateImage = $true
$firstNode.TargetAlias = "LeahDatatrg01"
$firstNode.AutoSynch = $true
$firstNode.SyncInterface = "#p2=192.168.14.2:3260"
$firstNode.HBInterface = "#p2=192.168.10.2:3260"
$firstNode.CacheSize = 64
$firstNode.CacheMode = "wb"
$firstNode.PoolName = "Pool1"
$firstNode.SyncSessionCount = 1
$firstNode.ALUAOptimized = $true

#
# device sector size. Possible values: 512 or 4096(May be incompatible with some clients!) bytes.
#
$firstNode.SectorSize = 4096

#
# '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 = "192.168.16.2"
$secondNode.HostPort = "3261"
$secondNode.Login = "root"
$secondNode.Password = "starwind"
$secondNode.ImagePath = "My computer\J\VSAN1"
$secondNode.ImageName = "LeviDataimg01"
$secondNode.Size = 250000
$secondNode.CreateImage = $true
$secondNode.TargetAlias = "LeviDatatrg01"
$secondNode.AutoSynch = $true
$secondNode.SyncInterface = "#p1=192.168.14.6:3260"
$secondNode.HBInterface = "#p1=192.168.10.6: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 5000

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

$server.Disconnect()


_HA.SWDSK
<?xml version="1.0" encoding="UTF-8"?>
<header signature="StarWind" version="1.0">
<device active="true" plugin="HAImage" name="HAImage">
<storages>
<storage id="1" type="device" name="HAImage" lun="0x0">
<interval size="250000" units="MB"/>
<inquiry>
<serial_id>6E06E9FDE4335B80</serial_id>
<vendor id="STARWIND"/>
<product id="STARWIND" revision="0001"/>
<eui_64>6E06E9FDE4335B80</eui_64>
</inquiry>
<geometry>
<sector size="4096" psize="4096"/>
<track sectors="16"/>
<cylinder tracks="32" count="65535"/>
</geometry>
<caching>
<cache type="write-back" size="64" units="MB" level="1">
<storages>
<storage_ref id="1"/>
</storages>
</cache>
</caching>
</storage>
</storages>
</device>
<system>
<resources>
<storages>
<storage id="1" name="RAM" type="RAM">
<interval size="64" units="MB"/>
</storage>
<storage id="2" name="imagefile1" type="device" lun="0x0">
<interval size="250000" units="MB"/>
</storage>
<storage id="3" name="iqn.2008-08.com.starwindsoftware:levi.bockmanninc.local-levidatatrg01" type="remote" lun="0x0">
<transport type="iSCSI">
<links>
<link id="1" type="data" priority="1" connections="1">
<peer ip="192.168.14.2" port="3260"/>
</link>
<link id="2" type="control" priority="1" connections="1">
<peer ip="192.168.10.2" port="3260"/>
</link>
</links>
</transport>
</storage>
</storages>
<network/>
</resources>
</system>
<node id="1" name="HAImage" shut="false" active="true" flags="0">
<storages>
<storage_ref id="2"/>
</storages>
<parameters>
<type>1</type>
<priority>0</priority>
<auto_sync>true</auto_sync>
<sync_status>1</sync_status>
<sync_delay>50</sync_delay>
<sync_traffic_share>50</sync_traffic_share>
<failover_conf>0</failover_conf>
<last_sync_snap_id>0</last_sync_snap_id>
<alua_access_state>0</alua_access_state>
<maintenance_mode/>
</parameters>
</node>
<node id="2" name="iqn.2008-08.com.starwindsoftware:levi.bockmanninc.local-levidatatrg01" shut="false" active="true">
<storages>
<storage_ref id="3"/>
</storages>
<parameters>
<type>1</type>
<priority>1</priority>
<sync_status>1</sync_status>
<alua_access_state>0</alua_access_state>
</parameters>
</node>
</header>



LATEST STARWIND.CFG
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="config.xsd" version="8.1">
<parameters>
<logging>
<!--LogLevel values: 0-Disabled, 1-Errors, 2-Warnings, 3-all messages -->
<LogLevel value="1"/>
<!--Don't change the LogMask if you have no idea what does it mean!-->
<LogMask value="0xbfffffffffffffff"/>
<!--Log rotate period (in seconds) -->
<!--<LogRotatePeriod value="30"/>-->
<!--Log rotate size (in MBs) -->
<LogRotateSize value="100"/>
<!--Log rotate - number of log files to keep (0 - keep all) -->
<LogRotateKeepLastFiles value="20"/>
</logging>
<updatetracker>
<!--check for updates every n days, if value=0 then update tracker is disabled -->
<UpdatePeriod value="7"/>
<!--Update host -->
<UpdateHost value="www.starwindsoftware.com"/>
<!--Page on update host -->
<UpdatePage value="/updatetracker/index.php"/>
<!--Port used for access to the host -->
<UpdatePort value="80"/>
<!--Copy Id -->
<!--Last update request date -->
<UpdateCopyId value="91527624-3408-4D1D-A459-F8A922E77FA9"/>
<UpdateLastRequest value="20200422"/>
</updatetracker>
<wuservicecontrol>
<!--WU service control feature is enabled-->
<WUSCEnabled value="yes"/>
<!--WU service was disabled by starwind service-->
<SrvWasDisabled value="no"/>
<!--WU service start type that must be restored-->
<SrvRestoreStartType value="2"/>
</wuservicecontrol>
<hardwareacceleration>
<!--VAAI extended copy feature is enabled-->
<VaaiExCopyEnabled value="yes"/>
<!--VAAI compare and write feature is enabled-->
<VaaiCawEnabled value="yes"/>
<!--VAAI write same feature is enabled-->
<VaaiWriteSameEnabled value="yes"/>
<!--ODX feature is enabled-->
<OdxEnabled value="no"/>
<!--ODX optimal ROD size in MBs-->
<OdxOptimalRodSizeMB value="64"/>
<!--ODX maximum ROD size in MBs-->
<OdxMaximumRodSizeMB value="256"/>
<!--ODX ROD token default timeout in seconds-->
<OdxRodTokenDefaultTimeoutSec value="10"/>
<!--ODX ROD token maximum timeout in seconds-->
<OdxRodTokenMaximumTimeoutSec value="30"/>
</hardwareacceleration>
<connections>
<!--Port number for iSCSI connections (default 3260)-->
<Port value="3260"/>
<!--Interface to listen to. "0.0.0.0" corresponds to "listen to all interfaces".-->
<Interface value="0.0.0.0"/>
<!-- Interface to listen to filtering by MAC-address. Default value is empty string.-->
<!-- It can be full MAC-address like "10-10-10-10-10-10" or partial template like "10-10-10*" -->
<!-- <InterfaceByMAC value=""/> -->
<!--Port number for Control connections (default 3261)-->
<!-- <CtlPort value="3261"/> -->
<!--Interface to listen to Control connections. "0.0.0.0" corresponds to "listen to all interfaces".-->
<!-- <CtlInterface value="0.0.0.0"/> -->
<!-- StarWind location protocol -->
<BCastEnable value="yes"/>
<BCastInterface value="0.0.0.0"/>
<BCastPort value="3261"/>
</connections>
<authentication>
<!--Username and password used for the control connection.-->
<Login value="root"/>
<Password value="##evVRsIJtRmAEEd2sCslZDg=="/>
<!--CHAP authentication for control connections-->
<!--
<CtlAuthMode value="chap"/>
<CtlAuthServerName value="srv"/>
<CtlAuthServerSecret value="123"/>
<CtlAuthClientName value="user"/>
<CtlAuthClientSecret value="345"/>
-->
</authentication>
<options>
<!--Minimal 'maximum transfer length' should be supported by all SPTI devices-->
<MinBufferSize value="65536"/>
<!--Minimal 'alignment mask' for SPTI devices - all buffers passed to SPTI will
be aligned according to this mask at least. Sure if an adapter requests
bigger alignment target will supply correctly alignmed buffers. -->
<AlignmentMask value="0x0000"/>
<!--Length of iSCSI queue. (min 1, max 1024)-->
<MaxPendingRequests value="256"/>
<!--Global target id name-->
<!--<DefTargetName value="iqn.2008-08.com.starwindsoftware:$(host).$(symid)"/>-->
<!--Setting value of AllowOnlyRecordableCd to 'yes' forces the target to filter out all but recordable CD/DVD.-->
<!--<AllowOnlyRecordableCd value="no"/> -->
<!--Auto Export some of the found Devices-->
<!--<AutoExportDevices value="spti:disk,spti:cd/dvd"/>-->
<!--Devices are autoexported as read/write by default.
Set value of AutoConfigMode to "ro" to allow only readonly access to all the devices-->
<!--<AutoExportMode value="ro"/>-->
<!--Devices are autoexported with share=rw by default.
Value may be '', 'r', 'w' or 'rw'. 'r' means that device will be
shared for reading. 'w' - for writing. Default is ''.-->
<!--<AutoExportShare value=""/>-->
<!--Address of an iSNS server to register targets with-->
<!--<iSnsServer value="127.0.0.1:3205"/>-->
<!--Time in seconds between TCP keepalive packets to the initiator
By default, this value = 5 seconds. Use 0 to disable it.-->
<!--<TcpKeepAlivePeriod value="0"/>-->
<!-- TCP Receive Timeout on socket, in seconds.
Value 0 - timeout not set.
Value > 0 - timeout applied during all lifetime of connection.
Value < 0 - timeout applied to period of connection establishing and iSCSI negotiation. -->
<!--<TcpRecvTimeout value="-5"/> -->
<!--Time in seconds between iSCSI pings from the target to the initiator
By default, this value = 5 seconds. Use 0 to disable pings.-->
<iScsiPingPeriod value="0"/>
<!-- Allow listing of interfaces in response to SendTargets=All -->
<iScsiDiscoveryListInterfaces value="1"/>
<!--Force set of default parameters for iSCSI sessions-->
<!--<iScsiInitialR2T value="0"/>-->
<!--<iScsiImmediateData value="1"/>-->
<!--<iScsiDefaultTime2Wait value="0"/>-->
<!--<iScsiFirstBurstLength value="65536"/>-->
<!--<iScsiMaxBurstLength value="262144"/>-->
<!--<iScsiMaxReceiveDataSegmentLength value="65536"/>-->
<!-- <iScsiStrictProtocolChecking value="yes"/>-->
<!--Default server node to create devices, targets and run workers-->
<!--<ServerDefaultNode value="0"/>-->
<!--Number of server nodes per NUMA node (1 - by default)-->
<!--ServerNodesPerNumaNode value="1"/>-->
<!--Number of I/O worker threads per server node (by default=0 - that means 1 worker per active core of the server node)-->
<ServerIoWorkersCount value="0"/>
<!--Number of active I/O worker threads per server node (by default=0 - that means 1 worker per active core of the server node)-->
<ServerIoWorkersConcurency value="0"/>
<!--Priority of the I/O worker threads (by default=0 - that means normal priority)-->
<!--<ServerIoWorkersPriority value="0"/>-->
<!--Max number of I/O completion records to get at once in I/O worker threads (by default=1)-->
<!--<ServerIoWorkersNumberOfEntries value="1"/>-->
<!--Assign an ideal core for each I/O worker thread (by default=0 - that means we let the system to schedult the threads to any core)-->
<!--<ServerUseIdealProcForThreads value="0"/>-->
<!--Set the affinity of the I/O worker threads to odd cores - for better performance on HyperThreaded processors (default=1)-->
<!--<ServerUseOnlyOddCoresForThreads value="1"/>-->
<!--Increase the process' min working set to minimize page faults-->
<!--<WorkingSetAddMBs value="64"/>-->
<iSerListen value=""/>
<!--List of interfaces for iSER protocol.-->
<LocalizationDir value="Localizations"/>
<DefaultStoragePoolPath value="My Computer\J\"/>
</options>
<ExperimentalFeatures>
<ExperimentalLSFS value="no"/>
</ExperimentalFeatures>
<cluster>
<!-- Settings for scale-out cluster. -->
<!-- Name of the cluster -->
<ClusterName value=""/>
<!-- Uniqie identifier of the cluster -->
<ClusterGUID value=""/>
<!-- Version of cluster settings. Can be used to resolve configuration conflicts between nodes -->
<ClusterSettingsVersion value="0"/>
<!-- List of nodes in cluster. List contains comma-separated address:port values.
For example, "192.168.1.1:3261,192.168.1.2:3261,192.168.1.3:3261,192.168.1.4:3261"
-->
<ClusterNodes value=""/>
<!-- List of synchronization networks for the cluster. List contains comma-separated address/mask values.
For example, "192.168.1.1/23,10.10.10.0/24,10.10.20.0/24"
-->
<ClusterSync value=""/>
<!-- List of heartbeat networks for the cluster. List contains comma-separated address/mask values.
For example, "10.30.10.0/24,10.40.40.0/24"
-->
<ClusterHeartbeat value=""/>
</cluster>
<notification>
<DataBaseRoot value=".\NotifyDB"/>
<DBRotationDays value="5"/>
<DBFileSizeDays value="1"/>
</notification>
<PerfromanceMonitor>
<PerformanceMonitorEnabled value="yes"/>
<PerformanceRoot value=".\PerformanceDB"/>
</PerfromanceMonitor>
<FreeSpaceMonitor>
<FSMThresholdPercent value="30"/>
<FSMCheckPeriodSeconds value="30"/>
<FSMEnabled value="yes"/>
</FreeSpaceMonitor>
</parameters>
<filebrowser>
<imagedir path="*" flags="cdmfv" alias="My Computer" extensions="*"/>
<imagedir path="*" flags="cdmfv" alias="Image Files" extensions="img,dat"/>
<imagedir path="*" flags="cmdfv" alias="VTLs" extensions="swdsk"/>
<imagedir path="*" flags="cmdfv" alias="VTapes" extensions="VTape"/>
<imagedir path="*" flags="cdmfv" alias="Event Logs" extensions="txt,log"/>
<imagedir path="*" flags="cdmfv" alias="Headers" extensions="swdsk"/>
</filebrowser>
<!-- Free space monitor works with thin-provisioned devices to inform administrator
about potential lack of free disk space for thin-provisioned virtual disk to grow.
It works with Deduplication and IBV devices now -->
<reactions>
<!-- Event notification settings.
type - type of notification
"eventlog" - add event record to Windows Applications Event Log;
"textfile" - add line to text file log;
"smtp" - send e-mail message using basic SMTP protocol

maskSeverity - message level (1 - Information, 2 - Warnings, 3 - Errors), may be bitwise OR of several levels
maskCode - event code (check Windows event log for code of exact event). -1 - do not check for event code.

type "eventlog":
<reaction maskSeverity="14" maskCode="-1" type="eventlog"/>

type "textfile":
<reaction maskSeverity="14" maskCode="254" type="textfile" filename="Event Logs\D\tst.txt" separator=""/>
fileaname sets text log file name using alias from "filebrowser" list
separator value - when set is used to devide list of message parameters after the message line. May be useful for scripts that parse the text log. If empty or not set - list of parameters is not added to message line.

type "smpt"
<reaction maskSeverity="8" maskCode="254" type="smtp" smtpHost="a.com" smtpPort="25" recepient="aa@a" mailFrom="aa" subj="Event notification"/>
smtpHost - address of SMTP server
smtpPort - port number for SMTP server
recepient - "send to" address
mailFrom - "mail from" address
subj - message subject line

-->
<reaction maskSeverity="14" maskCode="-1" type="eventlog"/>
</reactions>
<plugins>
<!--Plugins configuration.
Parameters (mandatory):
"module" attribute - plugin dll
symlink - device name prefix for all devices managed by the plugin
type - type of devices managed by the plugin
(optional):
"loglevel value="0-3" - override log level for a plugin (by default global LogLevel value is used)-->
<!--* | DD Disk plugin | * -->
<plugin module="DDDisk.dll">
<symlink value="DDDisk"/>
<type value="Deduplicated disk"/>
<imagedir path="*" flags="cmdfv" alias="My Computer" extensions="spbitmap"/>
<imagedir path="*" flags="cmdfv" alias="Metadata" extensions="spmetadata"/>
<imagedir path="*" flags="cmdfv" alias="Data" extensions="spdata"/>
<volumes value="no"/>
</plugin>
<!--* | DD EX Disk plugin | * -->
<plugin module="DDDiskEx.dll">
<symlink value="DDDiskEx"/>
<type value="Deduplicated disk Ex"/>
<imagedir path="*" flags="cmdfv" alias="My Computer" extensions="spdata"/>
<imagedir path="*" flags="cmdfv" alias="Metadata" extensions="spmetadata"/>
<volumes value="no"/>
</plugin>
<!--* | LSFS Disk plugin | * -->
<plugin module="lsfs.dll">
<symlink value="lsfs"/>
<type value="LSFS Disk"/>
<imagedir path="*" flags="cmdfv" alias="My Computer" extensions="spsp,swdsk"/>
<volumes value="no"/>
<CacheFlags value="131080"/>
<L2CacheFlags value="131080"/>
</plugin>
<!--Ram Disk plugin-->
<plugin module="RamDisk.dll">
<symlink value="RamDrive"/>
<type value="RAM disk"/>
</plugin>
<!--
ImageFile-specific parameters (mandatory):
imagedir - image files directory. several "imagedir"
elements can be set. "imagedir" must contain following attributes:
"path" - directory path (* - all drives allowed)
"flags" - directory access rights (c - create images, d - delete images, f - create directories, v - view subdirectories, m - mount images, p - mount point)
"alias" - directory alias
"extensions" - comma separated extension list. only files with these extensions can be viewed
"comment" - (optional) comment
optional:
volumes value="no|yes" - allows browsing and using of hard disk RAW partitions-->
<plugin module="ImageFile.dll">
<symlink value="ImageFile"/>
<type value="Image file"/>
<imagedir path="*" flags="cmdfv" alias="My Computer" extensions="img,swdsk"/>
<volumes value="no"/>
<QueueFlags value="0"/>
<QueueWorkersCount value="0"/>
<QueueWorkersActive value="0"/>
<CacheFlags value="0"/>
<L2CacheFlags value="0"/>
</plugin>
<!--

VirtualDVD-specific parameters (mandatory):
imagedir - image files directory. several "imagedir"
elements can be set. "imagedir" must contain following attributes:
"path" - directory path (* - all drives allowed)
"flags" - directory access rights ( v - view subdirectories, m - mount images)
"alias" - directory alias
"extensions" - comma separated extension list. only files with these extensions can be viewed
"comment" - (optional) comment
optional:
share - sharing option flags. Value may be '', 'r', 'w' or 'rw'. 'r' means that device will be
shared for reading. 'w' - for writing. Default is ''.
sessions - number of simultaneous iSCSI session allowed for this device. Default is 1.-->
<plugin module="VirtualDvd.dll">
<symlink value="VirtualDvd"/>
<type value="Virtual DVD"/>
<imagedir path="*" flags="mv" alias="My Computer" extensions="mds,iso"/>
</plugin>
<!--
IBVolume-specific parameters (mandatory):
imagedir - image files directory. several "imagedir"
elements can be set. "imagedir" must contain following attributes:
"path" - directory path (* - all drives allowed)
"flags" - directory access rights (c - create images, d - delete images, f - create directories, v - view subdirectories, m - mount images)
"alias" - directory alias
"extensions" - comma separated extension list. only files with these extensions can be viewed
"comment" - (optional) comment
optional:
volumes value="no|yes" - allows browsing and using of hard disk RAW partitions-->
<plugin module="IBVolume.dll">
<symlink value="IBV"/>
<type value="IBV"/>
<imagedir path="*" flags="cdmfv" alias="My Computer" extensions="ibv"/>
<imagedir path="*" flags="dmfv" alias="Snapshots" extensions="ibvss"/>
<imagedir path="*" flags="v" alias="Database" extensions="ibvdb"/>
<imagedir path="*" flags="cv" alias="Image Files" extensions="img,dat"/>
</plugin>
<!--
Mirror-specific parameters (mandatory):
imagedir - image files directory. several "imagedir"
elements can be set. "imagedir" must contain following attributes:
"path" - directory path (* - all drives allowed)
"flags" - directory access rights (c - create images, d - delete images, f - create directories, v - view subdirectories, m - mount images)
"alias" - directory alias
"extensions" - comma separated extension list. only files with these extensions can be viewed
"comment" - (optional) comment
optional:
volumes value="no|yes" - allows browsing and using of hard disk RAW partitions
-->
<plugin module="Mirror.dll">
<symlink value="Mirror"/>
<type value="Mirror"/>
<imagedir path="*" flags="cdmfv" alias="Mirror Volumes" extensions="mir"/>
<imagedir path="*" flags="cdmfv" alias="Image Files" extensions="img,dat"/>
</plugin>
<plugin module="DiskBridge.dll">
<symlink value="DiskBridge"/>
<type value="DiskBridge"/>
</plugin>
<plugin module="VirtualTape.dll">
<symlink value="VirtualTape"/>
<type value="Virtual tape"/>
<imagedir path="*" flags="cmdfv" alias="My Computer" extensions="vtl"/>
<volumes value="no"/>
<LogLevel value="1"/>
<!--
<VendorId value="QUANTUM "/>
<ProductId value="SuperDLT1 "/>
<RevisionLevel value="2424"/>
-->
</plugin>
<!--
HA-specific parameters:
transport : sync-channel transport. Can be one of the next values:
"msinitiator" - system transport,
"internal" - plugin internal transport
"auto" - automatic transport selection
-->
<plugin module="HAImage.dll">
<symlink value="HAImage"/>
<type value="HA Image"/>
<imagedir path="*" flags="cmdfv" alias="My Computer" extensions="img,swdsk,swcbt"/>
<imagedir path="*" flags="cdmfv" alias="Headers" extensions="swdsk"/>
<imagedir path="Device Headers" flags="cdmfv" alias="DefaultHeaderPath" extensions="swdsk"/>
<transport value="auto"/>
<rpl_threshold value="4"/>
<!--Node shutdown type can be close_clients_conn or alua_unavalable_state -->
<node_shutdown_type value="close_clients_conn"/>
<!--Maximum synchronization queue size.-->
<MaxSyncQueueSize size="16"/>
<!--If underlying storage of HA device suffers from performance degradation then this value(minutes) defines period for automatic synchronization attempts.
By default, this value = 30 minutes. Use 0 to disable automatic synchronization for device with performance degradation.-->
<!--<AutoSyncPeriodForStorPerfDegInMin value="0"/> -->
<!--Storage performance degradation time limit in milliseconds.
By default, this value = 7000 milliseconds.-->
<StorPerfDegTimeLimitMs value="7000"/>
<!--Period of time to keep information about storage performance degradation events in minutes.
By default, this value = 3 minutes.-->
<StorPerfDegDetectPeriodMin value="3"/>
<!--If request execution time is more than this value then warning notification will be generated in the events journal.
By default, this value = 10 seconds. Use 0 to disable notification.-->
<ReqExecTimeWarningLimitInSec value="10"/>
<!--By default, this value = 10 seconds.-->
<iScsiGenCmdSendCmdTimeoutInSec value="10"/>
<!--By default, this value = 5 seconds.-->
<iScsiPingCmdSendCmdTimeoutInSec value="5"/>
<!--By default, this value = 1 seconds.-->
<iScsiPingCmdSendCmdPeriodInSec value="1"/>
<!--By default, this value = 5 second.-->
<iScsiConnectRetryPeriodInSec value="5"/>
<!--By default, this value = 1 second.-->
<iScsiDisconnectRetryPeriodInSec value="1"/>
<!--By default, this value = 10 second.-->
<UnderlyingStorageTimeoutInSec value="10"/>
</plugin>
<plugin module="LWC.dll">
<symlink value="LWC"/>
<type value="LWC"/>
<imagedir path="*" flags="cmdfv" alias="My Computer" extensions="swdsk,swcbt,swcbm"/>
<imagedir path="*" flags="cdmfv" alias="Headers" extensions="swdsk"/>
<imagedir path="Device Headers" flags="cdmfv" alias="DefaultHeaderPath" extensions="swdsk"/>
<transport value="auto"/>
</plugin>
<!--VTL plugin-->
<plugin module="VTL.dll">
<symlink value="VTL"/>
<type value="VTL"/>
<LogLevel value="1"/>
<!-- replicator values - 3 S3, 4 BB, 8 SFT, 16 Azure, 32 S3Like, 64 Wasabi -->
<!-- replicator value="23" S3+BB+Azure -->
<replicator value="119"/>
<closefiles value="0"/>
<imagedir path="*" flags="cmdfv" alias="My Computer" extensions="swdsk"/>
<imagedir path="*" flags="cmdfv" alias="VTapes" extensions="VTape"/>
<imagedir path="VTL\" flags="cmdfv" alias="Patterns" extensions="VTLP"/>
</plugin>
<!--System Manager plugin-->
<plugin module="SysMan.dll">
<symlink value="SysMan"/>
<type value="System Manager"/>
<deduplicationmanager value="no"/>
<deploymenttasks value="no"/>
<LogLevel value="1"/>
</plugin>
<!--Azure Manager plugin-->
<plugin module="Azure.dll">
<symlink value="Azure"/>
<type value="Azure Manager"/>
<LogLevel value="3"/>
</plugin>
<plugin module="NVMfTarget.dll">
<symlink value="NVMfTarget"/>
<type value="NVMf Target"/>
<imagedir path="*" flags="cmdfv" alias="My Computer" extensions="img,conf"/>
<volumes value="no"/>
</plugin>
</plugins>
<devices>
<!-- Common device parameters:
reservation="yes|[no]" - allows emulation of SCSI persistent reservation in the server
-->
<!-- SPTI-specific device parameters (optional)
timeout="nnn" - SCSI command execution timeout (in seconds). Default is 108000 (30 hours).#
share="rw|r" - to allow multiple initiators to access the device (shared mode)
sessions="nnn" - set maximum number of initiators allowed to mount the device in shared mode
readonly="no|yes" - to export hard drives in readonly mode-->
<!-- Hard drive accessible through SPTI -->
<!--<device name="\\.\Physicaldrive0"/> -->
<!-- CD-ROM accessible through SPTI -->
<!--<device name="\\.\F:" timeout="256" share="rw" sessions="8" state="1"/> -->
<!-- ImageFile device parameters:
file - image files name. This name is relative to 'imagedir'. The file should exists. It can be created by means of 'mksparse' utility.
header - if not 0 the plugin will not use given amount of bytes in the beginning of the file. This value should be sector aligned.
asyncmode="no|yes" - if 'yes' the image is opened in asynchronous mode (you can benefit from this on stripped volumes)
clustered="no|yes" - if 'yes' the image is opened in shared mode and allows several iSCSI initiators to be connected to it
CacheMode="wt|wb|none" - cache mode, optional parameter.
If parameter is omitted or has value 'none' - cache is not used,
'wt' - write-through caching mode,
'wb' - write-back caching.
CacheSizeMB - optional, cache size in megabytes.
CacheBlockExpiryPeriodMS - optional, cache block expiry period in milliseconds.
-->
<!--<device name="ImageFile0" file="image.img" asyncmode="yes"/>
<device name="ImageFile1" file="\\.\X:" header="65536"/> -->
<!-- DiskBridge device caching parameters:
CacheMode="wt|wb|none" - cache mode, optional parameter.
If paramter is omitted or has value 'none' - cache is not used,
'wt' - write-through caching mode,
'wb' - write-back caching.
CacheSizeMB - optional, cache size in megabytes.
CacheBlockExpiryPeriodMS - optional, cache block expiry period in milliseconds.
-->
<!-- RAM disk device parameters:
size - size of RAM disk to create (in MB).
format - if 'yes' created disk will be formatted as FAT16 partition.
useawe="no|yes" - allows creating of huge ram drives (>1GB) -->
<!--<device name="RamDrive0" size="16" format="no"/>-->
<!-- Virtual DVD device parameters:
file - image (iso or mds) file name.
type - 'iso' or 'mds' depending on type of the image. -->
<!--<device name="VirtualDvd0" file="My Computer\D\temp\iwin2k.iso" type="iso"/>-->
<!-- IBVolume device parameters:
file - image files name. This name is relative to 'imagedir'. The file should exists.
It can be created by means of 'MirrorCtl.exe' utility.
clustered="no|yes" - if 'yes' the image is opened in shared mode
and allows several iSCSI initiators to be connected to it
mode="1|2|3" - mode of the volume:
1 - Growing Image mode (journals are not incremented, space is allocated on demand)
2 - Incremental backup volume (each session creates a new journal file pair)
3 - Auto-Restored Snapshot (all session changes are rolled back automatically on logout)
-->
<!--<device name="IBV0" file="My Computer\j\temp\1.ibv" clustered="no" mode="2"/>-->
<!-- device name="Mirror0" target="128-remote" file="Mirror Volumes\T\_img\mir-128-remote.mir" asyncmode="no" clustered="no" CacheSizeMB="64" CacheBlockExpiryPeriodMS="5000"/-->
<!-- <device name="ImageFile0" target="img" file="My Computer\D\test.img" asyncmode="yes" clustered="no" readonly="no" CacheMode="wt" CacheSizeMB="300" CacheBlockExpiryPeriodMS="5000"/> -->
<device name="imagefile1" file="My computer\J\VSAN1\LeahDataimg01.swdsk"/>
<device name="HAImage1" OwnTargetName="iqn.2008-08.com.starwindsoftware:-leahdatatrg01" file="My computer\J\VSAN1\LeahDataimg01_HA.swdsk" serialId="6E06E9FDE4335B80" asyncmode="yes" readonly="no" highavailability="yes" buffering="no" header="65536" reservation="no" CacheMode="wb" CacheSizeMB="64" AluaNodeGroupStates="0,0" Storage="imagefile1" PoolName="Pool1"/>
<device name="imagefile2" file="My computer\K\VSAN2\LeahLogimg01.swdsk"/>
<device name="HAImage2" OwnTargetName="iqn.2008-08.com.starwindsoftware:-leahlogtrg01" file="My computer\K\VSAN2\LeahLogimg01_HA.swdsk" serialId="59F74E8B3E6DE483" asyncmode="yes" readonly="no" highavailability="yes" buffering="no" header="65536" reservation="no" CacheMode="wb" CacheSizeMB="64" AluaNodeGroupStates="0,0" Storage="imagefile2" PoolName="Pool1"/>
<device name="imagefile3" file="My computer\L\VSAN3\LeahGenimg01.swdsk"/>
<device name="HAImage3" OwnTargetName="iqn.2008-08.com.starwindsoftware:-leahgentrg01" file="My computer\L\VSAN3\LeahGenimg01_HA.swdsk" serialId="127C6A64A096EA79" asyncmode="yes" readonly="no" highavailability="yes" buffering="no" header="65536" reservation="no" CacheMode="wb" CacheSizeMB="64" AluaNodeGroupStates="0,0" Storage="imagefile3" PoolName="Pool1"/>
<device name="imagefile4" file="My computer\J\Quorum\LeahQuorumimg01.swdsk"/>
<device name="HAImage4" OwnTargetName="iqn.2008-08.com.starwindsoftware:-leahquorumtrg01" file="My computer\J\Quorum\LeahQuorumimg01_HA.swdsk" serialId="6068D2B1194291EB" asyncmode="yes" readonly="no" highavailability="yes" buffering="no" header="65536" reservation="no" CacheMode="wb" CacheSizeMB="64" AluaNodeGroupStates="0,0" Storage="imagefile4" PoolName="Pool1"/>
</devices>
<targets>
<!--<target name="targetname" alias="my target" devices="ImageFile0,ImageFile1"/>-->
<!--<target name="targetname" alias="my target" devices="ImageFile0,ImageFile1" XcopyMode="3"/>-->
<!--Target XcopyMode parameter value: 0 - none, 1 - VAAI, 2 - ODX, 3 - ODX+VAAI, 4 - use global options
By default, this value = 4 that means we choose mode from 0 to 3 depends on VaaiExCopyEnabled and OdxEnabled global options.-->
<target name="iqn.2008-08.com.starwindsoftware:-leahdatatrg01" alias="LeahDatatrg01" devices="HAImage1"/>
<target name="iqn.2008-08.com.starwindsoftware:-leahlogtrg01" alias="LeahLogtrg01" devices="HAImage2"/>
<target name="iqn.2008-08.com.starwindsoftware:-leahgentrg01" alias="LeahGentrg01" devices="HAImage3"/>
<target name="iqn.2008-08.com.starwindsoftware:-leahquorumtrg01" alias="LeahQuorumtrg01" devices="HAImage4"/>
</targets>
<permissions>
<!-- CHAP authentication
<permission device="RamDrive0" chapLocalName="iqn.1991-05.com.microsoft:home.MSHOME.NET" chapLocalSecret="5432109876543210" chapPeerSecret="0123456789012345"/>
<permission chapLocalName="test" chapLocalSecret="5432109876543210" chapPeerName="" chapPeerSecret="0123456789012345"/>-->
</permissions>
<!--
Notifications configuration. Required parameters are:
type = <smtp|snmp|file>. Type defines the way notifications are made. "smtp" means notification is send as email, "snmp" means notification is send as
SNMP trap, in case of "file" notification is written to file.
recipient - notification destination. This should be recipient email address for "smtp", hostname or ip address for "snmp" and file name for "file".
Following parameters are required only for "smtp" notifications:
mailFrom - address that is passed in email From field
smtpHost - hostname of SMTP server
smtpPort - port of SMTP server.

event element defines what events will generate notifications. Each event is identified by unique id. Following events are supported:
1 - Device is added or removed
2 - Image is created or deleted
3 - Device is not available
4 - Initiator login/logoff
5 - Initiator disconnect (without logoff)
6 - iSCSI service is started/stopped
7 - Password changed
All events with "id" set to other value are ignored.
-->
<acltable>
<aclrecord name="allow for partner(s) of iqn.2008-08.com.starwindsoftware:-leahquorumtrg01" source="iqn.2008-08.com.starwindsoftware:levi.bockmanninc.local-leviquorumtrg01" destination="iqn.2008-08.com.starwindsoftware:-leahquorumtrg01" interface="" action="allow"/>
<aclrecord name="allow for partner(s) of iqn.2008-08.com.starwindsoftware:-leahgentrg01" source="iqn.2008-08.com.starwindsoftware:levi.bockmanninc.local-levigentrg01" destination="iqn.2008-08.com.starwindsoftware:-leahgentrg01" interface="" action="allow"/>
<aclrecord name="allow for partner(s) of iqn.2008-08.com.starwindsoftware:-leahlogtrg01" source="iqn.2008-08.com.starwindsoftware:levi.bockmanninc.local-levilogtrg01" destination="iqn.2008-08.com.starwindsoftware:-leahlogtrg01" interface="" action="allow"/>
<aclrecord name="allow for partner(s) of iqn.2008-08.com.starwindsoftware:-leahdatatrg01" source="iqn.2008-08.com.starwindsoftware:levi.bockmanninc.local-levidatatrg01" destination="iqn.2008-08.com.starwindsoftware:-leahdatatrg01" interface="" action="allow"/>
<DefaultAccessPolicy value="allow"/>
</acltable>
</configuration>
yaroslav (staff)
Staff
Posts: 2340
Joined: Mon Nov 18, 2019 11:11 am

Mon Apr 27, 2020 7:31 pm

Hi paul59,
Sync network was not supposed to share the domain network? maybe I'm wrong here.
Well, that's not exactly what I was trying to say. The Domain network should be used as an additional heartbeat.

I will take a closer look at the script and .cfg file and provide you with the update as soon as possible.

Let me know if you have additional questions.
yaroslav (staff)
Staff
Posts: 2340
Joined: Mon Nov 18, 2019 11:11 am

Thu Apr 30, 2020 12:41 pm

Greetings,

Sorry for such a delayed response...
You need to check _HA.swdsk files to see if sync and iSCSI are there. See in the image below how the entries should look like.
Again, sorry for such a delayed response.
How sync and heartbeat channels look like under the hood.
How sync and heartbeat channels look like under the hood.
Screenshot_6.png (14.55 KiB) Viewed 36077 times
paul59
Posts: 4
Joined: Sun Apr 19, 2020 1:24 pm

Thu Apr 30, 2020 5:18 pm

I have added another heartbeat channel and everything has synchronized. It looks ok so far, and now I can move into further testing. Thanks for all the assistance, and maybe sometime later I'll figure out how to make the heartbeat and synchronization channels show up in the EnumDevicesNodes.ps1 script.
Thanks
Paul
yaroslav (staff)
Staff
Posts: 2340
Joined: Mon Nov 18, 2019 11:11 am

Fri May 01, 2020 1:17 pm

Paul,

Happy to know that everything finally works. Let us know if there is anything I can assist you with.
timothysykes
Posts: 1
Joined: Fri Mar 10, 2023 9:08 am

Fri Mar 10, 2023 9:16 am

Virtual SAN Free won't give you all the benefits of a commercial Virtual SAN, but it will help you secure your data and dramatically improve and increase the productivity of your environment.
drewbinsky
Posts: 1
Joined: Mon Mar 13, 2023 2:29 am

Mon Mar 13, 2023 2:35 am

We gain from using StarWind Virtual SAN in a variety of ways: Due to the fact that it doesn't require additional license fees, StarWind Virtual SAN is a cost-effective solution. This might assist VARs in providing their clients with competitive pricing.
User avatar
anton (staff)
Site Admin
Posts: 4010
Joined: Fri Jun 18, 2004 12:03 am
Location: British Virgin Islands
Contact:

Tue Feb 27, 2024 10:57 am

Thanks for the update! We appreciate your feedback guys!
Regards,
Anton Kolomyeytsev

Chief Technology Officer & Chief Architect, StarWind Software

Image
Post Reply