SQL Server AlwaysON читает из нескольких вторичных
Я настроил всегда на одной из моих сред.
SQL1 = Primary
SQL2 = Slave1 (readonly)
SQL3 = Slave2 (readonly)
Мой вопрос:
Я хочу, чтобы мое приложение считывало данные с обоих подчиненных серверов (например, SQL2 и SQL3 в случае, если они являются ведомыми, а SQL1 является ведущим) .
Возможно ли это, и если да, то как я это делаю?
Я уже настроил таблицы маршрутизации
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON N'SQL1' WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://SQL1.aws.ir:1433'));
GO
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON N'SQL2' WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://SQL2.aws.ir:1433'));
GO
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON N'SQL3' WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://SQL3.aws.ir:1433'));
GO
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON N'SQL1' WITH
(PRIMARY_ROLE(READ_ONLY_ROUTING_LIST = (N'SQL2',N'SQL3')))
GO
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON N'SQL2' WITH
(PRIMARY_ROLE(READ_ONLY_ROUTING_LIST = (N'SQL1',N'SQL3')))
GO
ALTER AVAILABILITY GROUP [AG1]
MODIFY REPLICA ON N'SQL3' WITH
(PRIMARY_ROLE(READ_ONLY_ROUTING_LIST = (N'SQL1',N'SQL2')))
GO
2 ответа
Я хочу, чтобы мое приложение считывало данные с обоих подчиненных серверов (например, SQL2 и SQL3 в случае, если они являются подчиненными, а SQL1 является главным)
это невозможно, если вы не в SQL2016..
Маршрутизация SQL Server 2104 и SQL 2012 только для чтения направляла трафик к первой доступной реплике в списке маршрутизации, если она не была доступна, а затем направляла соединение к следующей реплике в списке маршрутизации.
Когда у вас есть несколько вторичных реплик, доступных для чтения, невозможно распределить нагрузку чтения по этим репликам.
но с 2016 года вы можете настроить балансировку нагрузки для набора реплик только для чтения.
например,
ALTER AVAILABILITY GROUP ag
MODIFY REPLICA ON N’SQL16N1′
WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=((‘SQL16N3’, ‘SQL16N2’), ‘SQL16N1’)));
В приведенном выше списке маршрутизации
Первое входящее соединение только для чтения будет перенаправлено на SQL16N3, второе соединение только на чтение будет перенаправлено на SQL16N2, третье соединение только на чтение будет перенаправлено на SQL16N3, четвертое соединение только на чтение будет перенаправлено на SQL16N2, и скоро
Вам нужно создать слушателя. Это имя виртуальной сети, к которому клиенты могут подключаться для доступа к базе данных в первичной или вторичной реплике группы доступности Always On.
Прочитайте дополнительную информацию о AGs здесь https://msdn.microsoft.com/en-us/library/hh213417.aspx