Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Чтобы настроить группу доступности AlwaysOn для поддержки маршрутизации только для чтения в SQL Server 2014, можно использовать Transact-SQL или PowerShell. Маршрутизация только для чтения относится к возможности SQL Server направлять соответствующие запросы на подключение только для чтения к доступной вторичной реплике AlwaysOn (т. е. реплика, настроенная для разрешения рабочих нагрузок только для чтения при выполнении под вторичной ролью). Для поддержки маршрутизации только для чтения группа доступности должна иметь прослушиватель группы доступности. Клиенты, доступные только для чтения, должны направлять запросы на подключение к этому прослушивателю, а строки подключения клиента должны указывать намерение приложения как "только для чтения". То есть они должны быть запросами на подключение с намерением чтения.
Замечание
Смотрите раздел "Конфигурация доступа Read-Only на реплике доступности (SQL Server) для получения сведений о том, как настроить читаемую вторичную копию.
Замечание
Настройка маршрутизации только для чтения не поддерживается SQL Server Management Studio.
Перед началом работы
Предпосылки
Группа доступности должна иметь прослушиватель группы доступности. Дополнительные сведения см. в разделе Создание или настройка прослушивателя группы доступности (SQL Server).
Одна или несколько реплик доступности должны быть настроены для приема запросов только для чтения во вторичной роли (т. е. для читаемых вторичных реплик (AlwaysOn%20Availability%20Groups).md)). Дополнительные сведения см. в документе "Настройка Read-Only доступа к реплике доступности (SQL Server)".
Необходимо подключиться к экземпляру сервера, на котором размещена текущая первичная реплика.
Какие свойства реплики необходимо настроить для поддержки маршрутизации Read-Only?
Для каждой доступной для чтения вторичной реплики, поддерживающей маршрутизацию только для чтения, необходимо указать URL-адрес маршрутизации только для чтения. Этот URL-адрес действует только в том случае, если локальная реплика работает в вторичной роли. URL-адрес маршрутизации только для чтения должен быть указан для каждой реплики по мере необходимости. Каждый URL-адрес маршрутизации только для чтения используется для маршрутизации запросов на подключение с намерением чтения к определенной вторичной реплике, доступной для чтения. Как правило, каждой вторичной реплике, доступной для чтения, назначается URL-адрес маршрутизации, предназначенный только для чтения.
Сведения о вычислении URL-адреса маршрутизации только для чтения для реплики доступности см. в разделе "Вычисление read_only_routing_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
Настройка маршрутизации только для чтения
Замечание
Пример кода см. в разделе Example (Transact-SQL), далее в этом разделе.
Подключитесь к экземпляру сервера, на котором находится первичная реплика.
Если вы указываете реплику для новой группы доступности, используйте инструкцию CREATE AVAILABILITY GROUPTransact-SQL. Если вы добавляете или изменяете реплику для существующей группы доступности, используйте инструкцию ALTER AVAILABILITY GROUPTransact-SQL.
Чтобы настроить маршрутизацию только для чтения для вторичной роли, в предложении ADD REPLICA или MODIFY REPLICA WITH укажите параметр SECONDARY_ROLE следующим образом:
SECONDARY_ROLE ( READ_ONLY_ROUTING_URL ='TCP://
system-address:port')Параметры URL-адреса маршрутизации только для чтения приведены следующим образом:
системный адрес
Это строка, такая как адрес системы, полное доменное имя или IP-адрес, однозначно идентифицирующий целевую компьютерную систему.порт
Номер порта, используемый ядром СУБД экземпляра SQL Server.Например:
SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.contoso.com:1433')В предложении MODIFY REPLICA параметр ALLOW_CONNECTIONS является необязательным, если реплика уже настроена для разрешения подключений только для чтения.
Дополнительные сведения см. в разделе "Вычисление read_only_routing_url для AlwaysOn".
Чтобы настроить маршрутизацию только для чтения для основной роли, в предложении ADD REPLICA или MODIFY REPLICA WITH укажите параметр PRIMARY_ROLE следующим образом:
PRIMARY_ROLE ( READ_ONLY_ROUTING_LIST =('
server' [ ,... n ] ))где сервер обозначает экземпляр сервера, на котором размещена вторичная реплика только для чтения в группе обеспечения доступности.
Например:
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) далее в этом разделе.
Задайте экземпляр сервера, на котором размещена первичная реплика, в качестве значения по умолчанию (
cd).При добавлении реплики доступности в группу доступности используйте командлет
New-SqlAvailabilityReplica. При изменении реплики доступности, уже существующей, используйте командлетSet-SqlAvailabilityReplica. Соответствующие параметры приведены следующим образом:Чтобы настроить маршрутизацию только для чтения для вторичной роли, укажите параметр ReadonlyRoutingConnectionUrl"
url.где URL-адрес — это полное доменное имя подключения (FQDN) и порт, используемый при маршрутизации в реплику для подключений только для чтения. Например:
-ReadonlyRoutingConnectionUrl "TCP://DBSERVER8.manufacturing.Adventure-Works.com:7024"Дополнительные сведения см. в разделе "Вычисление read_only_routing_url для AlwaysOn".
Чтобы настроить доступ к подключению для первичной роли, укажите ReadonlyRoutingList"
server" [ ,... n ], где сервер определяет экземпляр сервера, на котором размещена вторичная реплика только для чтения в группе доступности. Например:-ReadOnlyRoutingList "SecondaryServer","PrimaryServer"Замечание
Перед настройкой списка маршрутизации только для чтения необходимо сначала задать URL-адрес маршрутизации только для чтения для реплики.
Замечание
Чтобы просмотреть синтаксис командлета, в среде SQL Server PowerShell используйте командлет
Get-Help. Дополнительные сведения см. в разделе Get Help SQL Server PowerShell.
Чтобы настроить и использовать провайдер PowerShell для SQL Server, см. SQL Server PowerShell Provider и Get Help 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
Дальнейшие действия. После настройки маршрутизации Read-Only
После настройки текущей первичной реплики и вторичных реплик для поддержки маршрутизации только для чтения в обоих режимах, доступные для чтения вторичные реплики могут получать запросы на подключение с целью чтения от клиентов, которые подключаются через слушатель группы доступности.
Подсказка
При использовании служебной программы bcp или программы sqlcmd можно указать доступ только для чтения к любой вторичной реплике, которая включена для доступа только для чтения, указав -K ReadOnly переключатель.
Требования и рекомендации для клиента Connection-Strings
Чтобы клиентское приложение использовало маршрутизацию только для чтения, его строка подключения должна соответствовать следующим требованиям:
Используйте протокол TCP.
Задайте для атрибута или свойства намерения приложения значение readonly.
Укажите прослушиватель группы доступности, настроенной для поддержки маршрутизации только для чтения.
Ссылка на базу данных в этой группе доступности.
Кроме того, мы рекомендуем, чтобы строки подключения поддерживали отказоустойчивость нескольких подсетей, обеспечивающую параллельный поток клиента для каждой реплики в каждой подсети. Это сводит к минимуму время повторного подключения клиента после переключения на резервный сервер.
Синтаксис строки подключения зависит от поставщика SQL Server, используемого приложением. В следующем примере строки подключения для поставщика данных .NET Framework 4.0.2 для SQL Server показаны части строки подключения, необходимые и рекомендуемые для работы с маршрутизацией только для чтения.
Server=tcp:MyAgListener,1433;Database=Db1;IntegratedSecurity=SSPI;ApplicationIntent=ReadOnly;MultiSubnetFailover=True
Дополнительные сведения о режиме работы приложения только для чтения и маршрутизации только для чтения см. в справочных материалах о слушателях групп доступности, подключении клиентов и отказоустойчивости приложений (SQL Server).
Если маршрутизация Read-Only работает неправильно
Сведения об устранении неполадок конфигурации маршрутизации только для чтения см. в разделе Read-Only Маршрутизация работает неправильно.
Связанные задачи
Просмотр конфигураций маршрутизации только для чтения
sys.availability_replicas (Transact-SQL) (столбец read_only_routing_url )
Настройка доступа к клиентскому подключению
Создание или настройка прослушивателя группы доступности (SQL Server)
Настройка доступа только для чтения в реплике доступности (SQL Server)
Использование строк подключения в приложениях
Связанные материалы
Блоги
Вычисление read_only_routing_url для AlwaysOn
Блоги команды SQL Server AlwaysOn: официальный блог группы SQL Server AlwaysOn
Белые документы:
См. также
Общие сведения о группах доступности AlwaysOn (SQL Server)
Общие сведения о группах доступности AlwaysOn (SQL Server)
Активные вторичные реплики: доступные для чтения вторичные реплики (группы доступности AlwaysOn)
О подключении клиента к репликам доступности (SQL Server)
Слушатели групп доступности, подключение клиентов и отказоустойчивость приложений (SQL Server)