Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 не могу насторить Read-Only Routing for an Availability Group in SQL Server 2016  [new]
Shurgenz
Member

Откуда: Питер
Сообщений: 1940
не могу насторить Read-Only Routing for an Availability Group in SQL Server 2016

Добрый день, момогите пожалуйста разобраться что я сделал не так

у меня настроен alwayson, с двумя серверами OCSDEV1, OCSDEV2, и листнером: sqllistener1

примари здесь OCSDEV2, секондари OCSDEV1

пользовался вот этой ссылкой: link

сделал такой скрипт:

ALTER AVAILABILITY GROUP [OCSAG]
 
 MODIFY REPLICA ON
 
N'OCSDEV1' WITH
 
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
 
ALTER AVAILABILITY GROUP [OCSAG]
 
 MODIFY REPLICA ON
 
N'OCSDEV1' WITH
 
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://OCSDEV1.ad.romanability.com:1433'));

ALTER AVAILABILITY GROUP [OCSAG]
 
 MODIFY REPLICA ON
 
N'OCSDEV2' WITH
 
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
 
ALTER AVAILABILITY GROUP [OCSAG]
 
 MODIFY REPLICA ON
 
N'OCSDEV2' WITH
 
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://OCSDEV2.ad.romanability.com:1433'));

ALTER AVAILABILITY GROUP [OCSAG]
 
MODIFY REPLICA ON
 
N'OCSDEV1' WITH
 
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('OCSDEV2')));
 
 
 
ALTER AVAILABILITY GROUP [OCSAG]
 
MODIFY REPLICA ON
 
N'OCSDEV2' WITH
 
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('OCSDEV1')));


проверял так:
SELECT	  AVGSrc.replica_server_name AS SourceReplica		
		, AVGRepl.replica_server_name AS ReadOnlyReplica
		, AVGRepl.read_only_routing_url AS RoutingURL
		, AVGRL.routing_priority AS RoutingPriority
FROM sys.availability_read_only_routing_lists AVGRL
INNER JOIN sys.availability_replicas AVGSrc ON AVGRL.replica_id = AVGSrc.replica_id
INNER JOIN sys.availability_replicas AVGRepl ON AVGRL.read_only_replica_id = AVGRepl.replica_id
INNER JOIN sys.availability_groups AV ON AV.group_id = AVGSrc.group_id
ORDER BY SourceReplica


выдало

SourceReplicaReadOnlyReplicaRoutingURLRoutingPriority
OCSDEV1OCSDEV2TCP://OCSDEV2.ad.romanability.com:14331
OCSDEV2OCSDEV1TCP://OCSDEV1.ad.romanability.com:14331


проверял реплики:

SELECT replica_server_name
	, read_only_routing_url
	, secondary_role_allow_connections_desc
FROM sys.availability_replicas


replica_server_nameread_only_routing_urlsecondary_role_allow_connections_desc
OCSDEV2TCP://OCSDEV2.ad.romanability.com:1433READ_ONLY
OCSDEV1TCP://OCSDEV1.ad.romanability.com:1433READ_ONLY


и вроде бы всё как в статье, но когда сделал коннекшн к листнеру, с ApplicationIntent=ReadOnly и выполнил запрос select @@servername, ожидалось что выдаст секондари, то есть OCSDEV1, а получаю праймари: OCSDEV2

что я сделал не так? подскажите пожалуйста
17 ноя 21, 15:39    [22397038]     Ответить | Цитировать Сообщить модератору
 Re: не могу насторить Read-Only Routing for an Availability Group in SQL Server 2016  [new]
Shurgenz
Member

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

неверный URL был задан... проверялось попытками подключиться, и если при подключении указывать master бд, то роутинг не работает, и коннекшн устанавливается успешно, если же указать базу, которая участвует в АО, то коннекшн не мог установиться, потому как для него была попытка зайти по некорректному URL, в общем всё заработало, когда URL поменял
20 ноя 21, 18:14    [22398362]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить