Настройка прослушивателя DNN для группы доступности

Применимо к: SQL Server на виртуальной машине Azure

Совет

Устраните необходимость в использовании имени распределенной сети для группы доступности Always On, создав виртуальные машины SQL Server в нескольких подсетях одной виртуальной сети Azure.

С помощью SQL Server на виртуальных машинах Azure одной подсети имя распределенной сети (DNN) маршрутизирует трафик в соответствующий кластеризованный ресурс. Он предоставляет более простой способ подключения к группе доступности Always On, чем прослушиватель имени виртуальной сети (VNN), и не требует использования Azure Load Balancer.

В этой статье описывается, как настроить прослушиватель DNN, чтобы заменить прослушиватель VNN и маршрутизировать трафик в группу доступности с помощью SQL Server на виртуальных машинах Azure для обеспечения высокой доступности и аварийного восстановления (HADR).

Для альтернативного варианта подключения рассмотрите использование прослушивателя VNN и Azure Load Balancer.

Обзор

Прослушиватель имени распределенной сети (DNN) заменяет традиционный прослушиватель группы доступности имени виртуальной сети (VNN) при использовании с группами доступности Always On на виртуальных машинах SQL Server Это позволяет свести к нулю необходимость использования Azure Load Balancer для маршрутизации трафика, упрощения развертывания, обслуживания и повышения отработки отказа.

Разверните прослушиватель DNN вместо существующего прослушивателя VNN или используйте их параллельно, чтобы у групп доступности было две раздельные точки подключения, из которых одна использует имя (и порт, если он отличается от стандартного) прослушивателя VNN, а вторая — имя и порт прослушивателя DNN.

Внимание!

Поведение маршрутизации при использовании DNN и VNN отличается. Не используйте порт 1433. Дополнительные сведения см. в разделе Рекомендации по использованию порта далее в этой статье.

Предварительные требования

Чтобы выполнить действия, описанные в этой статье, необходимо следующее:

  • SQL Server (SQL Server 2019 CU8 или более поздней версии, SQL Server 2017 CU25 или более поздней версии либо SQL Server 2016 с пакетом обновления 3 (SP3) или более поздней версии) на базе Windows Server 2016 или более поздней версии.
  • Принято решение о том, что имя распределенной сети является подходящим вариантом подключения для вашего решения HADR.
  • Настроена группа доступности Always On.
  • Установлена последняя версия PowerShell.
  • Указан уникальный пори, который будет использоваться для прослушивателя DNN. Порт, используемый для прослушивателя DNN, должен быть уникальным для всех реплик группы доступности или экземпляра отказоустойчивого кластера. Другие подключения не могут совместно использовать один и тот же порт.

Создать сценарий

С помощью PowerShell создайте ресурс имени распределенной сети (DNN) и свяжите его с группой доступности.

Для этого выполните следующие действия.

  1. Откройте текстовый редактор, например Блокнот.

  2. Скопируйте и вставьте следующий скрипт.

    param (
       [Parameter(Mandatory=$true)][string]$Ag,
       [Parameter(Mandatory=$true)][string]$Dns,
       [Parameter(Mandatory=$true)][string]$Port
    )
    
    Write-Host "Add a DNN listener for availability group $Ag with DNS name $Dns and port $Port"
    
    $ErrorActionPreference = "Stop"
    
    # create the DNN resource with the port as the resource name
    Add-ClusterResource -Name $Port -ResourceType "Distributed Network Name" -Group $Ag 
    
    # set the DNS name of the DNN resource
    Get-ClusterResource -Name $Port | Set-ClusterParameter -Name DnsName -Value $Dns 
    
    # start the DNN resource
    Start-ClusterResource -Name $Port
    
    
    $Dep = Get-ClusterResourceDependency -Resource $Ag
    if ( $Dep.DependencyExpression -match '\s*\((.*)\)\s*' )
    {
    $DepStr = "$($Matches.1) or [$Port]"
    }
    else
    {
    $DepStr = "[$Port]"
    }
    
    Write-Host "$DepStr"
    
    # add the Dependency from availability group resource to the DNN resource
    Set-ClusterResourceDependency -Resource $Ag -Dependency "$DepStr"
    
    
    #bounce the AG resource
    Stop-ClusterResource -Name $Ag
    Start-ClusterResource -Name $Ag
    
  3. Сохраните скрипт в виде файла .ps1, например add_dnn_listener.ps1.

Выполнение скрипта

Чтобы создать прослушиватель DNN, выполните скрипт, передав параметры для имени группы доступности, имени прослушивателя и порта.

Например, если имя группы доступности ag1, имя прослушивателя dnnlsnr и порт прослушивателя 6789, выполните следующие действия.

  1. Откройте средство интерфейса командной строки, например командную строку или PowerShell.

  2. Перейдите к месту сохранения скрипта .ps1, например C:\Documents.

  3. Выполните скрипт: add_dnn_listener.ps1 <ag name> <listener-name> <listener port>. Пример:

    c:\Documents> add_dnn_listener.ps1 ag1 dnnlsnr 6789
    

Проверка прослушивателя

Чтобы убедиться, что прослушиватель DNN успешно создан, используйте SQL Server Management Studio или Transact-SQL.

SQL Server Management Studio

Разверните прослушиватели группы доступности в SQL Server Management Studio (SSMS), чтобы просмотреть прослушиватель DNN:

Просмотр прослушивателя DNN в разделе прослушивателей группы доступности в SQL Server Management Studio (SSMS)

Transact-SQL

Чтобы просмотреть состояние прослушивателя DNN, используйте Transact-SQL:

SELECT * FROM SYS.AVAILABILITY_GROUP_LISTENERS

Значение 1 для is_distributed_network_name указывает, что прослушиватель является прослушивателем имени распределенной сети (DNN):

Используйте sys.availability_group_listeners для определения прослушивателей DNN, имеющих значение 1 в is_distributed_network_name

Обновление строки подключения

Обновите строку подключения для любого приложения, которое должно подключаться к прослушивателю DNN. Строка подключения к прослушивателю DNN должна содержать номер порта DNN и MultiSubnetFailover=True. Клиент SQL, не поддерживающий параметрMultiSubnetFailover=True, несовместим с прослушивателем DNN.

Ниже приводится пример строки подключения для прослушивателя с именем DNN_Listener и порта 6789.

DataSource=DNN_Listener,6789,MultiSubnetFailover=True

Тестовая отработка отказа

Выполните тестовую отработку отказа группы доступности, чтобы обеспечить ее функционирование.

Для этого выполните следующие действия.

  1. Подключитесь к прослушивателю DNN или к одной из реплик с помощью SQL Server Management Studio (SSMS).
  2. Разверните группу доступности Always On в обозревателе объектов.
  3. Щелкните правой кнопкой мыши группу доступности и выберите пункт Отработка отказа, чтобы открыть Мастер отработки отказа.
  4. Следуйте инструкциям на экране, чтобы выбрать цель отработки отказа и выполнить сбой группы доступности во вторичной реплике.
  5. Убедитесь, что база данных находится в состоянии SYNCHRONIZED (Синхронизировано) в новой первичной реплике.
  6. (Необязательно) Восстановите подключение к исходной основной или другой вторичной реплике.

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

Проверьте подключение к прослушивателю DNN, выполнив следующие действия.

  1. Откройте SQL Server Management Studio.
  2. Подключитесь к прослушивателю DNN.
  3. Откройте новое окно запроса и проверьте, к какой реплике вы подключены, выполнив SELECT @@SERVERNAME.
  4. Выполните сбой группы доступности в другой реплике.
  5. Выждав оптимальное время, выполните команду SELECT @@SERVERNAME, чтобы подтвердить размещение вашей группы доступности в другой реплике.

Ограничения

  • Прослушиватели DNN ДОЛЖНЫ быть настроены с помощью уникального порта. Этот порт не может использоваться совместно с любым другим подключением к любой реплике.
  • Клиент, подключающийся к прослушивателю DNN, должен поддерживать параметр MultiSubnetFailover=True в строке подключения.
  • При работе с другими функциями SQL Server и группой доступности с DNN могут возникнуть дополнительные факторы. Дополнительные сведения см. в статье Группа доступности со взаимодействием DNN.

Рекомендации по использованию порта

Прослушиватели DNN предназначены для прослушивания всех IP-адресов, но на конкретном уникальном порте. Запись DNS для имени прослушивателя должна быть разрешена для адресов всех реплик в группе доступности. Это выполняется автоматически с помощью скрипта PowerShell, приведенного в разделе Создание скрипта. Прослушиватели DNN принимают подключения на всех IP-адресах, поэтому крайне важно, чтобы порт прослушивателя был уникальным и не использовался с другими репликами в группе доступности. Поскольку SQL Server по умолчанию прослушивает порт 1433 напрямую или через службу SQL Browser, мы настоятельно не рекомендуем использовать порт 1433 для прослушивателя DNN.

Если порт прослушивателя, выбранный для прослушивателя VNN, составляет от 49 152 до 65 536 ( диапазон динамических портов по умолчанию для TCP/IP, добавьте исключение для этого. Это предотвратит динамическое назначение того же порта другим системам.

Вы можете добавить исключение портов с помощью следующей команды: netsh int ipv4 add excludedportrange tcp startport=<Listener Port> numberofports=1 store=persistent

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

После развертывания группы доступности рассмотрите возможность оптимизации параметров HADR для SQL Server на виртуальных машинах Azure.

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