Настройка маршрутизации только для чтения в группе доступности Always OnConfigure read-only routing for an Always On availability group

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server нетБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Чтобы настроить группу доступности AlwaysOn для поддержки маршрутизации только для чтения в SQL ServerSQL Server, можно использовать процедуру Transact-SQLTransact-SQL или PowerShell.To configure an Always On availability group to support read-only routing in SQL ServerSQL Server, you can use either Transact-SQLTransact-SQL or PowerShell. Маршрутизация только для чтения означает способность SQL ServerSQL Server направлять уточняющие запросы на соединение только для чтения к имеющейся доступной для чтения вторичной реплике AlwaysOn (то есть реплике, настроенной для разрешения рабочих нагрузок только для чтения при выполнении вторичной роли).Read-only routing refers to the ability of SQL ServerSQL Server to route qualifying read-only connection requests to an available Always On readable secondary replica (that is, a replica that is configured to allow read-only workloads when running under the secondary role). Для поддержки маршрутизации только для чтения группа доступности должна иметь прослушиватель группы доступности.To support read-only routing, the availability group must possess an availability group listener. Клиент, запрашивающий данные в режиме только чтения, должен направлять свои запросы к данному прослушивателю, а строки подключения клиента должны определять намерение приложения как «только для чтения».Read-only clients must direct their connection requests to this listener, and the client's connection strings must specify the application intent as "read-only." Это означает, что они должны быть запросами на соединение с правами чтения.That is, they must be read-intent connection requests.

Маршрутизация только для чтения доступна в SQL Server 2016 (13.x)SQL Server 2016 (13.x) и более поздних версиях.Read-only routing is available in SQL Server 2016 (13.x)SQL Server 2016 (13.x) and later.

Примечание

Дополнительные сведения о настройке доступной для чтения вторичной реплики см. в разделе Настройка доступа только для чтения в реплике доступности (SQL Server).For information about how to configure a readable secondary replica, see Configure Read-Only Access on an Availability Replica (SQL Server).

Предварительные требованияPrerequisites

Какие свойства реплики необходимо настроить для поддержки маршрутизации только для чтения?What Replica Properties Do you Need to Configure to Support Read-Only Routing?

  • Для каждой доступной для чтения вторичной реплики, которая поддерживает маршрутизацию только для чтения, необходимо указать URL-адрес маршрутизации только для чтения.For each readable secondary replica that is to support read-only routing, you need to specify a read-only routing URL. Этот URL-адрес задействуется, только если локальная реплика выполняется под вторичной ролью.This URL takes effect only when the local replica is running under the secondary role. URL-адрес маршрутизации только для чтения должен быть указан для каждой реплики отдельно (если для реплики требуется подобная маршрутизация).The read-only routing URL must be specified on a replica-by-replica basis, as needed. Все URL-адреса маршрутизации только для чтения используются для направления запросов на соединение с намерением чтения к определенной доступной для чтения вторичной реплике.Each read-only routing URL is used for routing read-intent connection requests to a specific readable secondary replica. Как правило, каждой доступной для чтения вторичной реплике назначается URL-адрес маршрутизации только для чтения.Typically, every readable secondary replica is assigned a read-only routing URL.

    Сведения о вычислении URL-адреса маршрутизации только для чтения для реплики доступности см. в разделе Вычисление значения read_only_routing_url для AlwaysOnFor information about calculating the read-only routing URL for an availability replica, see Calculating read_only_routing_url for Always On

  • Для каждой реплики доступности, которая должна поддерживать маршрутизацию только для чтения и при этом является первичной, необходимо задать список маршрутизации только для чтения.For each availability replica that you want to support read-only routing when it is the primary replica, you need to specify a read-only routing list. Определенный список маршрутизации только для чтения вступает в силу, только если локальная реплика выполняется под первичной ролью.A given read-only routing list takes effect only when the local replica is running under the primary role. Такой список должен указываться для тех конкретных реплик, для которых он требуется.This list must be specified on a replica-by-replica basis, as needed. Как правило, каждый список маршрутизации только для чтения будет содержать все URL-адреса маршрутизации только для чтения, причем URL-адрес локальной реплики будет идти в конце списка.Typically, each read-only routing list would contain every read-only routing URL, with the URL of the local replica at the end of the list.

    Примечание

    Запросы на подключение для чтения направляются в первую имеющуюся запись из списка маршрутизации только для чтения текущей первичной реплики.Read-intent connection requests are routed to the first available entry on the read-only routing list of the current primary replica. Однако для реплик только для чтения поддерживается балансировка нагрузки.However, load-balancing across read-only replicas is supported. Дополнительные сведения см. в разделе Настройка балансировки нагрузки между репликами только для чтения.For more information, see Configure load-balancing across read-only replicas.

Примечание

Сведения о прослушивателях групп доступности и дополнительные сведения о маршрутизации только для чтения см. в разделе Прослушиватели групп доступности, возможность подключения клиентов и отработка отказа приложений (SQL Server).For information about availability group listeners and more information about read-only routing, see Availability Group Listeners, Client Connectivity, and Application Failover (SQL Server).

PermissionsPermissions

ЗадачаTask РазрешенияPermissions
Настройка реплик при создании группы доступностиTo configure replicas when creating an availability group Требуется членство в фиксированной роли сервера sysadmin и одно из разрешений: CREATE AVAILABILITY GROUP, ALTER ANY AVAILABILITY GROUP или CONTROL SERVER.Requires membership in the sysadmin fixed server role and either CREATE AVAILABILITY GROUP server permission, ALTER ANY AVAILABILITY GROUP permission, or CONTROL SERVER permission.
Изменение реплики доступностиTo modify an availability replica Необходимо разрешение ALTER AVAILABILITY GROUP для группы доступности, разрешение CONTROL AVAILABILITY GROUP, разрешение ALTER ANY AVAILABILITY GROUP или разрешение CONTROL SERVER.Requires ALTER AVAILABILITY GROUP permission on the availability group, CONTROL AVAILABILITY GROUP permission, ALTER ANY AVAILABILITY GROUP permission, or CONTROL SERVER permission.

Использование Transact-SQLUsing Transact-SQL

Настройка списка маршрутизации только для чтенияConfigure a read-only routing list

Выполните действия ниже, чтобы настроить маршрутизацию только для чтения с помощью Transact-SQL.Use the following steps to configure read-only routing using Transact-SQL. Пример кода см. в подразделе Пример (Transact-SQL)далее в этом разделе.For a code example, see Example (Transact-SQL), later in this section.

  1. Подключитесь к экземпляру сервера, на котором находится первичная реплика.Connect to the server instance that hosts the primary replica.

  2. Если вы указываете реплику для новой группы доступности, воспользуйтесь инструкцией CREATE AVAILABILITY GROUPTransact-SQLTransact-SQL .If you are specifying a replica for a new availability group, use the CREATE AVAILABILITY GROUPTransact-SQLTransact-SQL statement. Если вы добавляете или изменяете реплику для существующей группы доступности, воспользуйтесь инструкцией ALTER AVAILABILITY GROUPTransact-SQLTransact-SQL .If you are adding or modifying a replica for an existing availability group, use the ALTER AVAILABILITY GROUPTransact-SQLTransact-SQL statement.

    • Чтобы настроить маршрутизацию только для чтения для вторичной роли, укажите в предложении ADD REPLICA или MODIFY REPLICA WITH параметр SECONDARY_ROLE следующим образом:To configure read-only routing for the secondary role, in the ADD REPLICA or MODIFY REPLICA WITH clause, specify the SECONDARY_ROLE option, as follows:

      SECONDARY_ROLE ( READ_ONLY_ROUTING_URL =' TCP ://system-address:port')SECONDARY_ROLE ( READ_ONLY_ROUTING_URL =' TCP ://system-address:port')

      Существуют следующие параметры URL-адреса маршрутизации только для чтения.The parameters of the read-only routing URL are as follows:

      system-addresssystem-address
      Это строка, такая как адрес системы, полное доменное имя или IP-адрес, однозначно идентифицирующий целевую компьютерную систему.Is a string, such as a system name, a fully qualified domain name, or an IP address, that unambiguously identifies the destination computer system.

      portport
      Номер порта, который используется компонентом ядра СУБД экземпляра SQL ServerSQL Server .Is a port number that is used by the Database Engine of the SQL ServerSQL Server instance.

      Например: SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.contoso.com:1433')For example: SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.contoso.com:1433')

      В предложении MODIFY REPLICA параметр ALLOW_CONNECTIONS не является обязательным, если реплика уже настроена для соединений только для чтения.In a MODIFY REPLICA clause the ALLOW_CONNECTIONS is optional if the replica is already configured to allow read-only connections.

      Дополнительные сведения см. в разделе Вычисление значения read_only_routing_url для AlwaysOn.For more information, see Calculating read_only_routing_url for Always On.

    • Чтобы настроить маршрутизацию только для чтения для первичной роли, в предложении ADD REPLICA или MODIFY REPLICA WITH укажите параметр PRIMARY_ROLE следующим образом:To configure read-only routing for the primary role, in the ADD REPLICA or MODIFY REPLICA WITH clause, specify the PRIMARY_ROLE option, as follows:

      PRIMARY_ROLE ( READ_ONLY_ROUTING_LIST =('server' [ ,...n ] ))PRIMARY_ROLE ( READ_ONLY_ROUTING_LIST =('server' [ ,...n ] ))

      Здесь server идентифицирует экземпляр сервера, на котором размещена вторичная реплика только для чтения в группе доступности.where, server identifies a server instance that hosts a read-only secondary replica in the availability group.

      Например: PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('Server1','Server2'))For example: PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('Server1','Server2'))

      Примечание

      Необходимо настроить URL-адрес маршрутизации только для чтения перед настройкой списка маршрутизации только для чтения.You must set the read-only routing URL before configuring the read-only routing list.

Настройка балансировки нагрузки между репликами только для чтенияConfigure load-balancing across read-only replicas

Начиная с версии SQL Server 2016 (13.x)SQL Server 2016 (13.x)балансировку нагрузки можно настроить в наборе реплик только для чтения.Beginning with SQL Server 2016 (13.x)SQL Server 2016 (13.x), you can configure load-balancing across a set of read-only replicas. Раньше при маршрутизации только для чтения трафик всегда направлялся к первой доступной реплике только для чтения в списке маршрутизации.Previously, read-only routing always directed traffic to the first available replica in the routing list. Чтобы воспользоваться этой функцией, используйте один уровень вложенных скобок вокруг экземпляров сервера READ_ONLY_ROUTING_LIST в команде CREATE AVAILABILITY GROUP или ALTER AVAILABILITY GROUP .To take advantage of this feature, use one level of nested parentheses around the READ_ONLY_ROUTING_LIST server instances in the CREATE AVAILABILITY GROUP or ALTER AVAILABILITY GROUP commands.

Например, в приведенном ниже списке маршрутизации запрос на подключение для чтения равномерно распределяется между двумя репликами только для чтения: Server1 и Server2.For example, the following routing list load balances read-intent connection request across two read-only replicas, Server1 and Server2. Вложенные скобки вокруг этих серверов определяют набор с балансировкой нагрузки.The nested parentheses that surround these servers identify the load-balanced set. Если в этом наборе ни одна из реплик недоступна, будет происходить дальнейшее последовательное подключение к другим репликам в списке маршрутизации только для чтения: Server3 и Server4.If neither replica is available in that set, it will proceed to attempt to sequentially connect to the other replicas, Server3 and Server4, in the read-only routing list.

READ_ONLY_ROUTING_LIST = (('Server1','Server2'), 'Server3', 'Server4')  

Обратите внимание, что каждая запись в списке маршрутизации может быть набором реплик только для чтения с балансировкой нагрузки.Note that each entry in the routing list can itself be a set of load-balanced read-only replicas. Это продемонстрировано в следующем примере.The following example demonstrates this.

READ_ONLY_ROUTING_LIST = (('Server1','Server2'), ('Server3', 'Server4', 'Server5'), 'Server6')  

Поддерживается только один уровень вложенных скобок.Only one level of nested parentheses is supported.

Примеры (Transact-SQL)Example (Transact-SQL)

В следующем примере изменяются две реплики доступности существующей группы доступности AG1 для поддержки маршрутизации только для чтения в том случае, если одна из этих реплик в настоящий момент обладает первичной ролью.The following example modifies two availability replicas of an existing availability group, AG1 to support read-only routing if one of these replicas currently owns the primary role. Чтобы определить экземпляры сервера, на которых размещена реплика доступности, в этом примере указаны имена экземпляров —COMPUTER01 и COMPUTER02.To identify the server instances that host the availability replica, this example specifies the instance names-COMPUTER01 and COMPUTER02.

ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER01' WITH   
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));  
ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER01' WITH   
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.contoso.com:1433'));  
  
ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER02' WITH   
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));  
ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER02' WITH   
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER02.contoso.com:1433'));  
  
ALTER AVAILABILITY GROUP [AG1]   
MODIFY REPLICA ON  
N'COMPUTER01' WITH   
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER02','COMPUTER01')));  
  
ALTER AVAILABILITY GROUP [AG1]   
MODIFY REPLICA ON  
N'COMPUTER02' WITH   
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER01','COMPUTER02')));  
GO  
  

Использование PowerShellUsing PowerShell

Настройка списка маршрутизации только для чтенияConfigure a read-only routing list

Выполните действия ниже, чтобы настроить маршрутизацию только для чтения с помощью PowerShell.Use the following steps to configure read-only routing using PowerShell. Пример кода см. в подразделе Пример (PowerShell)далее в этом разделе.For a code example, see Example (PowerShell), later in this section.

  1. Установите в качестве значения по умолчанию (cd) экземпляр сервера, на котором размещена первичная реплика.Set default (cd) to the server instance that hosts the primary replica.

  2. При добавлении реплики доступности в группу доступности воспользуйтесь командлетом New-SqlAvailabilityReplica .When adding an availability replica to an availability group, use the New-SqlAvailabilityReplica cmdlet. При изменении существующей реплики доступности воспользуйтесь командлетом Set-SqlAvailabilityReplica .When modifying an existing availability replica, use the Set-SqlAvailabilityReplica cmdlet. Соответствующие параметры:The relevant parameters are as follows:

    • Чтобы настроить маршрутизацию только для чтения для вторичной роли, укажите параметр ReadonlyRoutingConnectionUrl"url" .To configure read-only routing for the secondary role, specify the ReadonlyRoutingConnectionUrl"url" parameter.

      Здесь url — это полное доменное имя и порт, которые используются для маршрутизации к реплике соединений только для чтения.where, url is the connectivity fully-qualified domain name (FQDN) and port to use when routing to the replica for read-only connections. Например: -ReadonlyRoutingConnectionUrl "TCP://DBSERVER8.manufacturing.Adventure-Works.com:7024"For example: -ReadonlyRoutingConnectionUrl "TCP://DBSERVER8.manufacturing.Adventure-Works.com:7024"

      Дополнительные сведения см. в разделе Вычисление значения read_only_routing_url для AlwaysOn.For more information, see Calculating read_only_routing_url for Always On.

    • Чтобы настроить доступ соединения для первичной роли, укажите ReadonlyRoutingList"server" [ ,...n ], где server обозначает экземпляр сервера, на котором размещена вторичная реплика только для чтения в группе доступности.To configure connection access for the primary role, specify ReadonlyRoutingList"server" [ ,...n ], where server identifies a server instance that hosts a read-only secondary replica in the availability group. Например: -ReadOnlyRoutingList "SecondaryServer","PrimaryServer"For example: -ReadOnlyRoutingList "SecondaryServer","PrimaryServer"

      Примечание

      Необходимо настроить URL-адрес маршрутизации только для чтения для реплики перед тем, как перейти к настройке ее списка маршрутизации.You must set the read-only routing URL of a replica before configuring its read-only routing list.

    Примечание

    Чтобы просмотреть синтаксис командлета, воспользуйтесь командлетом Get-Help в среде SQL ServerSQL Server PowerShell.To view the syntax of a cmdlet, use the Get-Help cmdlet in the SQL ServerSQL Server PowerShell environment. Дополнительные сведения см. в разделе Get Help SQL Server PowerShell.For more information, see Get Help SQL Server PowerShell.

Настройка и использование поставщика SQL Server PowerShellSet up and use the SQL Server PowerShell provider

Пример (PowerShell)Example (PowerShell)

В следующем примере выполняется настройка первичной реплики и одной вторичной реплики в группе доступности с использованием маршрутизации только для чтения.The following example configures the primary replica and one secondary replica in an availability group for read-only routing. С начала примера каждой реплике присваивается URL-адрес для маршрутизации только для чтения.First, the example assigns a read-only routing URL to each replica. Затем для первичной реплики задается список маршрутизации только для чтения.Then it sets the read-only routing list on the primary replica. Соединения со свойством «ReadOnly» в строке подключения будут перенаправляться на вторичную реплику.Connections with the "ReadOnly" property set in the connection string will be redirected to the secondary replica. Если такая вторичная реплика недоступна для чтения (в соответствии со значением параметра ConnectionModeInSecondaryRole ), подключение направляется обратно в первичную реплику.If this secondary replica is not readable (as determined by the ConnectionModeInSecondaryRole setting), the connection will be directed back to the primary replica.

Set-Location SQLSERVER:\SQL\PrimaryServer\default\AvailabilityGroups\MyAg  
$primaryReplica = Get-Item "AvailabilityReplicas\PrimaryServer"  
$secondaryReplica = Get-Item "AvailabilityReplicas\SecondaryServer"  
  
Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://PrimaryServer.domain.com:1433" -InputObject $primaryReplica  
Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://SecondaryServer.domain.com:1433" -InputObject $secondaryReplica  
Set-SqlAvailabilityReplica -ReadOnlyRoutingList "SecondaryServer","PrimaryServer" -InputObject $primaryReplica  

Дальнейшие действия. После настройки маршрутизации только для чтенияFollow Up: After Configuring Read-Only Routing

Как только текущая первичная реплика и предназначенные для чтения вторичные реплики будут настроены для поддержки маршрутизации только для чтения в обеих ролях, предназначенные для чтения вторичные реплики смогут принимать запросы соединения с намерением чтения от клиентов, которые подключаются через прослушиватель группы доступности.Once the current primary replica and the readable secondary replicas are configured to support read-only routing in both roles, the readable secondary replicas can receive read read-intent connection requests from clients that connect via the availability group listener.

Совет

При использовании bcp Utility или sqlcmd Utilityможно указать доступ только для чтения к любой вторичной реплике, которой разрешен доступ только для чтения. Для этого нужно указать параметр -K ReadOnly .When using the bcp Utility or sqlcmd Utility, you can specify read-only access to any secondary replica that is enabled for read-only access by specifying the -K ReadOnly switch.

Требования и рекомендации для строк подключения клиентаRequirements and Recommendations for Client Connection-Strings

В случае если клиентское приложение использует маршрутизацию только для чтения, его строка подключения должна удовлетворять следующим требованиям.For a client application to use read-only routing, its connection string must satisfy the following requirements:

  • Используйте протокол TCP.Use the TCP protocol.

  • Задайте атрибут/свойство намерения приложения как «только для чтения».Set the application intent attribute/property to readonly.

  • Создайте ссылку на прослушиватель группы доступности, настроенный для поддержки маршрутизации только для чтения.Reference the listener of an availability group that is configured to support read-only routing.

  • Сошлитесь на базу данных в этой группе доступности.Reference a database in that availability group.

Кроме того, рекомендуется, чтобы строки подключения использовали отработку отказа резервных подсетей при сбое, что поддерживает параллельный клиентский поток для каждой реплики в каждой подсети.In addition, we recommend that connection strings enable multi-subnet failover, which supports a parallel client thread for each replica on each subnet. Это позволяет свести к минимуму повторное подключение клиента после отработки отказа.This minimizes client reconnection time after a failover.

Синтаксис строки подключения зависит от поставщика SQL Server, который использует приложение.The syntax for a connection string depends on the SQL Server provider an application is using. Следующий пример строки подключения для поставщика данных .NET Framework 4.0.2 для SQL Server демонстрирует фрагменты строки подключения, которые необходимы и рекомендуются для работы с маршрутизацией только для чтения.The following example connection string for the .NET Framework Data Provider 4.0.2 for SQL Server illustrates the parts of a connection string that are required and recommended to work for read-only routing.

Server=tcp:MyAgListener,1433;Database=Db1;IntegratedSecurity=SSPI;ApplicationIntent=ReadOnly;MultiSubnetFailover=True  

Дополнительные сведения о намерении приложения и маршрутизации только для чтения см. в разделе Прослушиватели групп доступности, возможность подключения клиентов и отработка отказа приложений (SQL Server).For more information about read-only application intent and read-only routing, see Availability Group Listeners, Client Connectivity, and Application Failover (SQL Server).

Маршрутизация только для чтения работает неправильноIf Read-Only Routing is Not Working Correctly

Дополнительные сведения об устранении неполадок с конфигурацией маршрутизации только для чтения см. в разделе Маршрутизация только для чтения работает неправильно.For information about troubleshooting a read-only routing configuration, see Read-Only Routing is Not Working Correctly.

Следующие шагиNext Steps

Просмотр конфигурации маршрутизации только для чтенияTo view read-only routing configurations

Настройка доступа соединения клиентовTo configure client connection access

Использование строк подключения в приложенияхTo use connection strings in applications

БлогиBlogs:

Технические документыWhite papers:

Дополнительное содержимоеAdditional content