Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как настроить и проверить аварийное восстановление для виртуальных машин Azure с помощью Azure PowerShell.
Вы узнаете, как:
- Создайте хранилище служб восстановления.
- Задайте контекст хранилища для сеанса PowerShell.
- Подготовьте хранилище для начала репликации виртуальных машин Azure.
- Создание сетевых сопоставлений.
- Создайте учетные записи хранения для репликации виртуальных машин.
- Реплицируйте виртуальные машины Azure в регион восстановления для аварийного восстановления.
- Выполните тестовое переключение на резервную систему, проверку и очистку после тестового переключения.
- Переключение на резервный регион.
Примечание.
Не все возможности сценария, доступные на портале, могут быть доступны с помощью Azure PowerShell. Ниже приведены некоторые возможности сценария, которые сейчас не поддерживаются с помощью Azure PowerShell:
- Возможность указать, что все диски в виртуальной машине должны быть реплицированы без необходимости явно указывать каждый диск виртуальной машины.
Примечание.
Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Сведения о начале работы см. в статье "Установка Azure PowerShell". Чтобы узнать, как перейти на модуль Az PowerShell, см. статью Миграция Azure PowerShell с AzureRM на Az.
Предпосылки
Перед началом:
- Вам должны быть понятны архитектура и компоненты сценария.
- Ознакомьтесь с требованиями поддержки для всех компонентов.
- У вас есть модуль
AzAzure PowerShell. Если вам необходимо установить или обновить Azure PowerShell, ознакомьтесь с этим руководством по установке и настройке Azure PowerShell.
Вход в подписку Microsoft Azure
Войдите в подписку Azure с помощью командлета Connect-AzAccount .
Connect-AzAccount
Выберите подписку Azure. Используйте командлет Get-AzSubscription, чтобы получить список подписок Azure, к которым у вас есть доступ. Выберите подписку Azure для работы с помощью командлета Set-AzContext .
Set-AzContext -SubscriptionId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Получение сведений о реплицируемой виртуальной машине
В этой статье виртуальная машина в регионе "Восточная часть США" реплицируется и восстанавливается в регионе "Западная часть США 2". На реплицируемой виртуальной машине есть диск ОС и один диск данных. Имя виртуальной машины, используемой в примере AzureDemoVM.
# Get details of the virtual machine
$VM = Get-AzVM -ResourceGroupName "A2AdemoRG" -Name "AzureDemoVM"
Write-Output $VM
ResourceGroupName : A2AdemoRG
Id : /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/A2AdemoRG/providers/Microsoft.Compute/virtualMachines/AzureDemoVM
VmId : 1b864902-c7ea-499a-ad0f-65da2930b81b
Name : AzureDemoVM
Type : Microsoft.Compute/virtualMachines
Location : eastus
Tags : {}
DiagnosticsProfile : {BootDiagnostics}
HardwareProfile : {VmSize}
NetworkProfile : {NetworkInterfaces}
OSProfile : {ComputerName, AdminUsername, WindowsConfiguration, Secrets}
ProvisioningState : Succeeded
StorageProfile : {ImageReference, OsDisk, DataDisks}
Получение сведений о дисках виртуальной машины. Сведения о диске будут использоваться позже при запуске репликации для виртуальной машины.
$OSDiskVhdURI = $VM.StorageProfile.OsDisk.Vhd
$DataDisk1VhdURI = $VM.StorageProfile.DataDisks[0].Vhd
Создайте хранилище для служб восстановления
Создайте группу ресурсов, в которой будет создано хранилище служб восстановления.
Это важно
- Хранилище служб восстановления и защищенные виртуальные машины должны находиться в разных расположениях Azure.
- Группа ресурсов хранилища служб восстановления и защищенные виртуальные машины должны находиться в разных расположениях Azure.
- Хранилище служб восстановления и группа ресурсов, к которой она принадлежит, может находиться в одном расположении Azure.
В этом примере защищенная виртуальная машина находится в регионе "Восточная часть США". Регион, выбранный для аварийного восстановления, — это Западный регион США 2. Хранилище служб восстановления и группа ресурсов хранилища находятся как в регионе восстановления, так и в западной части США 2.
#Create a resource group for the recovery services vault in the recovery Azure region
New-AzResourceGroup -Name "a2ademorecoveryrg" -Location "West US 2"
ResourceGroupName : a2ademorecoveryrg
Location : westus2
ProvisioningState : Succeeded
Tags :
ResourceId : /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/a2ademorecoveryrg
Создайте хранилище служб восстановления. В этом примере в регионе "Западная часть США 2" создается хранилище a2aDemoRecoveryVault служб восстановления.
#Create a new Recovery services vault in the recovery region
$vault = New-AzRecoveryServicesVault -Name "a2aDemoRecoveryVault" -ResourceGroupName "a2ademorecoveryrg" -Location "West US 2"
Write-Output $vault
Name : a2aDemoRecoveryVault
ID : /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/a2ademorecoveryrg/providers/Microsoft.RecoveryServices/vaults/a2aDemoRecoveryVault
Type : Microsoft.RecoveryServices/vaults
Location : westus2
ResourceGroupName : a2ademorecoveryrg
SubscriptionId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Properties : Microsoft.Azure.Commands.RecoveryServices.ARSVaultProperties
Установить контекст хранилища
Задайте контекст хранилища для использования в сеансе PowerShell. После установки контекста хранилища операции Azure Site Recovery в сеансе PowerShell выполняются в контексте выбранного хранилища.
#Setting the vault context.
Set-AzRecoveryServicesAsrVaultContext -Vault $vault
ResourceName ResourceGroupName ResourceNamespace ResourceType
------------ ----------------- ----------------- -----------
a2aDemoRecoveryVault a2ademorecoveryrg Microsoft.RecoveryServices Vaults
#Delete the downloaded vault settings file
Remove-Item -Path $Vaultsettingsfile.FilePath
Для миграции с Azure на Azure можно задать контекст для недавно созданного хранилища.
#Set the vault context for the PowerShell session.
Set-AzRecoveryServicesAsrVaultContext -Vault $vault
Подготовьте хранилище для начала репликации виртуальных машин Azure
Создание объекта Структуры Site Recovery для представления основного (исходного) региона
Объект fabric в хранилище представляет собой регион облачного сервиса Azure. Основной объект структуры Fabric создается для представления региона Azure, к которому принадлежат виртуальные машины, защищаемые в хранилище. В этом примере защищенная виртуальная машина находится в регионе "Восточная часть США".
- Для каждой области можно создать только один объект fabric.
- Если вы ранее включили репликацию Site Recovery для виртуальной машины на портале Azure, Site Recovery автоматически создает объект структуры. Если объект структуры существует для региона, создать новый объект невозможно.
Прежде чем начать, понять, что операции Site Recovery выполняются асинхронно. При запуске операции отправляется задание Azure Site Recovery и возвращается объект отслеживания задания. Используйте объект отслеживания заданий, чтобы получить последнее состояние задания (Get-AzRecoveryServicesAsrJob) и отслеживать состояние операции.
#Create Primary ASR fabric
$TempASRJob = New-AzRecoveryServicesAsrFabric -Azure -Location 'East US' -Name "A2Ademo-EastUS"
# Track Job status to check for completion
while (($TempASRJob.State -eq "InProgress") -or ($TempASRJob.State -eq "NotStarted")){
#If the job hasn't completed, sleep for 10 seconds before checking the job status again
sleep 10;
$TempASRJob = Get-AzRecoveryServicesAsrJob -Job $TempASRJob
}
#Check if the Job completed successfully. The updated job state of a successfully completed job should be "Succeeded"
Write-Output $TempASRJob.State
$PrimaryFabric = Get-AzRecoveryServicesAsrFabric -Name "A2Ademo-EastUS"
Если виртуальные машины из нескольких регионов Azure защищены в одном хранилище, создайте один объект структуры для каждого исходного региона Azure.
Создайте объект Site Recovery Fabric для представления области восстановления
Объект структуры восстановления представляет расположение Azure для восстановления. При отработке отказа виртуальные машины реплицируются и восстанавливаются в регион восстановления, представленный инфраструктурой восстановления. Регион Azure восстановления, используемый в этом примере, — западная часть США 2.
#Create Recovery ASR fabric
$TempASRJob = New-AzRecoveryServicesAsrFabric -Azure -Location 'West US 2' -Name "A2Ademo-WestUS"
# Track Job status to check for completion
while (($TempASRJob.State -eq "InProgress") -or ($TempASRJob.State -eq "NotStarted")){
sleep 10;
$TempASRJob = Get-AzRecoveryServicesAsrJob -Job $TempASRJob
}
#Check if the Job completed successfully. The updated job state of a successfully completed job should be "Succeeded"
Write-Output $TempASRJob.State
$RecoveryFabric = Get-AzRecoveryServicesAsrFabric -Name "A2Ademo-WestUS"
Создание контейнера защиты Site Recovery в основной структуре
Контейнер защиты — это контейнер, используемый для группировки реплицированных элементов в структуре.
#Create a Protection container in the primary Azure region (within the Primary fabric)
$TempASRJob = New-AzRecoveryServicesAsrProtectionContainer -InputObject $PrimaryFabric -Name "A2AEastUSProtectionContainer"
#Track Job status to check for completion
while (($TempASRJob.State -eq "InProgress") -or ($TempASRJob.State -eq "NotStarted")){
sleep 10;
$TempASRJob = Get-AzRecoveryServicesAsrJob -Job $TempASRJob
}
Write-Output $TempASRJob.State
$PrimaryProtContainer = Get-AzRecoveryServicesAsrProtectionContainer -Fabric $PrimaryFabric -Name "A2AEastUSProtectionContainer"
Создание контейнера защиты Site Recovery в структуре восстановления
#Create a Protection container in the recovery Azure region (within the Recovery fabric)
$TempASRJob = New-AzRecoveryServicesAsrProtectionContainer -InputObject $RecoveryFabric -Name "A2AWestUSProtectionContainer"
#Track Job status to check for completion
while (($TempASRJob.State -eq "InProgress") -or ($TempASRJob.State -eq "NotStarted")){
sleep 10;
$TempASRJob = Get-AzRecoveryServicesAsrJob -Job $TempASRJob
}
#Check if the Job completed successfully. The updated job state of a successfully completed job should be "Succeeded"
Write-Output $TempASRJob.State
$RecoveryProtContainer = Get-AzRecoveryServicesAsrProtectionContainer -Fabric $RecoveryFabric -Name "A2AWestUSProtectionContainer"
Создание структуры и контейнера при включении репликации между зонами
При включении репликации между зонами создается только одна структура. Но будет два контейнера. Предположим, что регион — Западная Европа, используйте следующие команды, чтобы получить основные и защитные контейнеры.
$primaryProtectionContainer = Get-AzRecoveryServicesAsrProtectionContainer -Fabric $fabric -Name "asr-a2a-default-westeurope-container"
$recoveryProtectionContainer = Get-AzRecoveryServicesAsrProtectionContainer -Fabric $fabric -Name "asr-a2a-default-westeurope-t-container"
Создание политики репликации
#Create replication policy
$TempASRJob = New-AzRecoveryServicesAsrPolicy -AzureToAzure -Name "A2APolicy" -RecoveryPointRetentionInHours 24 -ApplicationConsistentSnapshotFrequencyInHours 4
#Track Job status to check for completion
while (($TempASRJob.State -eq "InProgress") -or ($TempASRJob.State -eq "NotStarted")){
sleep 10;
$TempASRJob = Get-AzRecoveryServicesAsrJob -Job $TempASRJob
}
#Check if the Job completed successfully. The updated job state of a successfully completed job should be "Succeeded"
Write-Output $TempASRJob.State
$ReplicationPolicy = Get-AzRecoveryServicesAsrPolicy -Name "A2APolicy"
Создание сопоставления контейнеров защиты между основным и контейнером защиты восстановления
Сопоставление контейнеров защиты сопоставляет основной контейнер защиты с контейнером защиты восстановления и политикой репликации. Создайте одно сопоставление для каждой политики репликации, которую вы будете использовать для репликации виртуальных машин между парой контейнеров защиты.
#Create Protection container mapping between the Primary and Recovery Protection Containers with the Replication policy
$TempASRJob = New-AzRecoveryServicesAsrProtectionContainerMapping -Name "A2APrimaryToRecovery" -Policy $ReplicationPolicy -PrimaryProtectionContainer $PrimaryProtContainer -RecoveryProtectionContainer $RecoveryProtContainer
#Track Job status to check for completion
while (($TempASRJob.State -eq "InProgress") -or ($TempASRJob.State -eq "NotStarted")){
sleep 10;
$TempASRJob = Get-AzRecoveryServicesAsrJob -Job $TempASRJob
}
#Check if the Job completed successfully. The updated job state of a successfully completed job should be "Succeeded"
Write-Output $TempASRJob.State
$EusToWusPCMapping = Get-AzRecoveryServicesAsrProtectionContainerMapping -ProtectionContainer $PrimaryProtContainer -Name "A2APrimaryToRecovery"
Создание сопоставления контейнеров защиты при включении репликации между зонами
При включении репликации между зонами используйте приведенную ниже команду для создания сопоставления контейнеров защиты. Предположим, что регион — это Западная Европа, команда будет -
$protContainerMapping = Get-AzRecoveryServicesAsrProtectionContainerMapping -ProtectionContainer $PrimprotectionContainer -Name "westeurope-westeurope-24-hour-retention-policy-s"
Создайте сопоставление контейнеров защиты для обратной репликации после переключения на резерв.
После failover, когда вы будете готовы вернуть переключенную виртуальную машину в исходный регион Azure, выполните failback. Чтобы выполнить восстановление после отказа, виртуальная машина, отработавшая отказ, реплицируется обратно из зарезервированного региона в исходный регион. Для обратной репликации роли исходного региона и коммутатора региона восстановления. Исходный регион теперь становится новым регионом восстановления, и то, что изначально было регионом восстановления, теперь становится основным регионом. Сопоставление контейнеров защиты для обратной репликации представляет переключение ролей исходных регионов и регионов восстановления.
#Create Protection container mapping (for fail back) between the Recovery and Primary Protection Containers with the Replication policy
$TempASRJob = New-AzRecoveryServicesAsrProtectionContainerMapping -Name "A2ARecoveryToPrimary" -Policy $ReplicationPolicy -PrimaryProtectionContainer $RecoveryProtContainer -RecoveryProtectionContainer $PrimaryProtContainer
#Track Job status to check for completion
while (($TempASRJob.State -eq "InProgress") -or ($TempASRJob.State -eq "NotStarted")){
sleep 10;
$TempASRJob = Get-AzRecoveryServicesAsrJob -Job $TempASRJob
}
#Check if the Job completed successfully. The updated job state of a successfully completed job should be "Succeeded"
Write-Output $TempASRJob.State
$WusToEusPCMapping = Get-AzRecoveryServicesAsrProtectionContainerMapping -ProtectionContainer $RecoveryProtContainer -Name "A2ARecoveryToPrimary"
Создание учетной записи хранения кэша и целевой учетной записи хранения
Учетная запись хранения кэша — это стандартная учетная запись хранения в том же регионе Azure, что и реплицируемая виртуальная машина. Учетная запись хранения кэша используется для временного хранения изменений репликации перед перемещением изменений в регион Azure восстановления. Поддержка высокой нагрузки также доступна в Azure Site Recovery, чтобы получить более высокие ограничения на отток. Чтобы использовать эту функцию, создайте учетную запись хранилища типа Premium Block Blob, а затем используйте ее как учетную запись для хранения кэша. Azure Site Recovery поддерживает SSD уровня "Премиум" версии 2/"Ультра" только при условии обработки большого объема данных. Используйте SkuName Premium_LRS и Kind BlockBlobStorage для обеспечения высокой интенсивности изменений. Вы можете выбрать, но не обязательно указать разные учетные записи хранения кэша для разных дисков виртуальной машины. Если вы используете разные учетные записи хранения кэша, убедитесь, что они имеют одинаковый тип (стандартный или премиум-блочные BLOB-объекты). Дополнительные сведения см. в статье "Аварийное восстановление виртуальных машин Azure" — поддержка высокой нагрузки.
#Create Cache storage account for replication logs in the primary region
$EastUSCacheStorageAccount = New-AzStorageAccount -Name "a2acachestorage" -ResourceGroupName "A2AdemoRG" -Location 'East US' -SkuName Standard_LRS -Kind Storage
Для виртуальных машин, не использующих управляемые диски, целевая учетная запись хранения — это учетная запись хранения в регионе восстановления, в которую реплицируются диски виртуальной машины. Целевая учетная запись хранения может быть стандартной учетной записью хранения или учетной записью хранения класса Premium. Выберите тип учетной записи хранения, необходимую в зависимости от скорости изменения данных (скорость записи операций ввода-вывода) для дисков и поддерживаемых ограничений операций хранения Azure Site Recovery для типа хранилища.
#Create Target storage account in the recovery region. In this case a Standard Storage account
$WestUSTargetStorageAccount = New-AzStorageAccount -Name "a2atargetstorage" -ResourceGroupName "a2ademorecoveryrg" -Location 'West US 2' -SkuName Standard_LRS -Kind Storage
Создание сетевых сопоставлений
Сетевое сопоставление сопоставляет виртуальные сети в основном регионе с виртуальными сетями в регионе восстановления. Сетевое сопоставление указывает виртуальную сеть Azure в регионе восстановления, в которую должна переключаться виртуальная машина из основной виртуальной сети в случае отказа. Одну виртуальную сеть Azure можно сопоставить только с одной виртуальной сетью Azure в регионе восстановления.
Создайте виртуальную сеть Azure в регионе для восстановления, чтобы переключиться на неё в случае сбоя.
#Create a Recovery Network in the recovery region $WestUSRecoveryVnet = New-AzVirtualNetwork -Name "a2arecoveryvnet" -ResourceGroupName "a2ademorecoveryrg" -Location 'West US 2' -AddressPrefix "10.0.0.0/16" Add-AzVirtualNetworkSubnetConfig -Name "default" -VirtualNetwork $WestUSRecoveryVnet -AddressPrefix "10.0.0.0/20" | Set-AzVirtualNetwork $WestUSRecoveryNetwork = $WestUSRecoveryVnet.IdПолучение основной виртуальной сети. Виртуальная сеть, к которую подключена виртуальная машина:
#Retrieve the virtual network that the virtual machine is connected to #Get first network interface card(nic) of the virtual machine $SplitNicArmId = $VM.NetworkProfile.NetworkInterfaces[0].Id.split("/") #Extract resource group name from the ResourceId of the nic $NICRG = $SplitNicArmId[4] #Extract resource name from the ResourceId of the nic $NICname = $SplitNicArmId[-1] #Get network interface details using the extracted resource group name and resource name $NIC = Get-AzNetworkInterface -ResourceGroupName $NICRG -Name $NICname #Get the subnet ID of the subnet that the nic is connected to $PrimarySubnet = $NIC.IpConfigurations[0].Subnet # Extract the resource ID of the Azure virtual network the nic is connected to from the subnet ID $EastUSPrimaryNetwork = (Split-Path(Split-Path($PrimarySubnet.Id))).Replace("\","/")Создайте сетевое сопоставление между основной виртуальной сетью и виртуальной сетью восстановления:
#Create an ASR network mapping between the primary Azure virtual network and the recovery Azure virtual network $TempASRJob = New-AzRecoveryServicesAsrNetworkMapping -AzureToAzure -Name "A2AEusToWusNWMapping" -PrimaryFabric $PrimaryFabric -PrimaryAzureNetworkId $EastUSPrimaryNetwork -RecoveryFabric $RecoveryFabric -RecoveryAzureNetworkId $WestUSRecoveryNetwork #Track Job status to check for completion while (($TempASRJob.State -eq "InProgress") -or ($TempASRJob.State -eq "NotStarted")){ sleep 10; $TempASRJob = Get-AzRecoveryServicesAsrJob -Job $TempASRJob } #Check if the Job completed successfully. The updated job state of a successfully completed job should be "Succeeded" Write-Output $TempASRJob.StateСоздайте сетевое сопоставление для обратного направления (отработка отказа):
#Create an ASR network mapping for fail back between the recovery Azure virtual network and the primary Azure virtual network $TempASRJob = New-AzRecoveryServicesAsrNetworkMapping -AzureToAzure -Name "A2AWusToEusNWMapping" -PrimaryFabric $RecoveryFabric -PrimaryAzureNetworkId $WestUSRecoveryNetwork -RecoveryFabric $PrimaryFabric -RecoveryAzureNetworkId $EastUSPrimaryNetwork #Track Job status to check for completion while (($TempASRJob.State -eq "InProgress") -or ($TempASRJob.State -eq "NotStarted")){ sleep 10; $TempASRJob = Get-AzRecoveryServicesAsrJob -Job $TempASRJob } #Check if the Job completed successfully. The updated job state of a successfully completed job should be "Succeeded" Write-Output $TempASRJob.State
Репликация виртуальной машины Azure
Репликация виртуальной машины Azure с управляемыми дисками.
#Get the resource group that the virtual machine must be created in when failed over.
$RecoveryRG = Get-AzResourceGroup -Name "a2ademorecoveryrg" -Location "West US 2"
#Specify replication properties for each disk of the VM that is to be replicated (create disk replication configuration)
#OsDisk
$OSdiskId = $vm.StorageProfile.OsDisk.ManagedDisk.Id
$RecoveryOSDiskAccountType = $vm.StorageProfile.OsDisk.ManagedDisk.StorageAccountType
$RecoveryReplicaDiskAccountType = $vm.StorageProfile.OsDisk.ManagedDisk.StorageAccountType
$OSDiskReplicationConfig = New-AzRecoveryServicesAsrAzureToAzureDiskReplicationConfig -ManagedDisk -LogStorageAccountId $EastUSCacheStorageAccount.Id `
-DiskId $OSdiskId -RecoveryResourceGroupId $RecoveryRG.ResourceId -RecoveryReplicaDiskAccountType $RecoveryReplicaDiskAccountType `
-RecoveryTargetDiskAccountType $RecoveryOSDiskAccountType
# Data disk
$datadiskId1 = $vm.StorageProfile.DataDisks[0].ManagedDisk.Id
$RecoveryReplicaDiskAccountType = $vm.StorageProfile.DataDisks[0].ManagedDisk.StorageAccountType
if ($RecoveryReplicaDiskAccountType -in @("PremiumV2_LRS", "Ultra_LRS")) {
$RecoveryReplicaDiskAccountType = "Premium_LRS"
}
$RecoveryTargetDiskAccountType = $vm.StorageProfile.DataDisks[0].ManagedDisk.StorageAccountType
$DataDisk1ReplicationConfig = New-AzRecoveryServicesAsrAzureToAzureDiskReplicationConfig -ManagedDisk -LogStorageAccountId $EastUSCacheStorageAccount.Id `
-DiskId $datadiskId1 -RecoveryResourceGroupId $RecoveryRG.ResourceId -RecoveryReplicaDiskAccountType $RecoveryReplicaDiskAccountType `
-RecoveryTargetDiskAccountType $RecoveryTargetDiskAccountType
#Create a list of disk replication configuration objects for the disks of the virtual machine that are to be replicated.
$diskconfigs = @()
$diskconfigs += $OSDiskReplicationConfig, $DataDisk1ReplicationConfig
#Start replication by creating replication protected item. Using a GUID for the name of the replication protected item to ensure uniqueness of name.
$TempASRJob = New-AzRecoveryServicesAsrReplicationProtectedItem -AzureToAzure -AzureVmId $VM.Id -Name (New-Guid).Guid -ProtectionContainerMapping $EusToWusPCMapping -AzureToAzureDiskReplicationConfiguration $diskconfigs -RecoveryResourceGroupId $RecoveryRG.ResourceId
Репликация виртуальной машины Azure с неуправляемыми дисками.
#Specify replication properties for each disk of the VM that is to be replicated (create disk replication configuration)
#Disk replication configuration for the OS disk
$OSDiskReplicationConfig = New-AzRecoveryServicesAsrAzureToAzureDiskReplicationConfig -VhdUri $OSDiskVhdURI.Uri -LogStorageAccountId $EastUSCacheStorageAccount.Id -RecoveryAzureStorageAccountId $WestUSTargetStorageAccount.Id
#Disk replication configuration for data disk
$DataDisk1ReplicationConfig = New-AzRecoveryServicesAsrAzureToAzureDiskReplicationConfig -VhdUri $DataDisk1VhdURI.Uri -LogStorageAccountId $EastUSCacheStorageAccount.Id -RecoveryAzureStorageAccountId $WestUSTargetStorageAccount.Id
#Create a list of disk replication configuration objects for the disks of the virtual machine that are to be replicated.
$diskconfigs = @()
$diskconfigs += $OSDiskReplicationConfig, $DataDisk1ReplicationConfig
#Get the resource group that the virtual machine must be created in when failed over.
$RecoveryRG = Get-AzResourceGroup -Name "a2ademorecoveryrg" -Location "West US 2"
#Start replication by creating replication protected item. Using a GUID for the name of the replication protected item to ensure uniqueness of name.
$TempASRJob = New-AzRecoveryServicesAsrReplicationProtectedItem -AzureToAzure -AzureVmId $VM.Id -Name (New-Guid).Guid -ProtectionContainerMapping $EusToWusPCMapping -AzureToAzureDiskReplicationConfiguration $diskconfigs -RecoveryResourceGroupId $RecoveryRG.ResourceId
#Track Job status to check for completion
while (($TempASRJob.State -eq "InProgress") -or ($TempASRJob.State -eq "NotStarted")){
sleep 10;
$TempASRJob = Get-AzRecoveryServicesAsrJob -Job $TempASRJob
}
#Check if the Job completed successfully. The updated job state of a successfully completed job should be "Succeeded"
Write-Output $TempASRJob.State
После успешного завершения операции репликации данные виртуальной машины реплицируются в регион восстановления.
Процесс репликации начинается с первоначального создания копии реплицируемых дисков виртуальной машины в регионе восстановления. Этот этап называется начальной репликацией.
После завершения начальной репликации репликация переходит на этап разностной синхронизации. В данный момент виртуальная машина защищена, и на ней можно выполнить тестовый отказ. Состояние репликации реплицированного элемента, представляющего виртуальную машину, переходит в защищенное состояние после завершения начальной репликации.
Отслеживайте состояние и работоспособность репликации виртуальной машины, получая сведения о соответствующем элементе защиты репликации.
Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $PrimaryProtContainer | Select FriendlyName, ProtectionState, ReplicationHealth
FriendlyName ProtectionState ReplicationHealth
------------ --------------- -----------------
AzureDemoVM Protected Normal
Выполнить тестовое переключение, проверить и очистить результаты тестового переключения
После того как репликация виртуальной машины перешла в защищенное состояние, можно выполнить тестирование отказоустойчивости на репликации защищенного элемента виртуальной машины.
#Create a separate network for test failover (not connected to my DR network)
$TFOVnet = New-AzVirtualNetwork -Name "a2aTFOvnet" -ResourceGroupName "a2ademorecoveryrg" -Location 'West US 2' -AddressPrefix "10.3.0.0/16"
Add-AzVirtualNetworkSubnetConfig -Name "default" -VirtualNetwork $TFOVnet -AddressPrefix "10.3.0.0/20" | Set-AzVirtualNetwork
$TFONetwork= $TFOVnet.Id
Выполните тестовое переключение.
$ReplicationProtectedItem = Get-AzRecoveryServicesAsrReplicationProtectedItem -FriendlyName "AzureDemoVM" -ProtectionContainer $PrimaryProtContainer
$TFOJob = Start-AzRecoveryServicesAsrTestFailoverJob -ReplicationProtectedItem $ReplicationProtectedItem -AzureVMNetworkId $TFONetwork -Direction PrimaryToRecovery
Дождитесь завершения тестирования отказоустойчивости.
Get-AzRecoveryServicesAsrJob -Job $TFOJob
Name : 3dcb043e-3c6d-4e0e-a42e-8d4245668547
ID : /Subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/a2ademorecoveryrg/providers/Microsoft.RecoveryServices/vaults/a2aDemoR
ecoveryVault/replicationJobs/3dcb043e-3c6d-4e0e-a42e-8d4245668547
Type : Microsoft.RecoveryServices/vaults/replicationJobs
JobType : TestFailover
DisplayName : Test failover
ClientRequestId : 1ef8515b-b130-4452-a44d-91aaf071931c ActivityId: 907bb2bc-ebe6-4732-8b66-77d0546eaba8
State : Succeeded
StateDescription : Completed
StartTime : 4/25/2018 4:29:43 AM
EndTime : 4/25/2018 4:33:06 AM
TargetObjectId : aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
TargetObjectType : ProtectionEntity
TargetObjectName : azuredemovm
AllowedActions :
Tasks : {Prerequisites check for test failover, Create test virtual machine, Preparing the virtual machine, Start the virtual machine}
Errors : {}
После успешного завершения задания тестовой отработки отказа, можно подключиться к тестовой виртуальной машине и проверить правильность выполнения отработки отказа.
Когда проверка созданной тестовой виртуальной машины завершится, удалите эту тестовую копию, запустив операцию очистки после тестовой отработки отказа. Операция удаляет тестовую копию виртуальной машины, которая была создана в процессе проверки на отказ.
$Job_TFOCleanup = Start-AzRecoveryServicesAsrTestFailoverCleanupJob -ReplicationProtectedItem $ReplicationProtectedItem
Get-AzRecoveryServicesAsrJob -Job $Job_TFOCleanup | Select State
State
-----
Succeeded
Переключение на Azure
Переключите виртуальную машину на конкретную точку восстановления.
$RecoveryPoints = Get-AzRecoveryServicesAsrRecoveryPoint -ReplicationProtectedItem $ReplicationProtectedItem
#The list of recovery points returned may not be sorted chronologically and will need to be sorted first, in order to be able to find the oldest or the latest recovery points for the virtual machine.
"{0} {1}" -f $RecoveryPoints[0].RecoveryPointType, $RecoveryPoints[-1].RecoveryPointTime
CrashConsistent 4/24/2018 11:10:25 PM
#Start the fail over job
$Job_Failover = Start-AzRecoveryServicesAsrUnplannedFailoverJob -ReplicationProtectedItem $ReplicationProtectedItem -Direction PrimaryToRecovery -RecoveryPoint $RecoveryPoints[-1]
do {
$Job_Failover = Get-AzRecoveryServicesAsrJob -Job $Job_Failover;
sleep 30;
} while (($Job_Failover.State -eq "InProgress") -or ($JobFailover.State -eq "NotStarted"))
$Job_Failover.State
Succeeded
При успешном выполнении задания переключения на резервный узел можно подтвердить операцию переключения.
$CommitFailoverJOb = Start-AzRecoveryServicesAsrCommitFailoverJob -ReplicationProtectedItem $ReplicationProtectedItem
Get-AzRecoveryServicesAsrJob -Job $CommitFailoverJOb
Name : 58afc2b7-5cfe-4da9-83b2-6df358c6e4ff
ID : /Subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/a2ademorecoveryrg/providers/Microsoft.RecoveryServices/vaults/a2aDemoR
ecoveryVault/replicationJobs/58afc2b7-5cfe-4da9-83b2-6df358c6e4ff
Type : Microsoft.RecoveryServices/vaults/replicationJobs
JobType : CommitFailover
DisplayName : Commit
ClientRequestId : 10a95d6c-359e-4603-b7d9-b7ee3317ce94 ActivityId: 8751ada4-fc42-4238-8de6-a82618408fcf
State : Succeeded
StateDescription : Completed
StartTime : 4/25/2018 4:50:58 AM
EndTime : 4/25/2018 4:51:01 AM
TargetObjectId : aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
TargetObjectType : ProtectionEntity
TargetObjectName : azuredemovm
AllowedActions :
Tasks : {Prerequisite check, Commit}
Errors : {}
Повторная защита и откат в исходный регион
После переключения при отказе, когда вы будете готовы вернуться в исходный регион, запустите обратную репликацию для защищенного элемента с помощью командлета Update-AzRecoveryServicesAsrProtectionDirection.
#Create Cache storage account for replication logs in the primary region
$WestUSCacheStorageAccount = New-AzStorageAccount -Name "a2acachestoragewestus" -ResourceGroupName "A2AdemoRG" -Location 'West US' -SkuName Standard_LRS -Kind Storage
#Use the recovery protection container, new cache storage account in West US and the source region VM resource group
Update-AzRecoveryServicesAsrProtectionDirection -ReplicationProtectedItem $ReplicationProtectedItem -AzureToAzure
-ProtectionContainerMapping $WusToEusPCMapping -LogStorageAccountId $WestUSCacheStorageAccount.Id -RecoveryResourceGroupID $sourceVMResourcegroup.ResourceId
После завершения повторной защиты можно выполнить переключение отказа в обратном направлении из Западной части США в Восточную и затем вернуть систему в исходный регион.
Отключение репликации
Вы можете отключить репликацию с помощью командлета Remove-AzRecoveryServicesAsrReplicationProtectedItem .
Remove-AzRecoveryServicesAsrReplicationProtectedItem -ReplicationProtectedItem $ReplicationProtectedItem
Дальнейшие действия
Ознакомьтесь со ссылкой на Azure Site Recovery PowerShell , чтобы узнать, как выполнять другие задачи, такие как создание планов восстановления и тестирование отработки отказа планов восстановления с помощью PowerShell.