Поделиться через


Перезапуск экземпляра с помощью ручного отказоустойчивого переключения, инициированного пользователем - Azure SQL Управляемый экземпляр

Область применения: Управляемый экземпляр SQL Azure

В этой статье объясняется, как выполнить вручную инициированное пользователем переключение Управляемого экземпляра SQL Azure с помощью PowerShell, Azure CLI или REST API.

Можно инициировать переключение основного узла на уровнях службы Общего Назначения (GP) и Бизнес-критичного (BC), а также вручную инициировать переключение вторичного узла реплики только для чтения в уровне службы BC.

Примечание.

Отказоустойчивость в этой статье относится к перезапуску процесса ядра СУБД SQL Server и не связана с межрегиональным переключением групп отказоустойчивости групп отработки отказа.

Когда следует использовать переключение вручную

Доступность, фундаментальная часть платформы Управляемый экземпляр SQL, прозрачно работает для приложений базы данных, предоставляя локальные резервные вычислительные узлы для размещения процесса ядра СУБД SQL Server. Отработка отказа происходит, когда процесс ядра СУБД SQL Server отключается и восстанавливается на том же или другом вычислительном узле. Как правило, отработка отказа выполняется автоматически и управляется платформой Azure при обнаружении сбоя, деградации узла или во время обновлений службы.

Вся операция отработки отказа состоит из подключения ядра СУБД SQL Server к сети, проверки состояния базы данных, а затем, наконец, перенаправления клиентских подключений к новому процессу SQL. Клиентские подключения прерываются только на короткий период времени, обычно менее чем на минуту, в течение последнего этапа операции отработки отказа.

Вы можете выполнить ручную отработку отказа, чтобы перезапустить процесс движка по следующим причинам:

  • Сбой входа или замедление работы из-за проблем с производительностью.
  • Тестирование приложения на устойчивость к отказам перед развертыванием в производственную среду.
  • Тестирование сквозных систем на отказоустойчивость при автоматическом переключении.
  • Тестирование того, как отказоустойчивость влияет на существующие сеансы базы данных.
  • Снижение производительности запросов (перезапуск экземпляра может помочь устранить проблему с производительностью).

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

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

Уровень служб Модель доступности Ожидаемое поведение при отказе Особенности поведения при переключении на резервный режим (исключения)
Общее назначение Локальная избыточность
(отдельная зона доступности)
Процесс SQL перезапускается на той же виртуальной машине. Процесс SQL перезапускается на другой виртуальной машине.
Общего назначения Зональная избыточность
(Несколько зон доступности)
Процесс SQL перезапускается на той же виртуальной машине. Процесс SQL перезапускается на другой виртуальной машине.
Критически важный для бизнеса Локальная избыточность
(отдельная зона доступности)
SQL процесс перезапускается на первичной реплике, или вторичная реплика выбирается случайным образом и повышается до первичной. Н/П
Критически важный для бизнеса Избыточность по зонам
(Несколько зон доступности)
SQL процесс перезапускается на первичной реплике, или случайная вторичная реплика становится первичной, либо в той же, либо в другой зоне доступности. Н/П

Разрешения

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

  • роль владельца подписки; или
  • Участник SQL Managed Instance роль или
  • настраиваемая роль со следующим разрешением: .
    • Microsoft.Sql/managedInstances/failover/action

Перезапуск экземпляра с ручным переключением при отказе

Экземпляр можно перезапустить, выполнив ручное переключение на отказоустойчивость с помощью PowerShell, Azure CLI или REST API.

Минимальная версия Az.Sql — v 2.9.0. Рассмотрите возможность использования Azure Cloud Shell из портала Azure, где всегда доступна последняя версия PowerShell.

Предварительное требование: используйте следующий сценарий PowerShell для установки необходимых модулей Azure. Кроме того, выберите подписку, в которой находится Управляемый экземпляр SQL, отклонение которого вы хотите выполнить.

$subscription = 'enter your subscription ID here'
Install-Module -Name Az
Import-Module Az.Accounts
Import-Module Az.Sql

Connect-AzAccount
Select-AzSubscription -SubscriptionId $subscription

Используйте команду PowerShell Invoke-AzSqlInstanceFailover в следующем примере, чтобы инициировать переключение основного узла, применимое к уровням служб BC и GP.

$ResourceGroup = 'enter resource group of your MI'
$ManagedInstanceName = 'enter MI name'
Invoke-AzSqlInstanceFailover -ResourceGroupName $ResourceGroup -Name $ManagedInstanceName

Используйте следующую команду PowerShell, чтобы переключиться на резервный узел чтения, который применим только к уровню служб BC.

$ResourceGroup = 'enter resource group of your MI'
$ManagedInstanceName = 'enter MI name'
Invoke-AzSqlInstanceFailover -ResourceGroupName $ResourceGroup -Name $ManagedInstanceName -ReadableSecondary

Мониторинг резервного переключения

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

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

  • sys.dm_os_sys_info для проверки времени работы системы на уровне служб общего назначения.
  • sys.dm_hadr_fabric_replica_statesчтобы проверить доступные реплики для уровня служб Business Critical.

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

Уровень служб "Общего назначения"

В следующем примере T-SQL показано время простоя процесса SQL на узле для уровня служб общего назначения :

SELECT sqlserver_start_time, sqlserver_start_time_ms_ticks FROM sys.dm_os_sys_info

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

Уровень служб "Критически важный для бизнеса"

В следующем примере T-SQL указывается, какой узел в настоящее время является основной репликой для уровня служб критически важный для бизнеса:

SELECT DISTINCT replication_endpoint_url, fabric_replica_role_desc FROM sys.dm_hadr_fabric_replica_states

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

Примечание.

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

Ограничения

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

  • В одном управляемом экземпляре SQL может инициироваться только одно переключение на резерв каждые 15 минут.
  • Резервное переключение не допускается.
    • До завершения первой полной резервной копии для новой базы данных автоматическими системами резервного копирования.
    • Если выполняется восстановление базы данных.
  • Например, на уровне служб критически важный для бизнеса:
    • Реплики должны иметь кворум перед принятием запроса на отказоустойчивость.
    • Команда Invoke-AzSqlInstanceFailover выполняет отработку отказа первичной реплики, если -ReadableSecondary не указано, в этом случае отработка отказа доступной для чтения вторичной реплики. Нечитаемые вторичные реплики не переключаются при отказе при выполнении этой команды.