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


Взаимодействие функций с FCI и DNN в SQL Server

Область применения: SQL Server на виртуальной машине Azure

Совет

Существует множество методов развертывания группы доступности. Упрощение развертывания и устранение необходимости использования Azure Load Balancer или распределенного сетевого имени (DNN) для группы доступности AlwaysOn путем создания виртуальных машин SQL Server в нескольких подсетях в одной виртуальной сети Azure. Если вы уже создали группу доступности в одной подсети, ее можно перенести в среду с несколькими подсетами.

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

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

Создание сетевого псевдонима (FCI)

Некоторые серверные компоненты зависят от жестко запрограммированного значения VNN. И для правильной работы им нужен сетевой псевдоним, служащий для сопоставления VNN с DNS-именем DNN. Выполните шаги, описанные в разделе Создание псевдонима сервера, чтобы создать псевдоним для сопоставления VNN с DNS-именем DNN.

В случае экземпляра по умолчанию можно напрямую сопоставлять VNN с DNS-именем DNN, с тем чтобы VNN было идентично DNS-имени DNN. Например, если имя VNN — FCI1, имя экземпляра — MSSQLSERVER, а DNN — FCI1DNN (ранее подключавшиеся к FCI клиенты подключены теперь к FCI1DNN), сопоставьте FCI1 для VNN с FCI1DNN для DNN.

В случае именованного экземпляра сопоставление псевдонимов сети должно выполняться для полного экземпляра следующим образом: VNN\Instance = DNN\Instance. Например, если имя VNN — FCI1, имя экземпляра — instA, а DNN — FCI1DNN (ранее подключавшиеся к FCI1\instA клиенты подключены теперь к FCI1DNN\instaA), сопоставьте FCI1\instaA для VNN с FCI1DNN\instaA для DNN.

Клиентские драйверы;

При работе с драйверами ODBC, OLEDB, ADO.NET, JDBC, PHP и Node.js пользователям необходимо явным образом указывать DNS-имя DNN в качестве имени сервера в строке подключения. Чтобы обеспечить быстрое подключение при отработке отказа, добавьте в строку подключения аргумент MultiSubnetFailover=True, если клиент SQL его поддерживает.

Инструменты

Пользователям SQL Server Management Studio, sqlcmd, Azure Data Studio и SQL Server Data Tools необходимо явным образом указывать DNS-имя DNN в качестве имени сервера в строке подключения.

Группы доступности и FCI

Группу доступности Always On можно настроить в качестве одной из реплик с помощью экземпляра отказоустойчивого кластера. В этой конфигурации в URL-адресе конечной точки зеркального отображения для реплики FCI надо использовать DNN для FCI. Аналогично, если FCI используется как реплика только для чтения, в маршрутизации только для чтения для этой реплики FCI необходимо использовать DNN этого FCI.

Для конечной точки зеркального отображения используется формат ENDPOINT_URL = 'TCP://<DNN DNS name>:<mirroring endpoint port>'.

Например, если dnnlsnr — DNS-имя DNN, а 5022 — порт конечной точки зеркального отображения FCI, фрагмент кода Transact-SQL (T-SQL) для создания URL-адреса конечной точки выглядит вот так.

ENDPOINT_URL = 'TCP://dnnlsnr:5022'

Аналогично, для URL-адреса маршрутизации только для чтения используется формат TCP://<DNN DNS name>:<SQL Server instance port>.

Например, если dnnlsnr — DNS-имя DNN, а 1444 — порт, используемый целевым FCI только для чтения для SQL Server, фрагмент кода T-SQL для создания URL-адреса маршрутизации только для чтения выглядит вот так:

READ_ONLY_ROUTING_URL = 'TCP://dnnlsnr:1444'

Порт в URL-адресе можно не указывать, если это стандартный порт 1433. Для именованного экземпляра настройте статический порт и укажите его в URL-адресе маршрутизации только для чтения.

Репликация

Репликация включает три компонента: издатель, распространитель и подписчик. Любой из этих компонентов может быть экземпляром отказоустойчивого кластера. Поскольку VNN FCI как явно, так и неявно обширно применяется в конфигурации репликации, для функционирования репликации может потребоваться сетевой псевдоним, сопоставляющий VNN с DNN.

Используйте имя VNN в качестве имени FCI в рамках репликации, но перед настройкой репликации создавайте сетевой псевдоним в следующих ситуациях удаленной работы:

компонент репликации (FCI с DNN); удаленный компонент; карта псевдонима сети; сервер с картой сети.
Издатель Распространитель От VNN издателя к DNN издателя Распространитель
Распространитель Подписчик От VNN распространителя к DNN распространителя Подписчик
Распространитель Publisher От VNN распространителя к DNN распространителя Publisher
Подписчик Распространитель От VNN подписчика к DNN подписчика Распространитель

К примеру, допустим, что у вас есть издатель, настроенный как FCI с помощью DNN в топологии репликации, а распространитель удален. В этом случае создайте сетевой псевдоним на сервере распространителя, чтобы подключить VNN издателя к DNN издателя.

Настройте DNS-имя DNN в качестве сетевого псевдонима с помощью диспетчера конфигурации SQL Server.

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

Используйте полное имя экземпляра при настройке сетевого псевдонима для именованного экземпляра.

Зеркальное отображение базы данных

Можно настроить зеркальное отображение базы данных, выбрав FCI в качестве любого участника зеркального отображения базы данных. Выполните его настройку с помощью Transact-SQL (T-SQL), а не графического пользовательского интерфейса SQL Server Management Studio. Благодаря применению T-SQL конечная точка зеркального отображения базы данных будет создаваться с помощью DNN, а не VNN.

Например, если DNS-имя DNN — dnnlsnr, а конечная точка зеркального отображения базы данных — 7022, настройка участника зеркального отображения базы данных производится при помощи следующего фрагмента кода T-SQL.

ALTER DATABASE AdventureWorks
    SET PARTNER =
    'TCP://dnnlsnr:7022'
GO 

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

MSDTC

FCI может участвовать в распределенных транзакциях, которые регулируются при помощи координатора распределенных транзакций (Майкрософт) (MSDTC). DNN для FCI обеспечивает поддержку кластерных и локальных MSDTC. В Azure для кластерного развертывания MSDTC требуется Azure Load Balancer.

Совет

Наличие DNN, определенного в FCI, не отменяет требования Azure Load Balancer о наличии кластерного координатора распределенных транзакций.

FileStream

Хотя FileStream поддерживается для базы данных в FCI, доступ к FileStream или FileTable с помощью программных интерфейсов файловой системы с DNN не поддерживается.

Связанные серверы

Поддерживается использование связанного сервера с DNN для FCI. Либо задействуйте DNN напрямую для настройки связанного сервера, либо воспользуйтесь сетевым псевдонимом для сопоставления VNN с DNN.

Например, чтобы создать связанный сервер с DNS-именем DNN dnnlsnr для именованного экземпляра insta1, используйте следующую команду Transact-SQL (T-SQL).

USE [master]   
GO   

EXEC master.dbo.sp_addlinkedserver    
    @server = N'dnnlsnr\inst1',    
    @srvproduct=N'SQL Server' ;   
GO 

Кроме того, можно создать связанный сервер, указав вместо него имя виртуальной сети (VNN). Но тогда нужно будет определить сетевой псевдоним, чтобы сопоставить VNN с DNN.

Например, при наличии имени экземпляра insta1, имени VNN vnnname и имени DNN dnnlsnr используйте следующую команду Transact-SQL (T-SQL), чтобы создать связанный сервер с помощью VNN.

USE [master]
GO   

EXEC master.dbo.sp_addlinkedserver   
    @server = N'vnnname\inst1',    
    @srvproduct=N'SQL Server' ;   
GO 

Затем создайте сетевой псевдоним для сопоставления vnnname\insta1 с dnnlsnr\insta1.

Часто задаваемые вопросы

  • Какая версия SQL Server обладает поддержкой DNN?

    SQL Server 2019 CU2 и более поздних версий.

  • Каково ожидаемое время отработки отказа при использовании DNN?

    В случае DNN время отработки отказа просто будет равно времени отработки отказа FCI, и дополнительное время не добавляется (как добавляется время пробы при использовании Azure Load Balancer).

  • Существуют ли какие-либо требования к версии для клиентов SQL, поддерживающих DNN с OLEDB и ODBC?

    В случае DNN мы рекомендуем использовать строку подключения с поддержкой MultiSubnetFailover=True. Она добавлена в версии SQL Server 2012 (11.x).

  • Требуются ли внести какие-либо изменения в конфигурацию SQL Server перед тем, как я смогу использовать DNN?

    Для использования DNN не требуется изменять конфигурацию SQL Server, но на некоторые возможности SQL Server нужно обратить особое внимание.

  • Поддерживает ли DNN кластеры с несколькими подсетями?

    Да. Кластер привязывает DNN в DNS к физическим IP-адресам всех узлов в кластере независимо от подсети. Клиент SQL перебирает все IP-адреса для этого DNS-имени, независимо от подсетей.

Следующие шаги

Дополнительные сведения см. на следующих ресурсах: