Поделиться через


Настройка маршрутизации только для чтения в группе доступности (SQL Server)

Чтобы настроить группу доступности AlwaysOn для поддержки маршрутизации только для чтения в SQL Server 2012, можно использовать процедуру Transact-SQL или PowerShell. Маршрутизация только для чтения означает способность SQL Server направлять уточняющие запросы на соединение только для чтения к имеющейся доступной для чтения вторичной реплике AlwaysOn (то есть реплике, настроенной для разрешения рабочей нагрузки только для чтения при выполнении вторичной роли). Для поддержки маршрутизации только для чтения группа доступности должна иметь прослушиватель группы доступности. Клиент, запрашивающий данные в режиме только чтения, должен направлять свои запросы к данному прослушивателю, а строки подключения клиента должны определять намерение приложения как «только для чтения». Это означает, что они должны быть запросами на соединение с намерением чтения.

ПримечаниеПримечание

Дополнительные сведения о настройке доступной для чтения вторичной реплики см. в разделе Настройка доступа только для чтения в реплике доступности (SQL Server).

  • Перед началом работы

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

    Какие свойства реплики необходимо настроить для поддержки маршрутизации только для чтения?

    Безопасность

  • Настройка маршрутизации только для чтения с помощью:

    Transact-SQL

    PowerShell

    ПримечаниеПримечание

    Настройка маршрутизации только для чтения не поддерживается в среде Среда SQL Server Management Studio.

  • Дальнейшие действия. После настройки маршрутизации только для чтения

  • Связанные задачи

  • См. также

Перед началом работы

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

Какие свойства реплики необходимо настроить для поддержки маршрутизации только для чтения?

  • Для каждой доступной для чтения вторичной реплики, которая поддерживает маршрутизацию только для чтения, необходимо указать URL-адрес маршрутизации только для чтения. Этот URL-адрес задействуется, только если локальная реплика выполняется под вторичной ролью. URL-адрес маршрутизации только для чтения должен быть указан для каждой реплики отдельно (если для реплики требуется подобная маршрутизация). Все URL-адреса маршрутизации только для чтения используются для направления запросов на соединение с намерением чтения к определенной доступной для чтения вторичной реплике. Как правило, каждой доступной для чтения вторичной реплике назначается URL-адрес маршрутизации только для чтения.

    Дополнительные сведения о вычислении URL-адреса маршрутизации только для чтения для реплики доступности см. в разделе Вычисление для AlwaysOn.

  • Для каждой реплики доступности, которая должна поддерживать маршрутизацию только для чтения и при этом являющейся первичной, необходимо задать список маршрутизации только для чтения. Определенный список маршрутизации только для чтения вступает в силу, только если локальная реплика выполняется под первичной ролью. Такой список должен указываться для тех конкретных реплик, для которых он требуется. Как правило, каждый список маршрутизации только для чтения будет содержать все URL-адреса маршрутизации только для чтения, причем URL-адрес локальной реплики будет идти в конце списка.

    ПримечаниеПримечание

    Запросы на соединение с намерением чтения направляются в первую имеющуюся вторичную реплику доступную для чтения из списка маршрутизации только для чтения текущей первичной реплики. Балансировка нагрузки отсутствует.

ПримечаниеПримечание

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

Безопасность

Разрешения

Задача

Разрешения

Настройка реплик при создании группы доступности

Требуется членство в предопределенной роли сервера sysadmin и разрешение сервера CREATE AVAILABILITY GROUP, ALTER ANY AVAILABILITY GROUP или CONTROL SERVER.

Изменение реплики доступности

Необходимо разрешение ALTER AVAILABILITY GROUP для группы доступности, разрешение CONTROL AVAILABILITY GROUP, разрешение ALTER ANY AVAILABILITY GROUP или разрешение CONTROL SERVER.

Значок стрелки, используемый со ссылкой «В начало»[В начало]

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

Настройка маршрутизации только для чтения

ПримечаниеПримечание

Пример кода см. в подразделе Пример (Transact-SQL) далее в этом разделе.

  1. Подключитесь к экземпляру сервера, на котором находится первичная реплика.

  2. Если вы указываете реплику для новой группы доступности, воспользуйтесь инструкцией CREATE AVAILABILITY GROUP Transact-SQL. При добавлении или изменении реплики для существующей группы доступности воспользуйтесь инструкцией ALTER AVAILABILITY GROUP Transact-SQL.

    • Чтобы настроить маршрутизацию только для чтения для вторичной роли, укажите в предложении ADD REPLICA или MODIFY REPLICA WITH параметр SECONDARY_ROLE следующим образом:

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

      Существуют следующие параметры URL-адреса маршрутизации только для чтения.

      • system-address
        Строка, такая как адрес системы, полное доменное имя или IP-адрес, однозначно идентифицирующая целевую компьютерную систему.

      • port
        Номер порта, который используется компонентом ядра СУБД экземпляра SQL Server.

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

      В предложении MODIFY REPLICA параметр ALLOW_CONNECTIONS не является обязательным, если реплика уже настроена для соединений только для чтения.

      Дополнительные сведения см. в разделе Вычисления для AlwaysOn.

    • Чтобы настроить маршрутизацию только для чтения для первичной роли, в предложении ADD REPLICA или MODIFY REPLICA WITH укажите параметр PRIMARY_ROLE следующим образом:

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

      Здесь server идентифицирует экземпляр сервера, на котором размещена вторичная реплика только для чтения в группе доступности.

      Пример: PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('Server1','Server2'))

      ПримечаниеПримечание

      Необходимо настроить URL-адрес маршрутизации только для чтения перед настройкой списка маршрутизации только для чтения.

Пример (Transact-SQL)

В следующем примере изменяются две реплики доступности существующей группы доступности AG1 для поддержки маршрутизации только для чтения в том случае, если одна из этих реплик в настоящий момент обладает первичной ролью. Чтобы определить экземпляры сервера, на которых размещена реплика доступности, в этом примере указаны имена экземпляров — COMPUTER01 и 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

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

Настройка маршрутизации только для чтения

ПримечаниеПримечание

Пример кода см. в подразделе Пример (PowerShell) далее в этом разделе.

  1. Установите значение по умолчанию (cd) равным серверу экземпляра, на котором размещена первичная реплика.

  2. При добавлении реплики доступности в группу доступности воспользуйтесь командлетом New-SqlAvailabilityReplica. При изменении существующей реплики доступности воспользуйтесь командлетом Set-SqlAvailabilityReplica. Соответствующие параметры:

    • Чтобы настроить маршрутизацию только для чтения для вторичной роли, укажите параметр ReadonlyRoutingConnectionUrl «url».

      Здесь url — это полное доменное имя и порт, которые используются для маршрутизации к реплике соединений только для чтения. Пример: -ReadonlyRoutingConnectionUrl "TCP://DBSERVER8.manufacturing.Adventure-Works.com:7024".

      Дополнительные сведения см. в разделе Вычисления для AlwaysOn.

    • Чтобы настроить доступ соединения для первичной роли, укажите ReadonlyRoutingList «server» [ ,...n ], где server обозначает экземпляр сервера, на котором размещена вторичная реплика только для чтения в группе доступности. Пример: -ReadOnlyRoutingList "SecondaryServer","PrimaryServer".

      ПримечаниеПримечание

      Необходимо настроить URL-адрес маршрутизации только для чтения для реплики перед тем, как перейти к настройке ее списка маршрутизации.

    ПримечаниеПримечание

    Чтобы просмотреть синтаксис командлета, воспользуйтесь командлетом Get-Help в среде SQL Server PowerShell. Дополнительные сведения см. в разделе Получение справок по SQL Server PowerShell.

Настройка и использование поставщика SQL Server PowerShell

Пример (PowerShell)

В следующем примере выполняется настройка первичной реплики и одной вторичной реплики в группе доступности с использованием маршрутизации только для чтения. Сначала в примере каждой реплике присваивается URL-адрес для маршрутизации только для чтения. Затем для первичной реплики задается список маршрутизации только для чтения. Соединения со свойством «ReadOnly» в строке подключения будут перенаправляться на вторичную реплику. Если такая вторичная реплика недоступна для чтения (в соответствии со значением параметра ConnectionModeInSecondaryRole), соединение направляется обратно в первичную реплику.

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

Значок стрелки, используемый со ссылкой «В начало»[В начало]

Дальнейшие действия. После настройки маршрутизации только для чтения

Как только текущая первичная реплика и предназначенные для чтения вторичные реплики будут настроены для поддержки маршрутизации только для чтения в обеих ролях, предназначенные для чтения вторичные реплики смогут принимать запросы соединения с намерением чтения от клиентов, которые подключаются через прослушиватель группы доступности.

СоветСовет

При использовании Программа bcp или Программа sqlcmd можно указать доступ только для чтения к любой вторичной реплике, которой разрешен доступ только для чтения. Для этого нужно указать параметр -K ReadOnly.

Требования и рекомендации для строк подключения клиента

В случае если клиентское приложение использует маршрутизацию только для чтения, его строка подключения должна удовлетворять следующим требованиям.

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

  • Задайте атрибут/свойство намерения приложения как «только для чтения».

  • Создайте ссылку на прослушиватель группы доступности, настроенный для поддержки маршрутизации только для чтения.

  • Сошлитесь на базу данных в этой группе доступности.

Кроме того, рекомендуется, чтобы строки подключения использовали отработку отказа резервных подсетей при сбое, что поддерживает параллельный клиентский поток для каждой реплики в каждой подсети. Это позволяет свести к минимуму повторное подключение клиента после отработки отказа.

Синтаксис строки подключения зависит от поставщика SQL Server, который использует приложение. Следующий пример строки подключения для поставщика данных .NET Framework 4.0.2 для SQL Server демонстрирует фрагменты строки подключения, которые необходимы и рекомендуются для работы с маршрутизацией только для чтения.

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

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

Маршрутизация только для чтения работает неправильно

Дополнительные сведения об устранении неполадок с конфигурацией маршрутизации только для чтения см. в разделе Маршрутизация только для чтения работает неправильно.

Связанные задачи

Просмотр конфигурации маршрутизации только для чтения

Настройка доступа соединения клиентов

Использование строк подключения в приложениях

Значок стрелки, используемый со ссылкой «В начало»[В начало]

См. также

Значок стрелки, используемый со ссылкой «В начало»[В начало]

См. также

Основные понятия

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

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

Активные вторичные реплики: Доступ к вторичным репликам только для чтения (группы доступности AlwaysOn)

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

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