Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Always Online и отслеживание его failover  [new]
SadJester
Member

Откуда:
Сообщений: 29
Развернули мы у себя группу доступности Always Online на основе MS SQL 2012.
И все бы хорошо, но руководство хочет чтобы переключение с ноды на ноду производилось автоматически. :-)
Дело в том, что при переключении надо выполнить некоторое количество действий (скриптов) с сервером, чтобы он работал как дОлжно. Когда переключение осуществляется руками никаких проблем нет и скрипты мы применяем так же руками.
А вот при автоматическом переключении надо отслеживать этот самый момент переключения и как-то на него реагировать. Пока думаю о запуске джоба раз в минуту с проверкой не было ли смены активной ноды. Но пока нет понимания как именно это красиво реализовать на SQL.
Сталкивался ли кто-нибудь с подобным и как решал проблему?
16 июл 14, 16:27    [16313512]     Ответить | Цитировать Сообщить модератору
 Re: Always Online и отслеживание его failover  [new]
zatar86
Member

Откуда: СПБ
Сообщений: 228
На практике не делал, но через триггер бы решал. При переключении нод есть код события. Я как-то видел через просмотр событий extended events видел.
16 июл 14, 21:47    [16315026]     Ответить | Цитировать Сообщить модератору
 Re: Always Online и отслеживание его failover  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 901
SadJeste
там и там запускаете одинаковые джобы
в первом шаге делаете проверку :

IF (master.dbo.fn_is_primary_replica() = 0)
BEGIN
EXEC msdb.dbo.sp_stop_job @job_id = $(ESCAPE_SQUOTE(JOBID))
END

и все.

единственно такое работает, если несколько групп alwayson расположены на одной ноде, если они раскинуты по виду актив- актив, то тогда не работает.
17 июл 14, 10:03    [16316547]     Ответить | Цитировать Сообщить модератору
 Re: Always Online и отслеживание его failover  [new]
SadJester
Member

Откуда:
Сообщений: 29
Slava_Nik
SadJeste
там и там запускаете одинаковые джобы
в первом шаге делаете проверку :

IF (master.dbo.fn_is_primary_replica() = 0)
BEGIN
EXEC msdb.dbo.sp_stop_job @job_id = $(ESCAPE_SQUOTE(JOBID))
END

и все.

единственно такое работает, если несколько групп alwayson расположены на одной ноде, если они раскинуты по виду актив- актив, то тогда не работает.

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

Может кто-то все-таки занимался отслеживанием процесса автоматического failover-а? Как можно отследить событие failover, ну или хотя бы дату последнего failover для конкретной группы доступности?

PS. Кстати, fn_is_primary_replica это наша самописная функция определяющая где сейчас активна основная группа доступности. Для остальных читателей форума она ни о чем не говорит :)
17 июл 14, 11:18    [16317101]     Ответить | Цитировать Сообщить модератору
 Re: Always Online и отслеживание его failover  [new]
SadJester
Member

Откуда:
Сообщений: 29
Неужели никто не сталкивался с задачей отслеживания автоматического failover`а?
18 июл 14, 09:37    [16322804]     Ответить | Цитировать Сообщить модератору
 Re: Always Online и отслеживание его failover  [new]
Евгений Недашковский
Member

Откуда:
Сообщений: 14
SadJester,

надо понимать, что Always On фейловерится на уровне СУБД, а не на уровне ОС. Т.е. Microsoft предупреждает, что если есть желание потестировать failover - для переключения необходимо использовать SSMS, а не оснастку Failover Cluster Manager, так как он "не совсем aware".
В случае сбоя переключение между репликами происходит автоматически, опять же на уровне СУБД.

Вы как работаете? Через листенер, или напрямую указав базы?
18 июл 14, 11:44    [16323752]     Ответить | Цитировать Сообщить модератору
 Re: Always Online и отслеживание его failover  [new]
SadJester
Member

Откуда:
Сообщений: 29
Евгений Недашковский
SadJester,

надо понимать, что Always On фейловерится на уровне СУБД, а не на уровне ОС. Т.е. Microsoft предупреждает, что если есть желание потестировать failover - для переключения необходимо использовать SSMS, а не оснастку Failover Cluster Manager, так как он "не совсем aware".
В случае сбоя переключение между репликами происходит автоматически, опять же на уровне СУБД.

Вы как работаете? Через листенер, или напрямую указав базы?

Евгений, все вышеописанное я, конечно, понимаю :) Мне и нужно на уровне MS SQL отследить и отреагировать на автоматический failover.
Мы работаем через листенер.
18 июл 14, 12:14    [16324033]     Ответить | Цитировать Сообщить модератору
 Re: Always Online и отслеживание его failover  [new]
boltnik
Member

Откуда: Калуга/Москва
Сообщений: 144
Так активные сессии рвутся при failover. Как вариант написать приложение для отслеживания сего действия.
21 июл 14, 17:07    [16336792]     Ответить | Цитировать Сообщить модератору
 Re: Always Online и отслеживание его failover  [new]
SadJester
Member

Откуда:
Сообщений: 29
boltnik
Так активные сессии рвутся при failover. Как вариант написать приложение для отслеживания сего действия.

Ну, способ, конечно, имеет право на жизнь, но крайне велика вероятность ложных срабатываний.
21 июл 14, 17:51    [16337111]     Ответить | Цитировать Сообщить модератору
 Re: Always Online и отслеживание его failover  [new]
boltnik
Member

Откуда: Калуга/Москва
Сообщений: 144
SadJester
boltnik
Так активные сессии рвутся при failover. Как вариант написать приложение для отслеживания сего действия.

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


Еще вариант костыль с внешним приложением: подключившись к listener, сравнивать результат запроса "SELECT @@servername" с предыдущим вызовом.
22 июл 14, 09:46    [16339176]     Ответить | Цитировать Сообщить модератору
 Re: Always Online и отслеживание его failover  [new]
SadJester
Member

Откуда:
Сообщений: 29
boltnik
SadJester
пропущено...

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


Еще вариант костыль с внешним приложением: подключившись к listener, сравнивать результат запроса "SELECT @@servername" с предыдущим вызовом.

Тоже, конечно, вариант. Но уж очень бы не хотелось использовать внешние ресурсы.
А вообще странно, что MS не предусмотрели в явном виде возможность отслеживания и реагирования на failover.
22 июл 14, 10:23    [16339413]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить