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


Подключение к прослушивателю группы доступности Always On

Область применения: SQL Server

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

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

Подключение к первичной реплике

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

Например, чтобы подключиться к первичной реплике в SQL Server Management Studio через прослушиватель, введите DNS-имя прослушивателя в поле имени сервера:

Снимок экрана: подключение к прослушивателю в SSMS.

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

Пример простейшей строки соединения для поставщика данных ADO.NET (System.Data.SqlClient):

Server=tcp: AGListener,1433;Database=MyDB;Integrated Security=SSPI

Вы можете проверить, к какой реплике в данный момент вы подключены через прослушиватель, выполнив следующую команду Transact-SQL (T-SQL):

SELECT @@SERVERNAME

Например, если SQLVM1 — это первичная реплика:

Снимок экрана: проверка подключения реплики.

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

Подключение к реплике только для чтения

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

Подключения автоматически направляются в реплику только для чтения, если выполняются следующие условия:

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

  • Строка подключения ссылается на базу данных, относящуюся к группе доступности. Альтернативой является наличие базы данных, настроенной как базы данных по умолчанию, для имени входа, используемого при подключении. Дополнительные сведения см. в этой статье о работе алгоритма с маршрутизацией только для чтения.

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

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

Например, чтобы подключиться к реплике только для чтения с помощью SQL Server Management Studio, выберите Параметры в диалоговом окне Подключение к серверу, выберите вкладку Дополнительные параметры подключения, а затем в текстовом поле укажите ApplicationIntent=ReadOnly:

Снимок экрана: подключение только для чтения в SSMS.

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

Server=tcp:AGListener;Database=AdventureWorks;Integrated Security=SSPI;ApplicationIntent=ReadOnly

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

Недефаултный порт

При создании прослушивателя необходимо назначить порт, который будет использоваться прослушивателем. Если порт является портом по умолчанию 1433, то при подключении к прослушивателю не нужно указывать номер порта. Однако если порт не имеет значения 1433, то порт должен быть указан в строка подключения в таком форматеlistenername,port, как:

Снимок экрана: Подключение с помощью порта, отличного от дефекторной проверки подлинности.

Пример строка подключения для поставщика ADO.NET (System.Data.SqlClient), который задает неdefault-порт для прослушивателя:

Server=tcp:AGListener,1445;Database=AdventureWorks;Integrated Security=SSPI

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

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

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

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

Зеркальное отображение базы данных строка подключения

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

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

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

Отработка отказа с несколькими подсетями

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

Примечание.

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

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

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

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

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

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

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

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

Формат значений сертификата:

CN = Server.FQDN
SAN = Server.FQDN,Listener1.FQDN,Listener2.FQDN

Например, у вас есть следующий код:

Servername: Win2019
Instance: SQL2019
AG: AG2019
Listener: Listener2019
Domain: contoso.com  (which is also the FQDN)

Для WSFC с одной группой доступности сертификат должен иметь полное доменное имя (FQDN) сервера и FQDN прослушивателя:

CN: Win2019.contoso.com
SAN: Win2019.contoso.com, Listener2019.contoso.com

С этой конфигурацией подключения шифруются при подключении к экземпляру (WIN2019\SQL2019) или прослушивателю (Listener2019).

В зависимости от настройки сети существует небольшое подмножество клиентов, которые могут также добавить NetBIOS в SAN. В этом случае значения сертификата должны быть:

CN: Win2019.contoso.com
SAN: Win2019,Win2019.contoso.com,Listener2019,Listener2019.contoso.com

Если WSFC имеет три прослушивателя группы доступности, например Прослушиватель1, Прослушиватель2, Прослушиватель3

Значения сертификата должны быть:

CN: Win2019.contoso.com
SAN: Win2019.contoso.com,Listener1.contoso.com,Listener2.contoso.com,Listener3.contoso.com

Прослушиватели и Kerberos (SPN)

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

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

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

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