DR from on-premises to Azure and across Azure regions or VNets - Windows

Last published : Jul 07, 2026
VCS lets you use the global cluster option (GCO) for DR configurations. You can use a DR configuration to fail over applications across different regions or VNets in Azure or between an on-premises site and Azure.
The following is required for on-premise to cloud DR using VPN tunneling:
  • Prepare the setup at on-premise data center
  • Prepare the setup at on-cloud data center
  • Establish a VPN tunnel from on-premise data center to cloud data center
  • Virtual private IP for cluster nodes that exist in the same subnet. The IP address is used for cross-cluster communication
The following is required for region to region DR using VNet peering:
  • Prepare the setup at both the data centers in the regions
  • Establish a VNet peering from one region to the other region
  • Virtual private IP for cluster nodes that exist in the same subnet. The IP address is used for cross-cluster communication
    Note: If you use an VPN tunnel between an on-premises site and Azure or you use VNet peering between Azure regions, the cluster nodes in the cloud must be in the same subnet.
Sample configuration with private IP
image
The sample configuration includes the following elements:
  • VPN tunnel between on-premise data center and Region A
  • The primary site has the following elements:
    • Cluster nodes in the same subnet
    • Virtual private IP for cross-cluster communication
  • The secondary site has the following elements:
    • A VNet is configured in Region A of the Azure cloud
    • The same application is configured for HA on Node 3 and Node 4, which exist in Subnet
    • Virtual private IP for cross-cluster communication
Sample service group configuration with private IP
The following snippet is a service group configuration from a sample configuration file (main.cf):
Sample configuration using AzureAuth agent
cluster vcs_cluster1 (
    ClusterAddress = "10.3.3.100"
    SecureClus = 1
)

remotecluster vcs_cluster2 (
    ClusterAddress = "10.5.0.5"
)

heartbeat Icmp (
    ClusterList = { vcs_cluster2 }
    Arguments @vcs_cluster2 = { "10.5.0.5" }
)

system AzureVM1(
)
system AzureVM2(
)

group AzureAuthGrp (
    SystemList = { AzureVM1= 0, AzureVM2= 1 }
    Parallel = 1
)

    AzureAuth azurauth (
        SubscriptionId = 6940a326-abc6-40dd-b717-c1e9bcdf1d63
        ClientId = 8c891a8c-ghi2-473b-bbec-035ac50fb896
        SecretKey = gsiOssRooSpShuNoiQioNsjQlqHovUosQsrMt
        TenantId = 96dcased-0448-4308-b505-6789d61dd0e3
    )

    Phantom phres (
    )

group ClusterService (
    SystemList = { AzureVM1= 0, AzureVM2= 1 }
    AutoStartList = { AzureVM1, AzureVM2}
    OnlineRetryLimit = 3
    OnlineRetryInterval = 120
)

    Process wac (
        StartProgram @ AzureVM1 = "\"C:\\Program Files\\Veritas\\
                            Cluster Server\\bin\\wac.exe\""
        StartProgram @ AzureVM2 = "\"C:\\Program Files\\Veritas\\
                            Cluster Server\\bin\\wac.exe\""
        StopProgram @ AzureVM1 = "\"C:\\Program Files\\Veritas\\
                            Cluster Server\\bin\\wacstop.exe\""
        StopProgram @ AzureVM2 = "\"C:\\Program Files\\Veritas\\
                            Cluster Server\\bin\\wacstop.exe\""
        MonitorProgram @ AzureVM1 = "\"C:\\Program Files\\Veritas\\
                            Cluster Server\\bin\\wacmonitor.exe\""
        MonitorProgram @ AzureVM2 = "\"C:\\Program Files\\Veritas\\
                            Cluster Server\\bin\\wacmonitor.exe\""

    AzureIP azureipres (
        PrivateIP = "10.3.3.100"
MACAddress @AzureVM1 = 00-0D-3A-91-73-A0
MACAddress @AzureVM2 = 00-0D-3A-92-03-DC
AzureAuthResName = azurauth
    )

    IP gcoip (
        Address = "10.3.3.100"
        SubNetMask = "255.255.255.0"
MACAddress @AzureVM1 = 00-0D-3A-91-73-A0
MACAddress @AzureVM2 = 00-0D-3A-92-03-DC

    )

    NIC gconic (
MACAddress @AzureVM1 = 00-0D-3A-91-73-A0
MACAddress @AzureVM2 = 00-0D-3A-92-03-DC
    )

    gcoip requires azureipres
    gcoip requires gconic
    wac requires gcoip

group VVR (
    SystemList = { AzureVM1= 0, AzureVM2= 1 }
    AutoStartList = { AzureVM1, AzureVM2}
)

    AzureDisk disk_res (
        DiskIds = {
            "/subscriptions/6940a326-abc6-40dd-b717-c1e9bcdf1d63/
         resourceGroups/TestRG/providers/Microsoft.Compute/
         disks/AzureDisk1"
        }
        VMResourceGroup = TestRG
        AzureAuthResName = azurauth
    )

    AzureDisk disk_res1 (
        DiskIds = {
            "/subscriptions/6940a326-abc6-40dd-b717-c1e9bcdf1d63/
           resourceGroups/TestRG/providers/Microsoft.Compute/
           disks/AzureDisk2"
            }
        VMResourceGroup = TestRG
        AzureAuthResName = azurauth
    )

    AzureDisk disk_res3 (
        DiskIds = {
            "/subscriptions/6940a326-abc6-40dd-b717-c1e9bcdf1d63/
         resourceGroups/TestRG/providers/Microsoft.Compute/
         disks/AzureDisk3"
            }
        VMResourceGroup = TestRG
        AzureAuthResName = azurauth
    )

    AzureIP azureipres_vvr (
        PrivateIP = "10.3.3.200"
MACAddress @AzureVM1 = 00-0D-3A-91-73-A0
MACAddress @AzureVM2 = 00-0D-3A-92-03-DC
        AzureAuthResName = azurauth
    )

    AzureIP azureipres_vvr1 (
        PrivateIP = "10.3.3.201"
MACAddress @AzureVM1 = 00-0D-3A-91-73-A0
MACAddress @AzureVM2 = 00-0D-3A-92-03-DC
        AzureAuthResName = azurauth
    )

    IP ip_vvr (
        Address = "10.3.3.200"
        SubNetMask = "255.255.255.0"
MACAddress @AzureVM1 = 00-0D-3A-91-73-A0
MACAddress @AzureVM2 = 00-0D-3A-92-03-DC
    )

    NIC nic_vvr (
MACAddress @AzureVM1 = 00-0D-3A-91-73-A0
MACAddress @AzureVM2 = 00-0D-3A-92-03-DC
    )

    VMNSDg dgres (
        DiskGroupName = vvrdg
        DGGuid = 6bee34d7-056d-4b01-ae63-397099792471
        )

    VvrRvg rvgres (
        RVG = rvg
        VMDgResName = dgres
        IPResName = ip_vvr
        )

    ip_vvr requires azureipres_vvr
    dgres requires disk_res
    dgres requires disk_res1
    ip_vvr requires nic_vvr
    rvgres requires ip_vvr
    rvgres requires dgres

group SG_FS (
    SystemList = { AzureVM1= 0, AzureVM2= 1 }
    ClusterList = { vcs_cluster1 = 0,    vcs_cluster2 = 1 }
    Authority = 1
    )

    FileShare SG_FS-FileShare (
        PathName = "\\PerfLogs"
        ShareName = PerfLogs
        LanmanResName = SG_FS-Lanman
        MountResName = SG_FS-MountV
        UserPermissions = { "VCSDOMAIN\\Administrator" = FULL_CONTROL }
        ShareSubdirectories = 1
        )

    AzureIP SG_FS-AzureIP (
        PrivateIP = "10.3.3.300"
MACAddress @AzureVM1 = 00-0D-3A-91-73-A0
MACAddress @AzureVM2 = 00-0D-3A-92-03-DC
        AzureAuthResName = azurauth
    )

IP SG_FS-IP (
        Address = "10.3.3.300"
        SubNetMask = "255.255.255.0"
MACAddress @AzureVM1 = 00-0D-3A-91-73-A0
MACAddress @AzureVM2 = 00-0D-3A-92-03-DC
        )

    Lanman SG_FS-Lanman (
        VirtualName = AzureVirtualFS
        IPResName = SG_FS-IP
        DNSUpdateRequired = 1
        ADUpdateRequired = 1
        DNSCriticalForOnline = 1
        ADCriticalForOnline = 1
        )

    MountV SG_FS-MountV (
        MountPath = "G:"
        VolumeName = volume1
        VMDGResName = dgres
        )

    NIC SG_FS-NIC (
MACAddress @AzureVM1 = 00-0D-3A-91-73-A0
MACAddress @AzureVM2 = 00-0D-3A-92-03-DC
        )

    RVGPrimary SG_FS-RVGPrimary (
        RvgResourceName = rvgres
        )

    requires group VVR online local hard
    SG_FS-FileShare requires SG_FS-MountV
    SG_FS-FileShare requires SG_FS-Lanman
    SG_FS-IP requires SG_FS-NIC
    SG_FS-IP requires SG_FS-AzureIP
    SG_FS-Lanman requires SG_FS-IP
    SG_FS-MountV requires SG_FS-RVGPrimary
Sample configuration using a managed identity
cluster vcs_cluster1 (
ClusterAddress = "10.3.3.100"
SecureClus = 1
)
remotecluster vcs_cluster2 (
ClusterAddress = "10.5.0.5"
)
heartbeat Icmp (
ClusterList = { vcs_cluster2 }
Arguments @vcs_cluster2 = { "10.5.0.5" }
)
system AzureVM1(
)
system AzureVM2(
)
group ClusterService (
SystemList = { AzureVM1= 0, AzureVM2= 1 }
AutoStartList = { AzureVM1, AzureVM2}
OnlineRetryLimit = 3
OnlineRetryInterval = 120
)
Process wac (
StartProgram @ AzureVM1 = "\"C:\\Program Files\\Veritas\\
Cluster Server\\bin\\wac.exe\""
StartProgram @ AzureVM2 = "\"C:\\Program Files\\Veritas\\
Cluster Server\\bin\\wac.exe\""
StopProgram @ AzureVM1 = "\"C:\\Program Files\\Veritas\\
Cluster Server\\bin\\wacstop.exe\""
StopProgram @ AzureVM2 = "\"C:\\Program Files\\Veritas\\
Cluster Server\\bin\\wacstop.exe\""
MonitorProgram @ AzureVM1 = "\"C:\\Program Files\\Veritas\\
Cluster Server\\bin\\wacmonitor.exe\""
MonitorProgram @ AzureVM2 = "\"C:\\Program Files\\Veritas\\
Cluster Server\\bin\\wacmonitor.exe\""
)
AzureIP azureipres (
PrivateIP = "10.3.3.100"
MACAddress @AzureVM1 = 00-0D-3A-91-73-A0
MACAddress @AzureVM2 = 00-0D-3A-92-03-DC
ManagedIdentityClientID = 1da89bd2-9735-4266-b920-27c23b98f022
)
IP gcoip (
Address = "10.3.3.100"
SubNetMask = "255.255.255.0"
MACAddress @AzureVM1 = 00-0D-3A-91-73-A0
MACAddress @AzureVM2 = 00-0D-3A-92-03-DC
)
NIC gconic (
MACAddress @AzureVM1 = 00-0D-3A-91-73-A0
MACAddress @AzureVM2 = 00-0D-3A-92-03-DC
)
gcoip requires azureipres
gcoip requires gconic
wac requires gcoip
group VVR (
SystemList = { AzureVM1= 0, AzureVM2= 1 }
AutoStartList = { AzureVM1, AzureVM2}
)
AzureDisk disk_res (
DiskIds = {
"/subscriptions/6940a326-abc6-40dd-b717-c1e9bcdf1d63/
resourceGroups/TestRG/providers/Microsoft.Compute/
disks/AzureDisk1"
}
VMResourceGroup = TestRG
ManagedIdentityClientID = 1da89bd2-9735-4266-b920-27c23b98f022
)
AzureDisk disk_res1 (
DiskIds = {
"/subscriptions/6940a326-abc6-40dd-b717-c1e9bcdf1d63/
resourceGroups/TestRG/providers/Microsoft.Compute/
disks/AzureDisk2"
}
VMResourceGroup = TestRG
ManagedIdentityClientID = 1da89bd2-9735-4266-b920-27c23b98f022
)
AzureDisk disk_res3 (
DiskIds = {
"/subscriptions/6940a326-abc6-40dd-b717-c1e9bcdf1d63/
resourceGroups/TestRG/providers/Microsoft.Compute/
disks/AzureDisk3"
}
VMResourceGroup = TestRG
ManagedIdentityClientID = 1da89bd2-9735-4266-b920-27c23b98f022
)
AzureIP azureipres_vvr (
PrivateIP = "10.3.3.200"
MACAddress @AzureVM1 = 00-0D-3A-91-73-A0
MACAddress @AzureVM2 = 00-0D-3A-92-03-DC
ManagedIdentityClientID = 1da89bd2-9735-4266-b920-27c23b98f022
)
AzureIP azureipres_vvr1 (
PrivateIP = "10.3.3.201"
MACAddress @AzureVM1 = 00-0D-3A-91-73-A0
MACAddress @AzureVM2 = 00-0D-3A-92-03-DC
ManagedIdentityClientID = 1da89bd2-9735-4266-b920-27c23b98f022
)
IP ip_vvr (
Address = "10.3.3.200"
SubNetMask = "255.255.255.0"
MACAddress @AzureVM1 = 00-0D-3A-91-73-A0
MACAddress @AzureVM2 = 00-0D-3A-92-03-DC
)
NIC nic_vvr (
MACAddress @AzureVM1 = 00-0D-3A-91-73-A0
MACAddress @AzureVM2 = 00-0D-3A-92-03-DC
)
VMNSDg dgres (
DiskGroupName = vvrdg
DGGuid = 6bee34d7-056d-4b01-ae63-397099792471
)
VvrRvg rvgres (
RVG = rvg
VMDgResName = dgres
IPResName = ip_vvr
)
ip_vvr requires azureipres_vvr
dgres requires disk_res
dgres requires disk_res1
ip_vvr requires nic_vvr
rvgres requires ip_vvr
rvgres requires dgres
group SG_FS (
SystemList = { AzureVM1= 0, AzureVM2= 1 }
ClusterList = { vcs_cluster1 = 0, vcs_cluster2 = 1 }
Authority = 1
)
FileShare SG_FS-FileShare (
PathName = "\\PerfLogs"
ShareName = PerfLogs
LanmanResName = SG_FS-Lanman
MountResName = SG_FS-MountV
UserPermissions = { "VCSDOMAIN\\Administrator" = FULL_CONTROL }
ShareSubdirectories = 1
)
AzureIP SG_FS-AzureIP (
PrivateIP = "10.3.3.300"
MACAddress @AzureVM1 = 00-0D-3A-91-73-A0
MACAddress @AzureVM2 = 00-0D-3A-92-03-DC
ManagedIdentityClientID = 1da89bd2-9735-4266-b920-27c23b98f022
)
IP SG_FS-IP (
Address = "10.3.3.300"
SubNetMask = "255.255.255.0"
MACAddress @AzureVM1 = 00-0D-3A-91-73-A0
MACAddress @AzureVM2 = 00-0D-3A-92-03-DC
)
Lanman SG_FS-Lanman (
VirtualName = AzureVirtualFS
IPResName = SG_FS-IP
DNSUpdateRequired = 1
ADUpdateRequired = 1
DNSCriticalForOnline = 1
ADCriticalForOnline = 1
)
MountV SG_FS-MountV (
MountPath = "G:"
VolumeName = volume1
VMDGResName = dgres
)
NIC SG_FS-NIC (
MACAddress @AzureVM1 = 00-0D-3A-91-73-A0
MACAddress @AzureVM2 = 00-0D-3A-92-03-DC
)
RVGPrimary SG_FS-RVGPrimary (
RvgResourceName = rvgres
)
requires group VVR online local hard
SG_FS-FileShare requires SG_FS-MountV
SG_FS-FileShare requires SG_FS-Lanman
SG_FS-IP requires SG_FS-NIC
SG_FS-IP requires SG_FS-AzureIP
SG_FS-Lanman requires SG_FS-IP
SG_FS-MountV requires SG_FS-RVGPrimary