Настройка аварийного восстановления виртуальных машин Hyper-V в Azure с помощью 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. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Azure PowerShell

Azure PowerShell предоставляет командлеты для управления Azure, используя Windows PowerShell. Командлеты PowerShell для службы Site Recovery, доступные в Azure PowerShell для диспетчера ресурсов Azure, позволяют обеспечить защиту и выполнить восстановление серверов в Azure.

Для работы с этой статьей не требуется большой опыт работы с PowerShell, но необходимо знакомство с основными понятиями, такими как модули, командлеты и сеансы. Дополнительные сведения см. в документации по PowerShell и статье Использование Azure PowerShell с Azure Resource Manager.

Примечание.

Партнеры корпорации Майкрософт в программе для поставщиков облачных решений могут настроить защиту серверов клиентов и управлять ею в своих подписках CSP (клиентские подписки).

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

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

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

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

Шаг 1. Вход в учетную запись Azure

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

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

    Set-AzContext -Subscription $SubscriptionName
    
  3. Убедитесь, что в вашей подписке зарегистрированы поставщики Azure для служб восстановления и службы 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, в котором нужно создать группу ресурсов (например, "Южная Бразилия").

    New-AzResourceGroup -Name $ResourceGroupName -Location $Geo
    
  2. Список групп ресурсов в подписке можно получить с помощью командлета Get-AzResourceGroup.

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

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

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

Шаг 3. Настройка контекста для хранилища служб восстановления

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

Set-AzRecoveryServicesAsrVaultContext -Vault $vault

Шаг 4. Создание узла Hyper-V

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

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

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

  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. Скачайте установщик последней версии поставщика с веб-сайта корпорации Майкрософт.

  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. Когда виртуальные машины перейдут в защищенное состояние, параметры State и StateDescription задания обновятся следующим образом:

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

    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, чтобы получить идентификатор диска для каждого диска защищаемого элемента.
  3. Создайте объект словаря с помощью командлета New-Object "System.Collections.Generic.Dictionary``2[System.String,System.String]", чтобы можно было сопоставить идентификатор диска с набором шифрования дисков. Вам нужно заранее создать в целевом регионе такие наборы шифрования для дисков.
  4. Обновите свойства виртуальной машины с помощью командлета Set-AzRecoveryServicesAsrReplicationProtectedItem, отправив объект словаря в параметр 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"
    

Следующие шаги

Узнайте больше об использовании командлетов PowerShell инструмента Azure Resource Manager для службы Azure Site Recovery.