Настройка гибкой политики автоматического перехода на другой ресурс для группы доступности Always On

Применимо к:SQL Server — только Windows

В данном разделе описывается настройка гибкой политики отработки отказа в группе доступности Always On при помощи Transact-SQL или PowerShell в SQL Server. Гибкая политика отработки отказа предоставляет гранулярное управление условиями, которые могут вызвать автоматический переход на другой ресурс для группы доступности. Изменяя условия отказа, которые инициируют автоматический переход на другой ресурс, и частоту проверки исправности, вы можете увеличить или уменьшить вероятность автоматического перехода на другой ресурс и добиться высокого уровня доступности соглашения об уровне обслуживания.

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

Примечание

Гибкая политика отработки отказа для группы доступности не может быть настроена при помощи среды SQL Server Management Studio.

Ограничения автоматического перехода на другой ресурс

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

  • SQL Server 2019 г. (15.x) увеличилось максимальное число синхронных реплик до 5 по SQL Server 2017 г. (14,х). Вы можете настроить эту группу из пяти реплик для автоматического перехода на другой ресурс в пределах группы. Предоставляется одна первичная реплика и четыре синхронные вторичные реплики.

  • Если в группе доступности превышен порог сбоя WSFC, то кластер WSFC не выполняет автоматический переход на другой ресурс для этой группы доступности. Более того, группа ресурсов WSFC для группы доступности остается в состоянии сбоя, пока администратор кластера вручную не переведет сбойную группу ресурсов в режим «в сети» или пока администратор базы данных вручную не выполнит переход группы доступности на другой ресурс. Порог сбоя WSFC определяется как максимальное число сбоев, которые могут произойти в группе доступности за заданный период времени. По умолчанию используется период в шесть часов, а максимальное число сбоев за этот период по умолчанию равно n-1, где n — число узлов WSFC. Чтобы изменить пороговые значения сбоя для заданной группы доступности, используйте консоль диспетчера отработки отказа WSFC.

Предварительные условия

  • Необходимо подключиться к экземпляру сервера, на котором размещена первичная реплика.

Разрешения

Задача Разрешения
Настройка гибкой политики отработки отказа для новой группы доступности Требуется членство в фиксированной роли сервера sysadmin и одно из разрешений: CREATE AVAILABILITY GROUP, ALTER ANY AVAILABILITY GROUP или CONTROL SERVER.
Изменение политики существующей группы доступности Необходимо разрешение ALTER AVAILABILITY GROUP для группы доступности, разрешение CONTROL AVAILABILITY GROUP, разрешение ALTER ANY AVAILABILITY GROUP или разрешение CONTROL SERVER.

Пороговое значение времени ожидания проверки работоспособности

Библиотека ресурсов группы доступности в WSFC-кластере выполняет проверку исправности первичной реплики путем вызова хранимой процедуры sp_server_diagnostics для экземпляра SQL Server, на котором располагается первичная реплика. sp_server_diagnostics возвращает результаты с интервалом, равным 1/3 порогового значения времени ожидания при проверке работоспособности для группы доступности. Пороговое значение времени ожидания при проверке работоспособности по умолчанию составляет 30 секунд, то есть sp_server_diagnostics возвращает сведения с интервалом в 10 секунд. Если sp_server_diagnostics работает медленно или не возвращает сведения, библиотека ресурсов ожидает, пока истечет полный интервал для описанного порогового значения, и только затем определяет, что первичная реплика не отвечает. Если первичная реплика не отвечает, инициируется автоматический переход на другой ресурс, если она поддерживается.

Важно!

sp_server_diagnostics не выполняет проверку работоспособности на уровне базы данных.

Уровень условий сбоя

Уровень условий сбоя для группы доступности определяет, обеспечат ли диагностические данные и сведения о работоспособности, возвращенные командой sp_server_diagnostics , автоматический переход на другой ресурс. Уровень условия сбоя определяет, какие условия сбоя инициируют автоматический переход на другой ресурс. Существует пять уровней условий сбоя, которые варьируются от наименее ограничительного (уровень 1) до наиболее ограничительного (уровень 5). Заданный уровень включает в себя ограничения всех предыдущих уровней. Таким образом, наиболее строгий уровень 5 включает в себя менее строгие уровни ограничений с 1 по 4 и т. д.

Важно!

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

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

Level Условие сбоя Значение Transact-SQL Значение PowerShell
Один При остановке работы сервера. Указывает, что автоматический переход на другой ресурс инициируется при возникновении одной из следующих ситуаций:

Служба SQL Server остановлена.

Аренда группы доступности для подключения к кластеру WSFC истекла, поскольку от экземпляра сервера не было получено сообщение ACK. Дополнительные сведения см. в разделе Как это работает: время ожидания аренды Always On в SQL Server.



Это наименее ограничительный уровень.
1 OnServerDown
Два При отсутствии ответа от сервера. Указывает, что автоматический переход на другой ресурс инициируется при возникновении одной из следующих ситуаций:

Экземпляр SQL Server не подключается к кластеру, а определяемый пользователем порог времени ожидания проверки исправности для группы доступности превышен.

Реплика доступности находится в неисправном состоянии.
2 OnServerUnresponsive
Три В случае критической ошибки сервера. Указывает, что автоматическая отработка отказа инициируется при критических SQL Server внутренних ошибках, таких как потерянные спин-блокировки, серьезные нарушения доступа для записи или слишком большое количество дампов памяти, созданных за короткий период времени.

Это уровень, заданный по умолчанию.
3 OnCriticalServerError
Четыре В случае ошибки сервера средней значимости. Указывает, что автоматический переход на другой ресурс инициируется в случае появления умеренных внутренних ошибок SQL Server , например устойчивое состояние нехватки памяти в пуле внутренних ресурсов SQL Server . 4 OnModerateServerError
Пять При любых подходящих условиях сбоя. Указывает, что автоматический переход на другой ресурс инициируется при любом удовлетворяющем условиям состоянии сбоя, включая:

Обнаружение взаимоблокировки планировщика.

Обнаружение неразрешимой взаимоблокировки.



Это наиболее ограничительный уровень.
5 OnAnyQualifiedFailureConditions

Примечание

Отсутствие ответа экземпляра SQL Server на клиентские запросы не является существенным для групп доступности.

Использование Transact-SQL

Настройка гибкой политики отработки отказа

  1. Подключитесь к экземпляру сервера, на котором находится первичная реплика.

  2. Для новой группы доступности используйте инструкцию Transact-SQL CREATE AVAILABILITY GROUP. При добавлении или изменении существующей группы доступности воспользуйтесь инструкцией Transact-SQL ALTER AVAILABILITY GROUP.

    • Чтобы установить уровень условий перехода на другой ресурс, используйте параметр FAILURE_CONDITION_LEVEL = n , где n — это целое число от 1 до 5.

      Например, следующая инструкция Transact-SQL изменяет уровень условия сбоя для существующей группы доступности, AG1, до уровня 1:

      
      ALTER AVAILABILITY GROUP AG1 SET (FAILURE_CONDITION_LEVEL = 1);  
      

      Эти целочисленные значения следующим образом соответствуют уровням условий сбоя.

      Значение Transact-SQL Level Автоматическая отработка отказа запускается при...
      1 Один При остановке работы сервера. Служба SQL Server останавливается из-за отработки отказа или перезапуска.
      2 Два При отсутствии ответа от сервера. Удовлетворяется любое условие более низкого значения, служба SQL Server подключена к кластеру, а пороговое значение ожидания проверки работоспособности превышено, либо текущая первичная реплика находится в неисправном состоянии.
      3 Три В случае критической ошибки сервера. Удовлетворяется любое условие более низкого значения, или возникает внутренняя критическая ошибка сервера.

      Это уровень, заданный по умолчанию.
      4 Четыре В случае ошибки сервера средней значимости. Удовлетворяется любое условие более низкого значения, или возникает ошибка сервера средней значимости.
      5 Пять При любых подходящих условиях сбоя. Удовлетворяется любое условие более низкого значения, или возникает подходящее условие сбоя.

      Дополнительные сведения об уровнях условий перехода на другой ресурс см. в статье Гибкая политика отработки отказа для автоматического перехода на другой ресурс группы доступности (SQL Server).

    • Чтобы настроить пороговое значение ожидания проверки работоспособности, используйте параметр HEALTH_CHECK_TIMEOUT = n, где n является целым числом от 15000 миллисекунд (15 секунд) до 4294967295 миллисекунд. Значение по умолчанию — 30 000 миллисекунд (30 секунд)

      Например, следующая инструкция Transact-SQL изменяет пороговое значение времени ожидания проверки работоспособности существующей группы доступности, AG1, на значение 60 000 миллисекунд (одна минута).

      
      ALTER AVAILABILITY GROUP AG1 SET (HEALTH_CHECK_TIMEOUT = 60000);  
      

Использование PowerShell

Настройка гибкой политики отработки отказа

  1. Установите значение по умолчанию (cd) равным экземпляру сервера, на котором размещена первичная реплика.

  2. При добавлении реплики доступности в группу доступности воспользуйтесь командлетом New-SqlAvailabilityGroup . При изменении существующей реплики доступности воспользуйтесь командлетом Set-SqlAvailabilityGroup .

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

      Значение Level Автоматическая отработка отказа запускается при...
      OnServerDown Один При остановке работы сервера. Служба SQL Server останавливается из-за отработки отказа или перезапуска.
      OnServerUnresponsive Два При отсутствии ответа от сервера. Удовлетворяется любое условие более низкого значения, служба SQL Server подключена к кластеру, а пороговое значение ожидания проверки работоспособности превышено, либо текущая первичная реплика находится в неисправном состоянии.
      OnCriticalServerError Три В случае критической ошибки сервера. Удовлетворяется любое условие более низкого значения, или возникает внутренняя критическая ошибка сервера.

      Это уровень, заданный по умолчанию.
      OnModerateServerError Четыре В случае ошибки сервера средней значимости. Удовлетворяется любое условие более низкого значения, или возникает ошибка сервера средней значимости.
      OnAnyQualifiedFailureConditions Пять При любых подходящих условиях сбоя. Удовлетворяется любое условие более низкого значения, или возникает подходящее условие сбоя.

      Дополнительные сведения об уровнях условий перехода на другой ресурс см. в статье Гибкая политика отработки отказа для автоматического перехода на другой ресурс группы доступности (SQL Server).

      Например, следующая команда изменяет уровень условия сбоя для существующей группы доступности AG1до уровня 1.

      Set-SqlAvailabilityGroup `   
      -Path SQLSERVER:\Sql\PrimaryServer\InstanceName\AvailabilityGroups\MyAg `   
      -FailureConditionLevel OnServerDown  
      
    • Чтобы установить пороговое значение времени ожидания для проверки работоспособности, используйте параметр HealthCheckTimeoutn , где n является целым числом от 15000 миллисекунд (15 секунд) до 4294967295 миллисекунд. Значение по умолчанию — 30 000 миллисекунд (30 секунд).

      Например, следующая команда изменяет пороговое значение времени ожидания проверки работоспособности существующей группы доступности AG1на значение 120 000 миллисекунд (две минуты).

      Set-SqlAvailabilityGroup `   
      -Path SQLSERVER:\Sql\PrimaryServer\InstanceName\AvailabilityGroups\MyAG `   
      -HealthCheckTimeout 120000  
      

Примечание

Чтобы просмотреть синтаксис командлета, воспользуйтесь командлетом Get-Help в среде PowerShell SQL Server . Дополнительные сведения см. в разделе Get Help SQL Server PowerShell.

Настройка и использование поставщика SQL Server PowerShell

Связанные задачи

To configure automatic failover

См. также

См. также:

Обзор групп доступности AlwaysOn SQL Server)
Режимы доступности (группы доступности AlwaysOn)
Отработка отказа и режимы отработки отказа (группы доступности AlwaysOn)
Отказоустойчивая кластеризация Windows Server (WSFC) с SQL Server
Failover Policy for Failover Cluster Instances
sp_server_diagnostics (Transact-SQL)