Перенаправление подключения с правами на чтение и запись с вторичной на первичную реплику (группы доступности AlwaysOn)Secondary to primary replica read/write connection redirection (Always On Availability Groups)

Этот раздел применим к: ДаSQL Server НетБаза данных SQL Azure НетХранилище данных SQL Azure НетParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

SQL Server 2019SQL Server 2019 CTP 2.0 реализует перенаправление подключения с правами на чтение и запись с вторичной на первичную реплику для групп доступности AlwaysOn.CTP 2.0 introduces secondary to primary replica read/write connection redirection for Always On Availability Groups. Перенаправление подключения с правами на чтение и запись можно использовать на любой платформе операционной системы.Read/write connection redirection is available on any operating system platform. Это позволяет направлять подключения клиентских приложений к первичной реплике независимо от целевого сервера, указанного в строке подключения.It allows client application connections to be directed to the primary replica regardless of the target server specified in the connections string.

Например, строка подключения может направлять к вторичной реплике.For example, the connection string can target a secondary replica. В зависимости от настройки реплики группы доступности и параметров в строке подключения, подключение может автоматически перенаправляться к первичной реплике.Depending on the configuration of the availability group (AG) replica and the settings in the connection string, the connection can be automatically redirected to the primary replica.

Способы примененияUse cases

В версиях до SQL Server 2019SQL Server 2019 прослушиватель группы доступности и соответствующий кластерный ресурс перенаправляют трафик пользователя к первичной реплике, чтобы обеспечить повторное подключение после отработки отказа.Prior to SQL Server 2019SQL Server 2019, the AG listener and the corresponding cluster resource redirect user traffic to the primary replica to ensure reconnection after failover. SQL Server 2019SQL Server 2019 по-прежнему поддерживает функциональные возможности прослушивателя группы доступности и добавляет перенаправление подключения реплики для сценариев, которые не содержат прослушиватель.continues to support the AG listener functionality and adds replica connection redirection for scenarios that cannot include a listener. Пример:For example:

  • Кластерная технология, с которой интегрируются группы доступности SQL Server, не поддерживает такую возможность, как прослушиватель.The cluster technology that SQL Server availability groups integrates with does not offer a listener like capability
  • Конфигурации с несколькими подсетями, например в облаке или с плавающим IP-адресом нескольких подсетей, с Pacemaker, где конфигурации становятся сложными, что может привести к ошибкам и затруднить их исправление из-за нескольких включенных компонентов.A multi-subnet configuration like in the cloud or multi-subnet floating IP with Pacemaker where configurations become complex, prone to errors, and difficult to troubleshoot due to multiple components involved
  • В сценариях с масштабированием для чтения или аварийным восстановлением с типом кластера — NONE, так как отсутствует простой механизм для обеспечения прозрачного повторного подключения при переходе на другой ресурс вручную.Read scale-out, or disaster recovery and cluster type is NONE, because there is no straightforward mechanism to ensure transparent reconnection upon manual failover

ТребованиеRequirement

Чтобы подключение с правами на чтение и запись перенаправить с вторичной реплики:In order for a secondary replica to redirect read/write connection requests:

  • Вторичная реплика должна быть подключена к Интернету.The secondary replica must be online.
  • Спецификация реплики PRIMARY_ROLE должна включать READ_WRITE_ROUTING_URL.The replica spec PRIMARY_ROLE must include READ_WRITE_ROUTING_URL.
  • Строка подключения должна определять ApplicationIntent как ReadWrite, что является значением по умолчанию.The connection string must define ApplicationIntent as ReadWrite- which is the default.

Установка параметра READ_WRITE_ROUTING_URLSet READ_WRITE_ROUTING_URL option

Чтобы настроить перенаправление подключения с правами на чтение и запись, задайте READ_WRITE_ROUTING_URL для первичной реплики при создании группы доступности.To configure read/write connection redirection, set READ_WRITE_ROUTING_URL for the primary replica when you create the AG.

В SQL Server 2019SQL Server 2019 в спецификацию <add_replica_option> был добавлен параметр READ_WRITE_ROUTING_URL.In SQL Server 2019SQL Server 2019, READ_WRITE_ROUTING_URL has been added to the <add_replica_option> specification. См. следующие статьи:See the following topics:

PRIMARY_ROLE(READ_WRITE_ROUTING_URL) не задан (по умолчанию)PRIMARY_ROLE(READ_WRITE_ROUTING_URL) not set (default)

По умолчанию перенаправление подключения с правами на чтение и запись не задано для реплики.By default, read/write replica connection redirection is not set for a replica. Метод обработки запросов на подключение во вторичной реплике зависит от того, разрешает ли вторичная реплика подключения и задан ли в строке подключения параметр ApplicationIntent.The way a secondary replica handles connection requests depends on whether or not the secondary replica is set to allow connections and on the ApplicationIntent setting in the connection string. В следующей таблице показано, как вторичная реплика обрабатывает подключения на основе SECONDARY_ROLE (ALLOW CONNECTIONS = ) и ApplicationIntent.The following table shows how a secondary replica handles connections based on SECONDARY_ROLE (ALLOW CONNECTIONS = ) and ApplicationIntent.

SECONDARY_ROLE (ALLOW CONNECTIONS = NO) SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) SECONDARY_ROLE (ALLOW CONNECTIONS = ALL)
ApplicationIntent=ReadWrite
По умолчаниюDefault
Сбой подключенийConnections fail Сбой подключенийConnections fail Успешные подключенияConnections succeed
Успешные операции чтенияReads succeed
Сбой операций записиWrites fail
ApplicationIntent=ReadOnly Сбой подключенийConnections fail Успешные подключенияConnections succeed Успешные подключенияConnections succeed

В приведенной выше таблице показана реакция на событие по умолчанию, которая совпадает с версиями SQL Server до SQL Server 2019SQL Server 2019.The preceding table shows the default behavior, which is the same as versions of SQL Server before SQL Server 2019SQL Server 2019.

PRIMARY_ROLE(READ_WRITE_ROUTING_URL) заданPRIMARY_ROLE(READ_WRITE_ROUTING_URL) set

После установки перенаправления подключения с правами на чтение и запись реплика обрабатывает запросы на подключение по-другому.After you set read/write connection redirection, the way the replica handles connection requests behaves differently. Реакция на событие подключения по-прежнему зависит от параметров SECONDARY_ROLE (ALLOW CONNECTIONS = ) и ApplicationIntent.The connection behavior still depends on SECONDARY_ROLE (ALLOW CONNECTIONS = ) and ApplicationIntent setting. В следующей таблице показано, как вторичная реплика с заданным параметром READ_WRITE_ROUTING обрабатывает подключения на основе SECONDARY_ROLE (ALLOW CONNECTIONS = ) и ApplicationIntent.The following table shows how a secondary replica with READ_WRITE_ROUTING set handles connections based on SECONDARY_ROLE (ALLOW CONNECTIONS = ) and ApplicationIntent.

SECONDARY_ROLE (ALLOW CONNECTIONS = NO) SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) SECONDARY_ROLE (ALLOW CONNECTIONS = ALL)
ApplicationIntent=ReadWrite
По умолчаниюDefault
Сбой подключенийConnections fail Сбой подключенийConnections fail Перенаправление подключений к первичной репликеConnections route to primary
ApplicationIntent=ReadOnly Сбой подключенийConnections fail Успешные подключенияConnections succeed Успешные подключенияConnections succeed

В приведенной выше таблице показано, что когда для первичной реплики задан параметр READ_WRITE_ROUTING_URL, то вторичная реплика будет перенаправлять подключения к первичной реплике, если задан параметр SECONDARY_ROLE (ALLOW CONNECTIONS = ALL) и подключение указывает ReadWrite.The preceding table shows that when the primary replica has READ_WRITE_ROUTING_URL set, the secondary replica will redirect connections to the primary replica when SECONDARY_ROLE (ALLOW CONNECTIONS = ALL), and the connection specifies ReadWrite.

ПримерExample

В этом примере группа доступности содержит три реплики:In this example, an availability group has three replicas:

  • Первичная реплика на компьютере COMPUTER01.A primary replica on COMPUTER01
  • Синхронная вторичная реплика на компьютере COMPUTER02.A synchronous secondary replica on COMPUTER02
  • Синхронная вторичная реплика на компьютере COMPUTER03.A synchronous secondary replica on COMPUTER03

На следующем рисунке представлена группа доступности.The following picture represents the availability group.

Исходная группа доступности

Следующий сценарий Transact-SQL создает группу доступности.The following transact-SQL script creates this AG. В этом примере для каждой реплики указан READ_WRITE_ROUTING_URL.In this example, Each replica specifies the 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 = SYNCHRONOUS_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>
    • Домен и домен верхнего уровня полного доменного имени.Domain and top-level domain of the fully qualified domain name. Например, corporation.com.For example, corporation.com.

Реакции на событие подключенияConnection behaviors

На следующей схеме клиентское приложение подключается к компьютеру COMPUTER02 с заданным параметром ApplicationIntent=ReadWrite.In the following diagram, a client application connects to COMPUTER02, with ApplicationIntent=ReadWrite. Подключение перенаправляется к первичной реплике.The connection is redirected to the primary replica.

Исходная группа доступности

Вторичная реплика перенаправляет вызовы чтения и записи к первичной реплике.The secondary replica redirects read/write calls to the primary replica. Подключение на чтения и запись к одной из реплик будет перенаправлено к первичной реплике.A read write connection to either replica will redirect to the primary replica.

На следующей схеме для первичной реплики выполнена отработка отказа вручную на компьютер COMPUTER02.In the following diagram, the primary replica has been manually failed over to COMPUTER02. Клиентское приложение подключается к компьютеру COMPUTER01 с заданным параметром ApplicationIntent=ReadWrite.A client application connects to COMPUTER01, with ApplicationIntent=ReadWrite. Подключение перенаправляется к первичной реплике.The connection is redirected to the primary replica.

Исходная группа доступности

Экземпляр SQL Server в автономном режимеSQL Server instance offline

Если экземпляр SQL Server, указанный в строке подключения, недоступен (простой), то произойдет сбой подключения, независимо от роли реплики на целевом сервере.If the instance of SQL Server specified in the connection string is not available (has an outage), the connection will fail regardless of the role that the replica on the target server plays. Чтобы избежать длительного простоя приложения, в строке подключения нужно настроить альтернативного партнера для отработки отказа (FailoverPartner).To avoid prolonged application downtime, configure an alternative FailoverPartner in the connection string. Приложение должно реализовать логику повторных попыток для охвата первичных и вторичных реплик, не подключенных к сети, во время фактической отработки отказа.The application has to implement retry logic to accommodate primary and secondary replicas not being online during the actual failover. Сведения о строках подключения см. в статье о свойстве SqlConnection.ConnectionString.For information about connection strings, see SqlConnection.ConnectionString Property.

См. также:See Also

Обзор групп доступности AlwaysOn (SQL Server)Overview of Always On Availability Groups (SQL Server)

Сведения о доступе клиентского подключения к репликам доступности (SQL Server)About Client Connection Access to Availability Replicas (SQL Server)

Прослушиватели групп доступности, возможность подключения клиентов и отработка отказа приложений (SQL Server)Availability Group Listeners, Client Connectivity, and Application Failover (SQL Server)