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

В этом разделе содержатся сведения о клиентских компонентах Группы доступности AlwaysOn и функциях переключения приложений.

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

В большинстве стандартных конфигураций прослушивателей первый прослушиватель группы доступности можно создать просто с помощью инструкции Transact-SQL или командлетов PowerShell. Дополнительные сведения см. в подразделе Связанные задачи далее в этом разделе.

В этом разделе.

  • Прослушиватели группы доступности

  • Соединение с первичной репликой с помощью прослушивателя

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

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

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

  • Обход прослушивателей группы доступности

  • Поведение клиентских подключений при отработке отказа

  • Поддержка отказоустойчивых кластеров с несколькими подсетями группы доступности

  • Прослушиватели группы доступности и SSL-сертификаты

  • Прослушиватели группы доступности и имена участников-служб сервера (SPN)

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

  • См. также

Прослушиватели группы доступности

Можно обеспечить клиентское соединение с базой данных определенной группы доступности, создав прослушиватель группы доступности. Прослушиватель группы доступности ― это виртуальное сетевое имя (VNN), к которому могут подключаться клиенты, чтобы получить доступ к базе данных из первичной или вторичной реплики группы доступности AlwaysOn. Прослушиватель группы доступности позволяет клиенту подключаться к реплике доступности, не зная имени физического экземпляра SQL Server, с которым устанавливается соединение. Изменять строку подключения клиента, чтобы установить соединение с текущим расположением текущей первичной реплики, не требуется.

Прослушиватель группы доступности состоит из службы доменных имен прослушивателя (DNS), обозначения порта прослушивателя, а также одного или нескольких IP-адресов. Для работы прослушивателя группы доступности поддерживается только протокол TCP. DNS-имя прослушивателя должно быть уникальным в домене и в NetBIOS. При создании нового прослушивателя группы доступности он становится ресурсом кластера с соответствующим виртуальным сетевым именем (VNN), виртуальным IP-адресом (VIP) и зависимостью группы доступности. Клиент с помощью DNS разрешает VNN в несколько IP-адресов, а затем пытается подключаться по каждому адресу, пока запрос подключения не завершится успехом или не истечет время ожидания.

Если для одной или нескольких вторичных реплик для чтения настроена маршрутизация только для чтения, то клиентские соединения с первичной репликой с намерением чтения направляются во вторичную реплику для чтения. Кроме того, если первичная реплика переходит в режим «вне сети» на одном экземпляре SQL Server, а на другом экземпляре SQL Server новая первичная реплика переходит в режим «в сети», то прослушиватель группы доступности позволяет клиентам подключаться к новой первичной реплике.

Основные сведения о прослушивателях групп доступности см. в разделе Создание или настройка прослушивателя группы доступности (SQL Server).

В этом разделе.

  • Конфигурация прослушивателя группы доступности

  • Выбор порта прослушивателя группы доступности

Конфигурация прослушивателя группы доступности

Прослушиватель группы доступности определяется следующими параметрами.

  • Уникальное имя DNS
    Оно известно также как имя виртуальной сети (VNN). Действуют правила именования Active Directory для DNS-имен узла. Дополнительные сведения см. в статье базы знаний Соглашения о наименовании в Active Directory для компьютеров, доменов, сайтов и подразделений.

  • Один или несколько виртуальных IP-адресов (VIP)
    Виртуальные IP-адреса настраиваются для одной или нескольких подсетей, для которых группа доступности может выполнить отработку отказа.

  • Настройка IP-адресов
    Для данного прослушивателя группы доступности IP-адрес использует протокол DHCP или один или несколько статических IP-адресов.

    • Протокол DHCP

      Если группа доступности расположена в одной подсети, можно настроить использование протокола DHCP для всех IP-адресов прослушивателя группы доступности. В предварительной рабочей среде протокол DHCP упрощает настройку группы доступности, для которой не требуется выполнять аварийное восстановление на удаленный сервер, находящийся в другой подсети. Но не рекомендуется использовать протокол DHCP совместно с прослушивателем группы доступности для производственной среды. Причина в том, что в случае простоя, если время действия IP-адреса протокола DHCP истекло, на регистрацию нового сетевого IP-адреса протокола DHCP, связанного с DNS-именем прослушивателя, уйдет дополнительное время. Из-за дополнительного затраченного времени возникнет ошибка подключения клиента.

    • Статические IP-адреса

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

    Гибридные конфигурации сети и использование протокола DHCP в нескольких подсетях не поддерживаются для прослушивателей групп доступности. Это связано с тем, что при отработке отказа время действия динамического IP-адреса может закончиться, что снижает общий высокий уровень доступности.

Выбор порта прослушивателя группы доступности

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

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

Если для имен виртуальной сети прослушивателей используется порт по умолчанию 1433, необходимо будет сделать так, чтобы никакая другая служба в узле кластера не использовала этот порт. В противном случае возникнет конфликт порта.

Если один из экземпляров SQL Server уже прослушивает TCP-порт 1433 через прослушиватель экземпляра и при этом на данном компьютере больше нет служб (включая дополнительные экземпляры SQL Server), прослушивающие порт 1433, это не приведет к конфликту порта с прослушивателем группы доступности. Обусловлено это тем, что прослушиватель группы доступности может совместно использовать один TCP-порт внутри одного процесса службы. Однако не следует настраивать прослушивание одного порта несколькими экземплярами SQL Server (работающими параллельно).

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

Соединение с первичной репликой с помощью прослушивателя

Чтобы установить соединение с первичной репликой с доступом для чтения и записи с помощью прослушивателя группы доступности, необходимо указать в строке подключения DNS-имя прослушивателя группы доступности. Если роль первичной реплики группы доступности переходит к другой реплике, существующие подключения, в которых используется сетевое имя прослушивателя группы доступности, разрываются. Новые подключения к прослушивателю группы доступности будут перенаправляться к новой первичной реплике. Пример простейшей строки соединения для поставщика данных ADO.NET (System.Data.SqlClient) выглядит следующим образом:

Server=tcp: AGListener,1433;Database=MyDB;IntegratedSecurity=SSPI

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

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

Соединение с помощью прослушивателя со вторичной репликой только для чтения (маршрутизация только для чтения)

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

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

  • В строке подключения указывается прослушиватель группы доступности, а в качестве намерения приложения входящего подключения задается доступ только для чтения (например, с помощью ключевого слова Application Intent**=**ReadOnly в строке подключения ODBC или OLEDB либо атрибутами или свойствами соединения). Дополнительные сведения см. в ниже в подразделе Приложение с намерением доступа только для чтения и маршрутизация только для чтения.

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

Администратор базы данных должен настроить реплики доступности следующим образом.

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

    • Соединение должно иметь доступ «все» или «только для чтения».

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

  2. Для каждой из этих реплик необходимо для первичной роли указать список маршрутизации только для чтения. Укажите имена одного или нескольких серверов в качестве целей маршрутизации.

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

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

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

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

Пример строки соединения для поставщика данных ADO.NET (Systen.Data.SqlClient) ADO.NET), обозначающий намерение приложение получить доступ только для чтения:

Server=tcp:AGListener,1433;Database=AdventureWorks;IntegratedSecurity=SSPI;ApplicationIntent=ReadOnly

В этом примере строки подключения клиент пытается подключиться к прослушивателю группы доступности AGListener через порт 1433 (номер порта также можно не указывать, если прослушиватель группы доступности отслеживает порт 1433). В строке соединения свойству ApplicationIntent задано значение ReadOnly, что делает эту строку строкой соединения только для чтения. Без этого параметра сервер не стал бы пытаться выполнить для этого подключения маршрутизацию только для чтения.

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

Обратите внимание, что намерение приложения можно отправить из клиентского драйвера на экземпляр SQL Server более низкого уровня. В этом случае намерение приложения получить доступ только для чтения не учитывается, а соединение осуществляется в обычном режиме.

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

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

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

Обход прослушивателей группы доступности

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

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

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

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

Если в группе доступности имеется только одна вторичная реплика и не разрешен доступ только для чтения к этой вторичной реплике, клиенты смогут подключаться к первичной реплике доступности с помощью строк подключения к зеркально отображаемой базе данных. Такой подход можно использовать при переносе существующего приложения с зеркально отображаемой базы данных в группу доступности при условии ограничения группы доступности до двух реплик доступности (одной первичной и одной вторичной). При добавлении дополнительных вторичных реплик потребуется создать прослушиватель группы доступности и обновить приложения так, чтобы они использовали DNS-имя прослушивателя группы доступности.

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

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

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

Поведение клиентских подключений при отработке отказа

В случае отработки отказа группы доступности существующие постоянные подключения к группе доступности разрываются, при этом, чтобы продолжить работать с той же базой данных-источником или доступной только для чтения базой данных-получателем, клиент должен установить новое соединение. Пока на стороне сервера выполняется отработка отказа, связь с группой доступности может прерваться, что заставит клиентское приложение начать попытки установить новое подключение до тех пор, пока база данных-источник не будет переведена в режим «в сети».

Если группа доступности возвращается в режим «в сети» в то время, когда клиентское приложение пытается установить соединение, и до истечения времени ожидания подключения, то драйвер клиента может успешно выполнить одну из своих внутренних попыток установить соединение. В этом случае приложение не выдаст никакого сообщения об ошибке.

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

Поддержка отказоустойчивых кластеров с несколькими подсетями группы доступности

Если используются клиентские библиотеки, поддерживающие в строке подключения параметр подключения MultiSubnetFailover, то можно оптимизировать отработку отказа группы доступности в другую подсеть, установив свойство MultiSubnetFailover в значение «True» или «Yes», в зависимости от синтаксиса используемого поставщика данных.

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

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

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

Вот пример подобной строки подключения (позволяющей выполнять отработку отказа в нескольких подсетях) для поставщика данных ADO.NET (System.Data.SqlClient):

Server=tcp:AGListener,1433;Database=AdventureWorks;IntegratedSecurity=SSPI; MultiSubnetFailover=True

Параметру подключения MultiSubnetFailover следует задать значение True, даже если группа доступности размещена только в одной подсети. Это позволяет настроить новых клиентов для обеспечения поддержки расширения в будущем без необходимости вносить какие-либо изменения в строки подключения клиентов, а также оптимизирует производительность отработки отказа при работе в одной подсети. Хотя параметр подключения MultiSubnetFailover не является обязательным, он обеспечивает повышение скорости отработки отказа в подсети. Обусловлено это тем, что драйвер клиента пытается открыть TCP-сокет для каждого IP-адреса, параллельно связанного с группой доступности. Драйвер клиента ждет ответа от первого IP-адреса с сообщением об успехе, а после его получения использует этот IP-адрес для подключения.

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

Прослушиватели группы доступности и SSL-сертификаты

При подключении к прослушивателю группы доступности, если экземпляры-участники SQL Server используют SSL-сертификаты в сочетании с шифрованием сеанса, для обеспечения шифрования драйвер клиента, устанавливающего подключение, должен поддерживать альтернативное имя объекта (Subject Alternate Name) из SSL-сертификата. Поддержка драйвером SQL Server альтернативного имени объекта (Subject Alternative Name) сертификата планируется для ADO.NET (SqlClient), Microsoft JDBC и SQL Native Client (SNAC).

Для каждого узла сервера-участника в отказоустойчивом кластере необходимо настроить сертификат X.509, задав список всех прослушивателей групп доступности, указанных в альтернативном имени объекта (Subject Alternate Name) сертификата.

Например, если в кластере WSFC есть три прослушивателя групп доступности с именами AG1_listener.Adventure-Works.com, AG2_listener.Adventure-Works.com и AG3_listener.Adventure-Works.com, альтернативное имя объекта (Subject Alternative Name) в сертификате должно быть задано следующим образом.

CN = ServerFQDN
SAN = ServerFQDN,AG1_listener.Adventure-Works.com, AG2_listener.Adventure-Works.com, AG3_listener.Adventure-Works.com

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

Прослушиватели группы доступности и имена участников-служб сервера (SPN)

Имя участника-службы сервера (SPN) должно быть задано в Active Directory администратором домена для каждого имени прослушивателя группы доступности с тем, чтобы включить Kerberos для клиентских подключений к прослушивателям групп доступности. При регистрации SPN необходимо использовать учетную запись службы экземпляра сервера, на котором размещена реплика доступности. Для обеспечения работы SPN во всех репликах необходимо использовать одну учетную запись службы для всех экземпляров из кластера WSFC, на которых размещается группа доступности.

Для задания SPN используйте программу командной строки Windows setspn. Пример настройки SPN для группы доступности AG1listener.Adventure-Works.com, размещенной на наборе экземпляров SQL Server, работающих под учетной записью домена corp/svclogin2.

setspn -A MSSQLSvc/AG1listener.Adventure-Works.com:1433 corp/svclogin2

Дополнительные сведения о ручной регистрации SPN для SQL Server см. в разделе Регистрация имя участника-службы для соединений Kerberos.

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

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

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

См. также

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

См. также

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

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

Возможность подключения клиентов AlwaysOn (SQL Server)

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

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

Подключение клиентов к сеансу зеркального отображения базы данных (SQL Server)