Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:SQL Server в Windows
В этом разделе описывается, как настроить гибкую политику автоматического переключения при отказе для группы доступности Always On с помощью Transact-SQL или PowerShell в SQL Server. Гибкая политика переключения при отказе обеспечивает детальное управление условиями, которые вызывают автоматическое переключение при отказе для группы доступности. Изменяя условия сбоя, которые запускают автоматическое переключение при сбое, и частоту проверок работоспособности, вы можете увеличить или уменьшить вероятность автоматического переключения при сбое, чтобы поддерживать ваш SLA по высокой доступности.
Гибкая политика автоматического переключения при отказе для группы доступности определяется уровнем условий отказа и пороговым значением времени ожидания проверки работоспособности. При обнаружении того, что группа доступности достигла уровня условий сбоя или порога тайм-аута проверки работоспособности, библиотека DLL ресурса группы доступности отправляет ответ кластеру Windows Server Failover Clustering (WSFC). Затем кластер WSFC инициирует автоматическое переключение на вторичную реплику.
Примечание.
Гибкую политику переключения при отказе для группы доступности невозможно настроить с помощью SQL Server Management Studio.
Ограничения автоматического переключения при отказе
Для автоматического переключения при отказе текущая первичная реплика и одна вторичная реплика должны быть настроены на режим доступности с синхронной фиксацией и автоматическим переключением при отказе, а вторичная реплика должна быть синхронизирована с первичной репликой.
SQL Server 2019 (15.x) увеличил максимальное число синхронных реплик до 5, начиная с 3 в SQL Server 2017 (14.x). Вы можете настроить для этой группы из пяти реплик автоматическое аварийное переключение в пределах группы. Предоставляется одна первичная реплика и четыре синхронные вторичные реплики.
Если группа доступности превышает свой порог сбоев 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). Определённый уровень включает менее строгие уровни. Таким образом, самый строгий, пятый уровень включает четыре менее строгих условия и так далее.
Внимание
Ни на одном из уровней условий сбоя не обнаружено поврежденных и подозрительных баз данных. Следовательно, поврежденная или подозрительная база данных (из-за ошибки оборудования, повреждения данных или по другой причине) никогда не вызывает автоматического перехода на другой ресурс.
Уровни условий сбоя описаны в следующей таблице.
| Уровень | Условие сбоя | Значение 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 | При любых условиях отказа |
Примечание.
Отсутствие ответа экземпляром SQL Server на клиентские запросы не имеет значения для групп доступности.
Использование Transact-SQL
Настроить гибкую политику переключения при отказе
Подключитесь к экземпляру сервера, на котором находится первичная реплика.
Для новой группы доступности используйте оператор Transact-SQL CREATE AVAILABILITY GROUP. Если вы изменяете существующую группу доступности, используйте ALTER AVAILABILITY GROUP инструкциюTransact-SQL.
Чтобы задать уровень условия отработки отказа, используйте параметр FAILURE_CONDITION_LEVEL = n, где n — целое число от 1 до 5.
Например, следующая инструкция Transact-SQL изменяет уровень условия сбоя для существующей группы доступности,
AG1, до уровня 1:ALTER AVAILABILITY GROUP AG1 SET (FAILURE_CONDITION_LEVEL = 1);Эти целочисленные значения следующим образом соответствуют уровням условий сбоя.
Значение Transact-SQL Уровень Когда инициируется автоматическое переключение при отказе... 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
Настроить гибкую политику переключения при отказе
Установите значение по умолчанию (cd) равным экземпляру сервера, на котором размещена первичная реплика.
При добавлении реплики доступности в группу доступности воспользуйтесь командлетом New-SqlAvailabilityGroup. При изменении существующей реплики доступности воспользуйтесь командлетом Set-SqlAvailabilityGroup .
Чтобы установить уровень условий отработки отказа, используйте параметр FailureConditionLevellevel , где level принимает одно из следующих значений.
Значение Уровень Когда инициируется автоматическое переключение при отказе... OnServerDown Один При сбое сервера. Служба SQL Server останавливается из-за переключения на резервный сервер или перезапуска. OnServerUnresponsive Два Если сервер не отвечает. Удовлетворяется любое условие более низкого значения, служба SQL Server подключена к кластеру, а пороговое значение ожидания проверки работоспособности превышено, либо текущая первичная реплика находится в неисправном состоянии. OnCriticalServerError Три В случае критической ошибки сервера. Удовлетворяется любое условие более низкого значения, или возникает внутренняя критическая ошибка сервера.
Это уровень по умолчанию.OnModerateServerError Четыре При умеренной ошибке сервера. Выполняется любое условие с меньшим значением или возникает умеренная ошибка сервера. При любых условиях отказа Пять При любых оговоренных условиях сбоя. Выполняется любое условие с меньшим значением или возникает соответствующее условие отказа. Дополнительные сведения об уровнях условий перехода на другой ресурс см. в статье Гибкая политика отработки отказа для автоматического перехода на другой ресурс группы доступности (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 в среде SQL Server PowerShell. Дополнительные сведения см. в разделе Get Help SQL Server PowerShell.
Настройка и использование поставщика SQL Server PowerShell
Связанные задачи
Настроить автоматическое переключение на резерв
Изменение режима доступности для реплики доступности (SQL Server) (автоматический переход на другой ресурс требует режима доступности с синхронной фиксацией)
Изменение режима отработки отказа для реплики доступности (SQL Server)
Связанные материалы
- Как это работает: тайм-аут аренды Always On в SQL Server
- Что такое группа доступности AlwaysOn?
- Различия между режимами доступности для группы доступности AlwaysOn
- Переключение при отказе и режимы переключения при отказе (группы доступности Always On)
- Отказоустойчивая кластеризация Windows Server с SQL Server
- Политика отработки отказа для экземпляров отказоустойчивого кластера
- sp_server_diagnostics (Transact-SQL)