Упражнение. Геораспределенные группы автоматической отработки отказа с поддержкой масштабирование для чтения

Завершено

На предыдущем уроке вы узнали о георепликации и группах автоматической отработки отказа. В этом упражнении вы настроите группы автоматической отработки отказа для базы данных SQL Azure. Вы запустите отработку отказа и просмотрите результаты.

Группы автоматической отработки отказа в SQL Azure

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

  1. Настройка среды.
  2. Создание пустого сервера базы данных SQL Azure в регионе отработки отказа.
  3. Создание группы отработки отказа между серверами.
  4. Настройте сеть.
  5. Добавление одной или нескольких баз данных в группу отработки отказа.
  6. Настройка приложений командной строки.
  7. Знакомство с работающими приложениями.
  8. Запуск отработки отказа.
  9. Восстановление размещения.

В этом упражнении описано, как настроить группы автоматической отработки отказа для базы данных AdventureWorks. Затем вы воспользуетесь простым приложением командной строки, чтобы понять, где происходит чтение и запись, и осознать важность логики повторных попыток в приложениях. Наконец, вы продолжите выполнять упражнение, чтобы определить, сколько реплик чтения связано с критически важной для бизнеса базой данных, которая также имеет группу автоматической отработки отказа.

Настройка среды

  1. Скопируйте следующий код в Блокнот или другой текстовый редактор. Укажите сведения. Добавьте свой пароль проверки подлинности SQL. Для $drLocation укажите регион, в котором должна находиться группа отработки отказа. В идеале выберите регион, который связан с регионом текущего сервера. Ознакомьтесь со списком пар регионов. Как минимум, это не может быть тот же регион, где находится исходная база данных. Наконец, добавьте IP-адрес локального компьютера. Если необходимо определить IP-адрес, откройте PowerShell на локальном компьютере и запустите (Invoke-WebRequest -Uri "https://ipinfo.io/ip").Content.

    # Add your info
    $password = "password"
    $drLocation = "westus2"
    $ipAddress = "xx.xx.xx.xx"
    
  2. Выполните обновленную команду в Azure Cloud Shell в правой части этой страницы.

  3. Запустите сценарий в Azure Cloud Shell, чтобы настроить переменные для выполнения следующих действий:

    $admin = "cloudadmin"
    $resourceGroup = Get-AzResourceGroup | Where ResourceGroupName -like <rgn>[sandbox resource group name]</rgn>
    $location = $resourceGroup.Location
    $resourceGroup = $resourceGroup.ResourceGroupName
    $database = "AdventureWorks"
    $server = Get-AzureRmSqlServer -ResourceGroupName $resourceGroup
    $server = $server.ServerName
    $drServer = "$($server)-dr"
    $failoverGroup = "$($server)-fg"
    $firewallRule = "AllowMyIp"
    Write-Host "Variables Received"
    
  4. Создайте пустой сервер базы данных SQL Azure в регионе отработки отказа, выполнив этот сценарий в Azure Cloud Shell:

    # Create a backup server in the failover region
    New-AzSqlServer -ResourceGroupName $resourceGroup `
        -ServerName $drServer `
        -Location $drLocation `
        -SqlAdministratorCredentials $(New-Object -TypeName System.Management.Automation.PSCredential `
        -ArgumentList $admin, $(ConvertTo-SecureString -String $password -AsPlainText -Force))
    Write-Host "New Azure SQL Database logical server Created in different region"
    
  5. Создайте группу отработки отказа между серверами, выполнив этот сценарий в Azure Cloud Shell:

    # Create a failover group between the servers
    New-AzSqlDatabaseFailoverGroup -ResourceGroupName $resourceGroup `
        -ServerName $server `
        -PartnerServerName $drServer `
        -FailoverGroupName $failoverGroup 
    Write-Host "New auto-failover group created between the two Azure SQL Database logical servers"
    
  6. Настройте сеть, выполнив этот сценарий в Azure Cloud Shell:

    # Add a firewall rule that gives your VM access to the new server
    New-AzSqlServerFirewallRule -ResourceGroupName $resourceGroup `
        -ServerName $drServer `
        -FirewallRuleName $firewallRule `
        -StartIpAddress $ipAddress `
        -EndIpAddress $ipAddress;
    

    Для иллюстрации групп автоматической отработки отказа этой настройки сети будет достаточно. Это немного отличается от того, что потребовалось бы сделать в корпоративной среде. В корпоративной среде компьютер, которому необходим доступ, скорее всего, будет набором ресурсов, составляющих некий тип приложения. В случае отработки отказа базы данных, возможно, потребуется также выполнить отработку отказа приложения, виртуальных машин или других ресурсов в новый регион. Обоим наборам ресурсов потребуется доступ к ресурсам, серверам и базам данных в другом регионе. Для этого можно использовать пиринг между виртуальными сетями, подключения между виртуальными сетями или, возможно, что-то еще (например, Azure ExpressRoute). Это зависит от вашего сценария.

  7. Добавьте одну или несколько баз данных в группу отработки отказа, запустив следующий сценарий в Azure Cloud Shell:

    # Add the database or databases to the failover group
    Get-AzSqlDatabase -ResourceGroupName $resourceGroup `
        -ServerName $server -DatabaseName $database | `
        Add-AzSqlDatabaseToFailoverGroup -ResourceGroupName $resourceGroup `
        -ServerName $server `
        -FailoverGroupName $failoverGroup
    Write-Host "AdventureWorks database added to the auto-failover group"
    

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

Вы выполнили развертывание и настройку группы автоматической отработки отказа для базы данных AdventureWorks.

Настройка приложений командной строки

В этом разделе вы будете использовать две рабочие нагрузки ostress для проверки Updateability (находится ли база данных в состоянии ReadWrite или ReadOnly) сервера-источника и сервера-получателя в группе отработки отказа. Этот сценарий предназначен для имитации приложения, в котором имеются рабочие нагрузки чтения и записи.

  1. Откройте два отдельных окна командной строки. Расположите окна так, чтобы на экране размещалось это окно (браузер) и оба окна командной строки.

  2. В обоих окнах командной строки перейдите в папку "Availability", как в предыдущих упражнениях. Например, можно использовать следующую команду:

    cd C:\Users\username\mslearn-azure-sql-fundamentals\05-Availability
    
  3. Первое окно командной строки будет использоваться для проверки состояния сервера-источника в созданной группе отработки отказа. Выполните эту команду, используя имя сервера и пароль:

    .\ostress.exe -S"<server-name>-fg.database.windows.net" -Q"SELECT DATABASEPROPERTYEX(DB_NAME(),'Updateability')" -U"cloudadmin" -d"AdventureWorks" -P"password" -n1 -r5000 -oprimary
    

    Примечание.

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

  4. Второе окно командной строки будет использоваться для проверки состояния сервера-получателя в созданной группе отработки отказа. Выполните эту команду, используя имя сервера и пароль:

    ostress.exe -S"<server-name>-fg.secondary.database.windows.net" -Q"SELECT DATABASEPROPERTYEX(DB_NAME(),'Updateability')" -U"cloudadmin" -d"AdventureWorks" -P"password" -n1 -r5000 -osecondary
    

Результат первой команды должен быть READ_WRITE, так как он проверяет основной сервер группы отработки отказа и не инициировал отработку отказа.

Результат второй команды должен быть READ_ONLY, так как он проверяет настроенное аварийное восстановление или дополнительный сервер. В любой момент времени вы должны иметь возможность производить запись только с одного сервера.

В следующих шагах рассматривается, что происходит с обоими серверами при отработке отказа.

Инициация отработки отказа и просмотр результатов

  1. Используйте терминал Azure Cloud Shell справа от этой страницы, чтобы проверить состояние вторичного сервера:

    (Get-AzSqlDatabaseFailoverGroup -FailoverGroupName $failoverGroup `
        -ResourceGroupName $resourceGroup -ServerName $drServer).ReplicationRole
    

    В результате вы узнаете, используется ли сервер-получатель в группе автоматической отработки отказа в качестве базы данных-источника или базы данных-получателя.

  2. Теперь вы видите, что происходит при отработке отказа. Запустите отработку отказа вручную, введя следующие команды Azure PowerShell в терминале Azure Cloud Shell:

    Switch-AzSqlDatabaseFailoverGroup -ResourceGroupName $resourceGroup `
     -ServerName $drServer -FailoverGroupName $failoverGroup
    

    Когда происходит отработка отказа, вы можете заметить, что подключения удаляются в течение некоторого времени, но так как приложение продолжает повторную попытку, приложение не завершается сбоем. После завершения отработки отказа вы можете заметить, что результаты READ_WRITE и READ_ONLY возобновляются и не меняются.

    Одним из преимуществ групп автоматической отработки отказа в базе данных SQL Azure и Управляемом экземпляре SQL Azure является отсутствие необходимости обновлять строки подключения после отработки отказа. Вы продолжаете подключаться к серверу-источнику (<failover-group>.database.windows.net) для рабочих нагрузок записи и к серверу-получателю (<failover-group>.secondary.database.windows.net) для рабочих нагрузок чтения. Azure осуществляет маршрутизацию в соответствующую базу данных в соответствующем регионе или сервере.

  3. Проверьте состояние сервера-получателя, выполнив этот сценарий в Azure Cloud Shell:

    (Get-AzSqlDatabaseFailoverGroup -FailoverGroupName $failoverGroup `
        -ResourceGroupName $resourceGroup -ServerName $drServer).ReplicationRole
    

    Теперь этот сервер должен стать источником.

  4. Произведите отработку отказа с помощью этого сценария в Azure Cloud Shell:

    Switch-AzSqlDatabaseFailoverGroup -ResourceGroupName $resourceGroup `
     -ServerName $server -FailoverGroupName $failoverGroup
    
  5. Наконец, можно еще раз проверить состояние сервера-получателя. Запустите этот сценарий в Azure Cloud Shell:

    (Get-AzSqlDatabaseFailoverGroup -FailoverGroupName $failoverGroup `
        -ResourceGroupName $resourceGroup -ServerName $drServer).ReplicationRole
    
  6. Теперь можно закрыть оба окна командной строки и развернуть окно браузера Microsoft Learn.

В этом упражнении вы узнали, как развертывать и настраивать группы автоматической отработки отказа. Вы также узнали, что это означает с точки зрения приложения. Группы автоматической отработки отказа — это всего лишь один из способов обеспечения доступности и масштабирования для чтения в SQL Azure.