Перенаправление подключения с правами на чтение и запись с вторичной на первичную реплику (группы доступности 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

На следующем рисунке представлена группа доступности.

Availability group with primary, secondary, and asynchronous secondary

Следующий скрипт 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. Подключение перенаправляется к первичной реплике.

Connection to computer 2 is re-directed to the primary replica

Вторичная реплика перенаправляет вызовы чтения и записи к первичной реплике. Подключение на чтения и запись к одной из реплик будет перенаправлено к первичной реплике.

На следующей схеме для первичной реплики выполнена отработка отказа вручную на компьютер COMPUTER02. Клиентское приложение подключается к компьютеру COMPUTER01 с заданным параметром ApplicationIntent=ReadWrite. Подключение перенаправляется к первичной реплике.

Connection redirected to new primary replica on computer2

См. также

Обзор групп доступности Always On (SQL Server)

Сведения о доступе клиента Подключение к репликам доступности (SQL Server)

Прослушиватели групп доступности, возможность подключения клиентов и отработка отказа приложений (SQL Server)