Настройте аварийное восстановление на Azure для Hyper-V виртуальных машин с помощью PowerShell и Azure Resource Manager

Azure Site Recovery вносит вклад в стратегию непрерывности бизнеса и аварийного восстановления (BCDR), организуя репликацию, резервирование и восстановление виртуальных машин Azure, а также локальных виртуальных машин и физических серверов.

В этой статье описывается, как использовать Windows PowerShell вместе с Azure Resource Manager для репликации Hyper-V виртуальных машин в Azure. Пример, приведённый в этой статье, показывает, как воспроизвести одну виртуальную машину, работающую на Hyper-V-хосте, чтобы Azure.

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Сведения о начале работы см. в статье "Установка Azure PowerShell". Чтобы узнать, как перейти на модуль Az PowerShell, см. статью Миграция Azure PowerShell с AzureRM на Az.

Azure PowerShell

Azure PowerShell предоставляет cmdlets для управления Azure с использованием Windows PowerShell. Site Recovery PowerShell cmdlets, доступные с Azure PowerShell for Azure Resource Manager, помогают защитить и восстановить ваши серверы в Azure.

Вам не обязательно быть экспертом по PowerShell, чтобы использовать эту статью, но вам нужно понимать базовые концепции, такие как модули, cmdlets и сессии. Для получения дополнительной информации см. документацию PowerShell и использование Azure PowerShell с Azure Resource Manager.

Примечание.

Microsoft, партнёры в программе поставщик облачных решений (CSP), могут настраивать и управлять защитой серверов клиентов по соответствующим CSP-подпискам (tenant subscriptions).

Перед началом работы

Убедитесь, что у вас есть следующие требования:

Кроме того, конкретный пример, описанный в этой статье, имеет следующие требования:

  • Хост Hyper-V, работающий Windows Server 2012 R2 или Microsoft Hyper-V Server 2012 R2, содержащий одну или несколько виртуальных машин. Hyper-V серверы должны быть подключены к Интернету либо напрямую, либо через прокси.
  • Виртуальные машины, которые вы хотите воспроизвести, должны соответствовать этим требованиям.

Шаг 1: Войдите в свой аккаунт Azure

  1. Откройте консоль PowerShell и выполните эту команду, чтобы войти в свой аккаунт Azure. Cmdlet открывает веб-страницу с запросом ваших учетных данных: Connect-AzAccount.

    • В качестве альтернативы вы можете включить учетные данные вашей учетной записи в Connect-AzAccount cmdlet, используя параметр Credential .
    • Если вы — партнер CSP, работающий от имени арендатора, вам потребуется указать заказчика в качестве арендатора. Для этого нужно ввести идентификатор или основное доменное имя арендатора. Например: Connect-AzAccount -Tenant "fabrikam.com"
  2. Свяжите подписку, которую собираетесь использовать, с учетной записью, так как последняя может иметь несколько подписок:

    Set-AzContext -Subscription $SubscriptionName
    
  3. Убедитесь, что ваша подписка зарегистрирована для использования провайдеров Azure для Recovery Services и Site Recovery, используя следующие команды:

    Get-AzResourceProvider -ProviderNamespace  Microsoft.RecoveryServices
    
  4. Проверьте, что в командном выходе RegistrationState установлен на Registered, можно перейти к шагу 2. Если нет, зарегистрируйте отсутствующего провайдера в подписке, выполнив следующие команды:

    Register-AzResourceProvider -ProviderNamespace Microsoft.RecoveryServices
    
  5. Проверьте, что провайдеры успешно зарегистрировались, используя следующие команды:

    Get-AzResourceProvider -ProviderNamespace  Microsoft.RecoveryServices
    

Шаг 2: Настройте хранилище

  1. Создайте группу ресурсов Azure Resource Manager для создания хранилища или используйте существующую группу ресурсов. Создайте новую группу ресурсов следующим образом. Переменная содержит имя группы ресурсов, которую $ResourceGroupName вы хотите создать, а $Geo переменная содержит Azure регион для создания группы ресурсов (например, «Brazil South»).

    New-AzResourceGroup -Name $ResourceGroupName -Location $Geo
    
  2. Чтобы получить список групп ресурсов в вашей подписке, запустите Get-AzResourceGroup cmdlet.

  3. Создайте новый хранилище Azure Recovery Services следующим образом:

    $vault = New-AzRecoveryServicesVault -Name <string> -ResourceGroupName <string> -Location <string>
    

Вы можете получить список существующих хранилищ с Get-AzRecoveryServicesVault помощью cmdlet.

Шаг 3: Задайте контекст хранилища Recovery Services

Настройте контекст хранилища следующим образом:

Set-AzRecoveryServicesAsrVaultContext -Vault $vault

Шаг 4: Создать Hyper-V сайт

  1. Создайте новый Hyper-V сайт следующим образом:

    $sitename = "MySite"                #Specify site friendly name
    New-AzRecoveryServicesAsrFabric -Type HyperVSite -Name $sitename
    
  2. Этот cmdlet запускает задание Site Recovery для создания сайта и возвращает объект работы Site Recovery. Дождитесь завершения работы и убедитесь, что она успешно выполнена.

  3. Используйте Get-AzRecoveryServicesAsrJob cmdlet для получения объекта задания и проверьте текущий статус задания.

  4. Сгенерируйте и скачайте регистрационный ключ сайта следующим образом:

    $SiteIdentifier = Get-AzRecoveryServicesAsrFabric -Name $sitename | Select-Object -ExpandProperty SiteIdentifier
    $path = Get-AzRecoveryServicesVaultSettingsFile -Vault $vault -SiteIdentifier $SiteIdentifier -SiteFriendlyName $sitename
    
  5. Скопируйте загруженный ключ на Hyper-V-хост. Вам нужен ключ, чтобы зарегистрировать Hyper-V хоста на сайте.

Шаг 5: Установите провайдера и агента

  1. Скачайте установщик последней версии провайдера от Microsoft.

  2. Запустите установщик на Hyper-V хосте.

  3. В конце установки переходите к этапу регистрации.

  4. При запросе введите загруженный ключ и завершите регистрацию Hyper-V хоста.

  5. Проверьте, что Hyper-V хост зарегистрирован на сайте следующим образом:

    $server = Get-AzRecoveryServicesAsrFabric -Name $siteName | Get-AzRecoveryServicesAsrServicesProvider -FriendlyName $server-friendlyname
    

Если у вас Hyper-V ядерный сервер, скачайте файл настройки и следуйте следующим шагам:

  1. Извлеките файлы из AzureSiteRecoveryProvider.exe в локальный каталог, выполнив следующую команду:

    AzureSiteRecoveryProvider.exe /x:. /q
    
  2. Выполните следующую команду:

    .\setupdr.exe /i
    

    Результаты записываются в %ProgramData%\ASRLogs\DRASetupWizard.log.

  3. Зарегистрируйте сервер, выполнив следующую команду:

    cd  C:\Program Files\Microsoft Azure Site Recovery Provider\DRConfigurator.exe" /r /Friendlyname "FriendlyName of the Server" /Credentials "path to where the credential file is saved"
    

Шаг 6: Создайте политику репликации

Перед началом указанный аккаунт хранения должен находиться в том же регионе Azure, что и хранилище, и иметь включённую гео-репликацию.

  1. Создайте политику репликации следующим образом:

    $ReplicationFrequencyInSeconds = "300";        #options are 30,300,900
    $PolicyName = “replicapolicy”
    $Recoverypoints = 6                    #specify the number of recovery points
    $storageaccountID = Get-AzStorageAccount -Name "mystorea" -ResourceGroupName "MyRG" | Select-Object -ExpandProperty Id
    
    $PolicyResult = New-AzRecoveryServicesAsrPolicy -Name $PolicyName -ReplicationProvider “HyperVReplicaAzure” -ReplicationFrequencyInSeconds $ReplicationFrequencyInSeconds -NumberOfRecoveryPointsToRetain $Recoverypoints -ApplicationConsistentSnapshotFrequencyInHours 1 -RecoveryAzureStorageAccountId $storageaccountID
    
  2. Проверьте возвращённое задание, чтобы убедиться, что создание политики репликации успешно выполнено.

  3. Получите защитный контейнер, соответствующий месту, следующим образом:

    $protectionContainer = Get-AzRecoveryServicesAsrProtectionContainer
    
  4. Свяжите контейнер защиты с политикой репликации следующим образом:

    $Policy = Get-AzRecoveryServicesAsrPolicy -FriendlyName $PolicyName
    $associationJob = New-AzRecoveryServicesAsrProtectionContainerMapping -Name $mappingName -Policy $Policy -PrimaryProtectionContainer $protectionContainer[0]
    
  5. Ждите, пока работа в ассоциации будет успешно завершена.

  6. Получите карту контейнера защиты.

    $ProtectionContainerMapping = Get-AzRecoveryServicesAsrProtectionContainerMapping -ProtectionContainer $protectionContainer
    

Шаг 7: Включите защиту виртуальных машин

  1. Получите защищённый элемент, соответствующий желанной виртуальной машине, следующим образом:

    $VMFriendlyName = "Fabrikam-app"          #Name of the VM
    $ProtectableItem = Get-AzRecoveryServicesAsrProtectableItem -ProtectionContainer $protectionContainer -FriendlyName $VMFriendlyName
    
  2. Включите защиту виртуальной машины. Если к защищаемой вами виртуальной машине подключено больше одного диска, укажите диск операционной системы с помощью параметра OSDiskName .

    $OSType = "Windows"          # "Windows" or "Linux"
    $DRjob = New-AzRecoveryServicesAsrReplicationProtectedItem -ProtectableItem $VM -Name $VM.Name -ProtectionContainerMapping $ProtectionContainerMapping -RecoveryAzureStorageAccountId $StorageAccountID -OSDiskName $OSDiskNameList[$i] -OS $OSType -RecoveryResourceGroupId $ResourceGroupID
    
  3. Чтобы Azure Site Recovery создал управляемые диски для реплицированной виртуальной машины в Azure, используйте следующую команду:

    $DRjob = New-AzRecoveryServicesAsrReplicationProtectedItem -ProtectableItem $VM -Name $VM.Name -ProtectionContainerMapping $ProtectionContainerMapping -LogStorageAccountId $StorageAccountId -OSDiskName $OSDiskNameList[$i] -OS $OSType -RecoveryResourceGroupId $ResourceGroupID -Size "Standard_D4s_v3" -UseManagedDisksForReplication $true -UseManagedDisk $true
    

    Примечание.

    Чтобы использовать Azure Managed Disks для реплицированной виртуальной машины, укажите оба -UseManagedDisksForReplication $true варианта и -UseManagedDisk $true. Аккаунт хранения, указанный , -LogStorageAccountId используется для репликационных журналов, а реплицированные диски в Azure создаются как управляемые диски.

  4. Дождитесь, пока виртуальные машины перейдут в защищенное состояние после начальной репликации. Это может занять некоторое время в зависимости от таких факторов, как объем данных для репликации и доступная пропускная способность для Azure. Когда действует защищённое состояние, штат работы и StateDescription обновляются следующим образом:

    PS C:\> $DRjob = Get-AzRecoveryServicesAsrJob -Job $DRjob
    
    PS C:\> $DRjob | Select-Object -ExpandProperty State
    Succeeded
    
    PS C:\> $DRjob | Select-Object -ExpandProperty StateDescription
    Completed
    
  5. Обновить свойства восстановления (например, размер роли VM) и сеть Azure для подключения сетевой карты VM после отказа.

    PS C:\> $nw1 = Get-AzVirtualNetwork -Name "FailoverNw" -ResourceGroupName "MyRG"
    
    PS C:\> $VMFriendlyName = "Fabrikam-App"
    
    PS C:\> $rpi = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $protectionContainer -FriendlyName $VMFriendlyName
    
    PS C:\> $UpdateJob = Set-AzRecoveryServicesAsrReplicationProtectedItem -InputObject $rpi -PrimaryNic $VM.NicDetailsList[0].NicId -RecoveryNetworkId $nw1.Id -RecoveryNicSubnetName $nw1.Subnets[0].Name
    
    PS C:\> $UpdateJob = Get-AzRecoveryServicesAsrJob -Job $UpdateJob
    
    PS C:\> $UpdateJob | Select-Object -ExpandProperty state
    
    PS C:\> Get-AzRecoveryServicesAsrJob -Job $job | Select-Object -ExpandProperty state
    
    Succeeded
    

Примечание.

Если вы хотите репликацию на управляемые диски с поддержкой CMK в Azure, выполните следующие шаги с использованием Az PowerShell 3.3.0 и далее:

  1. Включите резервное подключение к управляемым дискам путем обновления свойств виртуальной машины
  2. Используйте Get-AzRecoveryServicesAsrReplicationProtectedItem cmdlet для получения идентификатора диска для каждого диска защищённого элемента
  3. Создайте объект словаря с помощью New-Object "System.Collections.Generic.Dictionary``2[System.String,System.String]" cmdlet для сопоставления идентификатора диска с набором шифрования диска. Эти наборы шифрования диска должны быть заранее созданы вами в целевой области.
  4. Обновите свойства виртуальной машины с помощью Set-AzRecoveryServicesAsrReplicationProtectedItem cmdlet, передавая объект словаря в параметре DiskIdToDiskEncryptionSetMap .

Шаг 8. Проведение тестового аварийного переключения

  1. Запустите тестовое отказное переключение следующим образом:

    $nw = Get-AzVirtualNetwork -Name "TestFailoverNw" -ResourceGroupName "MyRG" #Specify Azure vnet name and resource group
    
    $rpi = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $protectionContainer -FriendlyName $VMFriendlyName
    
    $TFjob = Start-AzRecoveryServicesAsrTestFailoverJob -ReplicationProtectedItem $VM -Direction PrimaryToRecovery -AzureVMNetworkId $nw.Id
    
  2. Проверьте, что тестовая виртуальная машина создана в Azure. Задача тестового отказа приостанавливается после создания тестовой виртуальной машины в Azure.

  3. Чтобы очистить и завершить тестовое переключение на резерв, запустите:

    $TFjob = Start-AzRecoveryServicesAsrTestFailoverCleanupJob -ReplicationProtectedItem $rpi -Comment "TFO done"
    

Дальнейшие действия

Узнайте больше о Azure Site Recovery с помощью cmdlets Azure Resource Manager PowerShell.