Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема с read only routing list 2014 availabilty groups  [new]
sqluru
Member

Откуда:
Сообщений: 82
Есть такая проблема. Настроил routing list 2014. Сначала всё работало. Изменил порядок в routing list, не реагирует, лезет по старому приоритету. Удалил реплику, на которую он прёт вообще из listeners - та же история.

В чём заморочка? Как удалить routing list вообще? Неужели надо удалять всего Listener?

Использовал 2014 SSRS репорт в качестве клиента.

Спасибо!
25 фев 16, 04:35    [18860186]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с read only routing list 2014 availabilty groups  [new]
Col
Member

Откуда: Торонто
Сообщений: 180
sqluru,

В ГУЙ нет этих настроек, только скриптом.
Вот этот покажет настройки.

SELECT ag.name as "Availability Group", ar.replica_server_name as "When Primary Replica Is",

        rl.routing_priority as "Routing Priority", ar2.replica_server_name as "RO Routed To",

        ar.secondary_role_allow_connections_desc, ar2.read_only_routing_url

FROM sys.availability_read_only_routing_lists rl

        inner join sys.availability_replicas ar on rl.replica_id = ar.replica_id

        inner join sys.availability_replicas ar2 on rl.read_only_replica_id = ar2.replica_id

        inner join sys.availability_groups ag on ar.group_id = ag.group_id

ORDER BY ag.name, ar.replica_server_name, rl.routing_priority



Документация и примеры тут:
https://msdn.microsoft.com/en-us/library/hh710054.aspx?f=255&MSPPError=-2147217396
25 фев 16, 23:27    [18865166]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с read only routing list 2014 availabilty groups  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
sqluru
Есть такая проблема. Настроил routing list 2014.
Каким скриптом?
sqluru
Изменил порядок в routing list
Каким скриптом?
sqluru
Удалил реплику, на которую он прёт вообще из listeners
Каким скриптом?

sqluru
Использовал 2014 SSRS репорт в качестве клиента.
Какой строкой подключения?
26 фев 16, 00:34    [18865288]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с read only routing list 2014 availabilty groups  [new]
sqluru
Member

Откуда:
Сообщений: 82
Спасибо!

Понял, где собака порылась. После того как всё работало, я начал менять порядок в routing list

Из этого:
...
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('Replica3','Replica1')));

получил это:
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('Replica2', 'Replica1')));

А TCP не поменял на Replica2:

...
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://Replica3.artc.int:1433'));


Получилось, что лезло всё время по TCP на Replica3. Вопрос в связи с этим.
Допустим Replica1 - primary, Replica3 используется как read only (клиент прописал ApplicationIntend=ReadOnly):

ALTER AVAILABILITY GROUP [AG01]
MODIFY REPLICA ON
N'Replica1' WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://Replica3.artc.int:1433'));

ALTER AVAILABILITY GROUP [AGA01]
MODIFY REPLICA ON
N'Replica1' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('Replica3','Replica1')));

При этом есть ещё Replica2. В случае, если Replica3 падает, можно ли автоматически (либо быстро полуавтоматически - скрипт запустить) перенаправить read only клиента на Replica2? Только так или есть лучше варианты?

ALTER AVAILABILITY GROUP [AG01]
MODIFY REPLICA ON
N'Replica1' WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://Replica2.artc.int:1433'));

ALTER AVAILABILITY GROUP [AGA01]
MODIFY REPLICA ON
N'Replica1' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('Replica2','Replica1')));

При этом, если ничего не делать, перенаправится ли клиент на Replica1 автоматически?
Могу всё это перепробовать, просто интересно как народ делает.
26 фев 16, 03:37    [18865433]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с read only routing list 2014 availabilty groups  [new]
Col
Member

Откуда: Торонто
Сообщений: 180
sqluru,

Вопрос непонятен.
Почему просто не добавить Replica2 вторым в очередь?
Балансировка редонли реплик появилась только в 2016, но и в 2016 надо "постучаться в бубен" для ее включения.
Бубен тут:
https://msdn.microsoft.com/en-us/library/hh710054.aspx?f=255&MSPPError=-2147217396#loadbalancing
В 2014 запрос будет перенаправлен на первую доступную реплику.
Т.Е. добавив Replica2 вторым в очередь вы получите так желанный вами эфект высокой доступности.
26 фев 16, 22:06    [18869748]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с read only routing list 2014 availabilty groups  [new]
sqluru
Member

Откуда:
Сообщений: 82
Спасибо всем, заработало.

Надеюсь, последние вопросы. Если у меня Replica1 - primary, Replica 2 - первая в routing list, потом Replica3. Клиент - SSRS report с ApplicationIntent=ReadOnly

ALTER AVAILABILITY GROUP [AGA01]
MODIFY REPLICA ON
N'Replica1' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('Replica2','Replica3')));

В случае, если падает Replica2, то происходит 2 вещи:

1. Клиент перенаправляется на Replica3. Тут всё ОК, как и планировалось.
2. После смены Read only реплики на Replica3 клиент всегда (пробовал даже через несколько минут) выдаёт ошибку. Если нажимаю refresh опять, то всё работает и коннектится к Replica3.

В связи с этим 2 вопроса:

1. Можно ли каким-то образом убрать ошибку из 1?
2. Если ли способ заставить AG изменить порядок (фактический) в read only routing. Поясню - если, Replica2 перезагрузилась и опять доступна, то можно ли заставить клиента вернуться на Replica2, без перестартовки Replica3?

В принципе и так всё работает, просто было бы здорово, если бы на все 100%.
1 мар 16, 02:29    [18880186]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с read only routing list 2014 availabilty groups  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
sqluru
клиент всегда (пробовал даже через несколько минут) выдаёт ошибку
Текст ошибки традиционно надо угадать?
1 мар 16, 02:39    [18880193]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с read only routing list 2014 availabilty groups  [new]
sqluru
Member

Откуда:
Сообщений: 82
На клиенте (SSRS 2014) выдаёт это:

An error has occurred during report processing. (rsProcessingAborted)
Query execution failed for dataset 'Users'. (rsErrorExecutingCommand)
For more information about this error navigate to the report server on the local server machine, or enable remote errors


Из лога SSRS на сервере:

Microsoft.ReportingServices.ReportProcessing.ProcessingAbortedException: An error has occurred during report processing. ---> Microsoft.ReportingServices.ReportProcessing.ReportProcessingException: Query execution failed for dataset 'Users'. ---> System.InvalidOperationException: ExecuteReader requires an open and available Connection. The connection's current state is closed.


SSRS report - это частный случай. Я понимаю, что каждый клиент (.Net, Java) должен просто обрабатывать ошибку в случае если коннекция отвалилась (после failover). Тут пусть девелоперы разбираются. В случае с SSRS Можно что-то сделать?
2 мар 16, 03:08    [18885372]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с read only routing list 2014 availabilty groups  [new]
Col
Member

Откуда: Торонто
Сообщений: 180
sqluru,

SPN на листинер настроен?
Аунтификация SSRS NTLM или таки Kerberos?

Пальцем в небо конечно, но кроме проблемыдаблхоп ничего в голову не приходит...
3 мар 16, 01:03    [18890085]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с read only routing list 2014 availabilty groups  [new]
sqluru
Member

Откуда:
Сообщений: 82
SSRS на NTLM (установлен по умолчанию), SPN на listener тоже не настроен.
4 мар 16, 05:25    [18894885]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить