Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: SQL Server 2019 (15.x) и более поздних версий
SQL Server 2019 (15.x) вводит перенаправление подключения для чтения/записи с вторичной на первичную реплику в группах доступности Always On. Перенаправление подключения с правами на чтение и запись можно использовать на любой платформе операционной системы. Это позволяет направлять подключения клиентских приложений к первичной реплике независимо от целевого сервера, указанного в строке подключения.
Например, строка подключения может направлять к вторичной реплике. В зависимости от настройки реплики группы доступности и параметров в строке подключения, подключение может автоматически перенаправляться к первичной реплике.
Случаи использования
До 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.
Возврат к поведению маршрутизации по умолчанию
Начиная с SQL Server 2025 (17.x), можно указать NONE как READ_WRITE_ROUTING_URL или READ_ONLY_ROUTING_URL место назначения, чтобы отменить указанную маршрутизацию для реплики доступности и направить трафик в соответствии с поведением по умолчанию. Дополнительные сведения см. в команде ALTER AVAILABILITY GROUP Transact-SQL.
Пример
В этом примере группа доступности содержит три реплики:
- Первичная реплика на компьютере 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)