Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Рисунок 9

План аварийного восстановления следующий:

Инженер оценивает обстановку и проверяет состояние ЦОД. В случае если это необходимо принимается решение о миграции в новый ЦОД. Миграция осуществляется с помощью службы Azure Site Recovery. Но перед тем как осуществить миграцию, необходимо развернуть инфраструктуру (группы ресурсов, сеть и так далее), то есть все ресурсы кроме виртуальных машин и относящихся к ним сетевых интерфейсов и дисков данных. Развертывание инфраструктуры происходит с помощью шаблона, который с определенной регулярностью копировался ранее в хранилище в новом ЦОД. После того, как инфраструктура развернулась, можно приступить к миграции виртуальных машин. В Azure это называется процедурой Failover. После завершения миграции, служба ASR автоматически запускает скрипт7, который именует диски, сетевые интерфейсы правильным образом. На этом процедура миграции закончена.

Заключение

В настоящей дипломной работе была рассмотрена проблема аварийного восстановления гибридной инфраструктуры в публичном облаке Azure.

Были изучены основные методы аварийного восстановления, такие как

Повторное развертывание после аварии Теплая замена Горячая замена

Также было разработана система аварийного восстановления, которая была протестирована в среде Azure.

При планировании системы были использованы инструменты Azure и Windows, такие как Azure Automation, Azure Site Recovery, PowerShell, PowerShell Workflow.

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

НЕ нашли? Не то? Что вы ищете?

Список использованных источников

Windows Azure: облачная платформа Microsoft[Текст] / , , 2010 Митч Таллоч, Знакомство с Windows Azure[Текст]/;пер. с англ. – М.:ЭКОМ Паблишерз, 2014. - 154 с.:ил. Rayne Viselman Документация по Site Recovery – (https://docs. /ru-ru/azure/site-recovery/) Matt Goedtel, Automation Documentation – (https://docs. /en-us/azure/automation/) Microsoft Corp. Использование переменных в рабочих процессах сценариев – (https://technet. /ru-ru/library/jj574187(v=ws.11).aspx) Matt Goedtel, Запуск Runbook службы автоматизации Azure с помощью объекта Webhook – (https://docs. /ru-ru/azure/automation/automation-webhooks) Neil Peterson, Примеры PowerShell для виртуальной машины Azure – (https://docs. /ru-ru/azure/virtual-machines/windows/powershell-samples) David Murray, Windows Virtual Machines Documentation – (https://docs. /ru-ru/azure/virtual-machines/windows/) Tom FitzMacken, Use Azure PowerShell to create a service principal to access resources – (https://docs. /en-us/azure/azure-resource-manager/resource-group-authenticate-service-principal#provide-certificate-through-automated-powershell-script) Glick Adam, Disaster recovery for Azure applications (https://docs. /ru-ru/azure/architecture/resiliency/disaster-recovery-azure-applications)

Приложение 1

Скрипт автоматического восстановления отдельных серверов.

Имя: AutoRecovey

workflow AutoRecovery

{

  # Get the connection "AzureRunAsConnection"

  $connectionName = "AzureRunAsConnection"

  try

  {

  $servicePrincipalConnection=Get-AutomationConnection - Name $connectionName 

  "Logging in to Azure..."

  Add-AzureRmAccount `

  - ServicePrincipal `

  - TenantId $servicePrincipalConnection. TenantId `

  - ApplicationId $servicePrincipalConnection. ApplicationId `

  - CertificateThumbprint $servicePrincipalConnection. CertificateThumbprint

  }

  catch {

  if (!$servicePrincipalConnection)

  {

  $ErrorMessage = "Connection $connectionName not found."

  throw $ErrorMessage

  } else{

  Write-Error - Message $_.Exception

  throw $_.Exception

  }

}

$RGName = "RG-DR-NE"

$resourceManagerVMList = @(Get-AzureRmResource | where {$_.ResourceType - like "Microsoft.*/virtualMachines" - and $_.ResourceGroupName - eq $RGName} | sort Name)

foreach - parallel($resource in $resourceManagerVMList){

  sequence{

  InlineScript{

  $inlineResource = $Using:resource 

  #script that adds tag to VM

  function isVMDeallocated ($VMResource){

  $VMDetail = Get-AzureRmVM - ResourceGroupName $inlineResource. ResourceGroupName - Name $inlineResource. Name - Status

  foreach ($VMStatus in $VMDetail. Statuses)

  {

  if($VMStatus. pareTo("PowerState/deallocated") - eq 0)

  {

  return $true

  }else{

  return $false

  }

  } 

  }

  function sendMailToEngineer($vmName){

  $serverSmtp = "smtp. yandex. ru"

  $port = 587

  $From = "azure. *****@***ru"

  $To = "*****@***com"

  $subject = "VM $VMname is not pingable"

  $mes = New-Object . Mail. MailMessage

  $mes. From = $from

  $mes. To. Add($to)

  $bject = $subject

  $mes. IsBodyHTML = $true

  $mes. Body = "<h2>Please check your VM!</h2><h3>$VMname is not pingable!</h3>"

  $smtp = New-Object Net. Mail. SmtpClient($serverSmtp, $port)

  $smtp. EnableSSL = $true

  $smtp. Credentials = Get-AutomationPSCredential - Name 'SMTPCreds'

  $smtp. Send($mes)

  }

  function addTagToVM($VMResource, $tagName, $tagValue){ 

  $VMName = $VMResource. Name

  $tags = $VMResource. Tags

  if ($tags. ContainsKey($tagName)){ 

  if ($tags.$tagName - notmatch $tagValue){ 

  $tags. Remove($tagName)

  $tags += @{$tagName=$tagValue}

  $VMResource. Tags = $tags

  $VMResource | Set-AzureRmResource - Force

  Write-Output "'$tagName' tag is added to '$VMName' VM with value '$tagValue'"

  }else{ 

  Write-Output "Tag '$tagName' with Value '$tagValue' is already exists." 

  }

  }else{

  $tags += @{$tagName=$tagValue}

  $VMResource. Tags = $tags

  $VMResource | Set-AzureRmResource - Force

  Write-Output "'$tagName' tag is added to '$VMName' VM with value '$tagValue'"

  }

  }

  <#

  This function gets existent tag and desides what to do next:

  1) Change HEALTH tag to some another Value

  2) Change HEALTH tag to some another value and making some actions (restart, redeploy, email)

  #>

  function changeTagToNext($VMResource, $tagName, $tagValue){

  switch ($tagValue)

  {

  "" {addTagToVM $VMResource $tagName "Restart1"; break}

  "Restart1" {addTagToVM $VMResource $tagName "Restart2"; break}

  "Restart2" {addTagToVM $VMResource $tagName "Restart3"; break}

  "Restart3" {addTagToVM $VMResource $tagName "Redeploy1";

  if(isVMDeallocated - VMResource $VMResource){

  Start-AzureRmVM - Name $VMResource. Name - ResourceGroupName $VMResource. ResourceGroupName

  }else{

  Restart-AzureRmVM - Name $VMResource. Name - ResourceGroupName $VMResource. ResourceGroupName} ; break

  }

  "Redeploy1" {addTagToVM $VMResource $tagName "Redeploy2"; break}

  "Redeploy2" {addTagToVM $VMResource $tagName "Redeploy3"; break}

  "Redeploy3" {addTagToVM $VMResource $tagName "Danger1";

  if(isVMDeallocated - VMResource $VMResource){

  Start-AzureRmVM - Name $VMResource. Name - ResourceGroupName $VMResource. ResourceGroupName

  }else{

  Set-AzureRmVM - Redeploy - Name $VMResource. Name - ResourceGroupName $VMResource. ResourceGroupName} ; break}

  "Danger1" {addTagToVM $VMResource $tagName "Danger2"; break}

  "Danger2" {addTagToVM $VMResource $tagName "Danger3"; sendMailToEngineer $VMResource. Name; break}

  "Danger3" {sendMailToEngineer $VMResource. Name; break}

  default {Write-Output "TAG IS NOT DEFINED"; break}

  }

  } 

  #getting IP of VM

  $NICName = $(Get-AzureRmVM - Name $inlineResource. Name - ResourceGroupName $inlineResource. ResourceGroupName)workInterfaces. Id

  $NICName = $NICName - split "/"

  $NICName = $NICName[$NICName. Count-1]

  $VMIp = $(Get-AzureRmNetworkInterface - Name $NICName - ResourceGroupName $inlineResource. ResourceGroupName).IpConfigurations. PrivateIpAddress

  #CHECK HEARTBEAT

  $Connection = Test-Connection $VMIp - ErrorAction SilentlyContinue - Count 1 - Quiet

  if($Connection - eq $False){

  if ($inlineResource. Tags. ContainsKey("HEALTH")){

  #If VM stopped by plan

  if ($inlineResource. Tags. HEALTH - match "true"){

  $inlineResourceName = $inlineResource. Name

  Write-Output "$inlineResourceName is stopped due to plan"

  }else {

  #Changing HEALTH tag value to next and making appropariate actions

  $inlineResourceName = $inlineResource. Name

  changeTagToNext $inlineResource "HEALTH" $inlineResource. Tags. HEALTH 

  }

  }else{

  #Adding Shutdown tag to VM with value "Restart1"

  $inlineResourceName = $inlineResource. Name

  Write-Output "$inlineResourceName is not pingable and doesn't contain HEALTH tag."

  addTagToVM $inlineResource "HEALTH" "Restart1"

  Write-Output "HEALTH tag with value 'Restart1' is added"

  }

  #if VM is pingable

  }else{

  if($inlineResource. Tags. ContainsKey("HEALTH")) {

  if ($inlineResource. Tags. HEALTH - notmatch "true" - and $inlineResource. Tags. HEALTH - ne ""){

  addTagToVM $inlineResource "HEALTH" ""

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6