Перенаправление подключения с правами на чтение и запись с вторичной на первичную реплику (группы доступности AlwaysOn)
Область применения: SQL Server 2019 (15.x)
SQL Server 2019 (15.x) CTP 2.0 представляет вторичную для перенаправления подключения для первичной реплики чтения и записи для групп доступности AlwaysOn. Перенаправление подключения с правами на чтение и запись можно использовать на любой платформе операционной системы. Это позволяет направлять подключения клиентских приложений к первичной реплике независимо от целевого сервера, указанного в строке подключения.
Например, строка подключения может направлять к вторичной реплике. В зависимости от настройки реплики группы доступности и параметров в строке подключения, подключение может автоматически перенаправляться к первичной реплике.
Случаи использования
До SQL Server 2019 (15.x) прослушиватель группы доступности и соответствующий трафик ресурса кластера перенаправляются на основную реплику, чтобы обеспечить повторное подключение после отработки отказа. SQL Server 2019 (15.x) продолжает поддерживать функцию прослушивателя группы доступности и добавляет перенаправление подключений реплики для сценариев, которые не могут включать прослушиватель. Например:
- Кластерная технология, с которой интегрируются группы доступности SQL Server, не поддерживает такую возможность, как прослушиватель.
- Конфигурации с несколькими подсетями, например в облаке или с плавающим IP-адресом нескольких подсетей, с Pacemaker, где конфигурации становятся сложными, что может привести к ошибкам и затруднить их исправление из-за нескольких включенных компонентов.
- В сценариях с масштабированием для чтения или аварийным восстановлением с типом кластера —
NONE
, так как отсутствует простой механизм для обеспечения прозрачного повторного подключения при переходе на другой ресурс вручную.
Требование
Чтобы подключение с правами на чтение и запись перенаправить с вторичной реплики:
- Вторичная реплика должна быть подключена к Интернету.
- Спецификация реплики
PRIMARY_ROLE
должна включатьREAD_WRITE_ROUTING_URL
. - Строка подключения должна иметь свойство
ReadWrite
путем указания в качествеApplicationIntent
значенияReadWrite
либо путем опускания параметраApplicationIntent
и использования значения по умолчанию (ReadWrite
).
Установка параметра READ_WRITE_ROUTING_URL
Чтобы настроить перенаправление подключения с правами на чтение и запись, задайте READ_WRITE_ROUTING_URL
для первичной реплики при создании группы доступности.
В SQL Server 2019 (15.x) READ_WRITE_ROUTING_URL
добавлена в спецификацию <add_replica_option>
. См. следующие разделы:
PRIMARY_ROLE(READ_WRITE_ROUTING_URL) не задан (по умолчанию)
По умолчанию перенаправление подключения с правами на чтение и запись не задано для реплики. Метод обработки запросов на подключение во вторичной реплике зависит от того, разрешает ли вторичная реплика подключения и задан ли в строке подключения параметр ApplicationIntent
. В следующей таблице показано, как вторичная реплика обрабатывает подключения на основе SECONDARY_ROLE (ALLOW CONNECTIONS = )
и ApplicationIntent
.
Значение ApplicationIntent |
SECONDARY_ROLE (ALLOW CONNECTIONS = NO) |
SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) |
SECONDARY_ROLE (ALLOW CONNECTIONS = ALL) |
---|---|---|---|
ApplicationIntent=ReadWrite По умолчанию. |
Сбой подключений | Сбой подключений | Успешные подключения Успешные операции чтения Сбой операций записи |
ApplicationIntent=ReadOnly |
Сбой подключений | Успешные подключения | Успешные подключения |
В предыдущей таблице показано поведение по умолчанию, которое совпадает с версиями SQL Server до SQL Server 2019 (15.x).
PRIMARY_ROLE(READ_WRITE_ROUTING_URL) задан
После установки перенаправления подключения с правами на чтение и запись реплика обрабатывает запросы на подключение по-другому. Реакция на событие подключения по-прежнему зависит от параметров SECONDARY_ROLE (ALLOW CONNECTIONS = )
и ApplicationIntent
. В следующей таблице показано, как вторичная реплика с заданным параметром READ_WRITE_ROUTING
обрабатывает подключения на основе SECONDARY_ROLE (ALLOW CONNECTIONS = )
и ApplicationIntent
.
Значение ApplicationIntent |
SECONDARY_ROLE (ALLOW CONNECTIONS = NO) |
SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) |
SECONDARY_ROLE (ALLOW CONNECTIONS = ALL) |
---|---|---|---|
ApplicationIntent=ReadWrite По умолчанию. |
Сбой подключений | Сбой подключений | Перенаправление подключений к первичной реплике |
ApplicationIntent=ReadOnly |
Сбой подключений | Успешные подключения | Успешные подключения |
В приведенной выше таблице показано, что когда для первичной реплики задан параметр READ_WRITE_ROUTING_URL
, то вторичная реплика будет перенаправлять подключения к первичной реплике, если задан параметр SECONDARY_ROLE (ALLOW CONNECTIONS = ALL)
и подключение указывает ReadWrite
.
Пример
В этом примере группа доступности содержит три реплики:
- Первичная реплика на компьютере COMPUTER01.
- Синхронная вторичная реплика на компьютере COMPUTER02.
- Асинхронная вторичная реплика на COMPUTER03
На следующем рисунке представлена группа доступности.
Следующий скрипт Transact-SQL создает эту группу доступности. В этом примере для каждой реплики указан READ_WRITE_ROUTING_URL
.
CREATE AVAILABILITY GROUP MyAg
WITH ( CLUSTER_TYPE = NONE )
FOR
DATABASE [<Database1>]
REPLICA ON
'COMPUTER01' WITH
(
ENDPOINT_URL = 'TCP://COMPUTER01.<domain>.<tld>:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL,
READ_ONLY_ROUTING_URL = 'TCP://COMPUTER01.<domain>.<tld>:1433' ),
PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = ('COMPUTER02', 'COMPUTER03'),
READ_WRITE_ROUTING_URL = 'TCP://COMPUTER01.<domain>.<tld>:1433' ),
SESSION_TIMEOUT = 10
),
'COMPUTER02' WITH
(
ENDPOINT_URL = 'TCP://COMPUTER02.<domain>.<tld>:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL,
READ_ONLY_ROUTING_URL = 'TCP://COMPUTER02.<domain>.<tld>:1433' ),
PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = ('COMPUTER01', 'COMPUTER03'),
READ_WRITE_ROUTING_URL = 'TCP://COMPUTER02.<domain>.<tld>:1433' ),
SESSION_TIMEOUT = 10
),
'COMPUTER03' WITH
(
ENDPOINT_URL = 'TCP://COMPUTER03.<domain>.<tld>:5022',
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL,
READ_ONLY_ROUTING_URL = 'TCP://COMPUTER03.<domain>.<tld>:1433' ),
PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = ('COMPUTER01', 'COMPUTER02'),
READ_WRITE_ROUTING_URL = 'TCP://COMPUTER03.<domain>.<tld>:1433' ),
SESSION_TIMEOUT = 10
);
GO
<domain>.<tld>
- Домен и домен верхнего уровня полного доменного имени. Например,
corporation.com
.
- Домен и домен верхнего уровня полного доменного имени. Например,
Реакции на событие подключения
На следующей схеме клиентское приложение подключается к компьютеру COMPUTER02 с заданным параметром ApplicationIntent=ReadWrite
. Подключение перенаправляется к первичной реплике.
Вторичная реплика перенаправляет вызовы чтения и записи к первичной реплике. Подключение на чтения и запись к одной из реплик будет перенаправлено к первичной реплике.
На следующей схеме для первичной реплики выполнена отработка отказа вручную на компьютер COMPUTER02. Клиентское приложение подключается к компьютеру COMPUTER01 с заданным параметром ApplicationIntent=ReadWrite
. Подключение перенаправляется к первичной реплике.
См. также
Обзор групп доступности Always On (SQL Server)
Сведения о доступе клиента к репликам доступности (SQL Server)