Взаимодействие функций с 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 издателя.
Используйте полное имя именованного экземпляра как на следующем изображении.
Зеркальное отображение базы данных
Можно настроить зеркальное отображение базы данных, выбрав 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-имени, независимо от подсетей.
Следующие шаги
Дополнительные сведения см. на следующих ресурсах: