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

Применимо к: даSQL Server (все поддерживаемые версии)

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

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

Чтобы подключиться к первичной реплике с доступом для чтения и записи, в строке подключения укажите 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 (Systen.Data.SqlClient), указывающий порт не по умолчанию для прослушивателя:

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 или Yes, в зависимости от синтаксиса используемого поставщика данных.

Примечание

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

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

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

Для каждого узла сервера-участника в отказоустойчивом кластере необходимо настроить сертификат 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 есть три прослушивателя группы доступности, например: Listener1, Listener2, Listener3

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

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

Прослушиватели и Kerberos (имена субъектов-служб)

Администратор домена должен настроить имя субъекта-службы (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  

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

Дальнейшие действия

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

Дополнительные сведения о группах доступности см. в разделе Обзор групп доступности Always On (SQL Server).