Настройка группы доступности с несколькими подсетью для SQL Server на виртуальной машине Azure с помощью PowerShell или Az CLI

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

Совет

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

В этой статье описывается, как использовать PowerShell или Azure CLI для развертывания отказоустойчивого кластера Windows, добавления виртуальных машин SQL Server в кластер и прослушивателя группы доступности AlwaysOn в нескольких подсетях.

Развертывание группы доступности по-прежнему выполняется вручную с помощью SQL Server Management Studio (SSMS) или Transact-SQL (T-SQL).

Хотя в этой статье используется PowerShell и Az CLI для настройки среды группы доступности, это также можно сделать из портал Azure или вручную.

Примечание.

Теперь можно выполнить перенос решения группы доступности по методу lift-and-shift на SQL Server на виртуальных машинах Azure с помощью Azure Migrate. Дополнительные сведения см. в разделе Перенос группы доступности.

Необходимые компоненты

Чтобы настроить группы доступности AlwaysOn, должны выполняться предварительные требования:

  • Подписка Azure
  • Группа ресурсов с контроллером домена.
  • Одна или несколько виртуальных машин, присоединенных к домену, в Azure с sql Server 2016 (или более поздней версии) Enterprise в отдельных подсетях в одной виртуальной сети. Виртуальные машины находятся в одной группе доступности или в разных зонах доступности, зарегистрированных в расширении агента IaaS SQL.
  • Последняя версия PowerShell или Azure CLI.
  • Два доступных IP-адреса (не используются любой сущностью) в одной подсети, что и каждая виртуальная машина. У каждой виртуальной машины будет IP-адрес прослушивателя группы доступности.
  • Windows Server Core не является поддерживаемой операционной системой для команд PowerShell, на которые ссылается эта статья, так как существует зависимость от RSAT, которая не включена в основные установки Windows.

Разрешения

Для настройки группы доступности Always On с помощью Azure CLI необходимы разрешения следующих учетных записей:

  • Существующая учетная запись пользователя домена с разрешением на создание объекта компьютера в домене. Как правило, учетная запись администратора домена обычно имеет соответствующие разрешения (например, account@domain.com). Эта учетная запись также должна входить в группу локальных администраторов на каждой виртуальной машине для создания кластера.
  • Учетная запись пользователя домена, которая используется для управления SQL Server.

Создание учетной записи хранилища

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

Следующий фрагмент кода создает учетную запись хранения:

# Create the storage account
# example: az storage account create -n 'cloudwitness' -g SQLVM-RG -l 'West US' `
#  --sku Standard_LRS --kind StorageV2 --access-tier Hot --https-only true

az storage account create -n <name> -g <resource group name> -l <region> `
  --sku Standard_LRS --kind StorageV2 --access-tier Hot --https-only true

Совет

Если вы используете устаревшую версию Azure CLI, может появиться сообщение об ошибке az sql: 'vm' is not in the 'az sql' command group. Скачайте последнюю версию Azure CLI, чтобы устранить эту ошибку.

Определение метаданных кластера

Группа команд az sql vm group Azure CLI управляет метаданными службы отказоустойчивого кластера Windows Server (WSFC), в которой размещается группа доступности. К метаданным кластера относятся домен Active Directory, учетные записи кластера, учетные записи хранения, которые используются в роли облака-свидетеля, и версия SQL Server. Используйте az sql vm group create для определения метаданных для WSFC, чтобы при добавлении первой виртуальной машины SQL Server был создан кластер в соответствии с определением.

Следующий фрагмент кода определяет метаданные для кластера:

# Define the cluster metadata
# example: az sql vm group create -n Cluster -l 'West US' -g SQLVM-RG `
#  --image-offer sql2019-ws2019 --image-sku Enterprise --domain-fqdn domain.com `
#  --operator-acc vmadmin@domain.com --bootstrap-acc vmadmin@domain.com --service-acc sqlservice@domain.com `
#  --sa-key '4Z4/i1Dn8/bpbseyWX' `
#  --storage-account 'https://cloudwitness.blob.core.windows.net/'
#  --cluster-subnet-type 'MultiSubnet'

az sql vm group create -n <cluster name> -l <region ex:eastus> -g <resource group name> `
  --image-offer <sql2019-ws2019> --image-sku Enterprise --domain-fqdn <FQDN ex: domain.com> `
  --operator-acc <domain account ex: testop@domain.com> --bootstrap-acc <domain account ex:bootacc@domain.com> `
  --service-acc <service account ex: testservice@domain.com> `
  --sa-key '<PublicKey>' `
  --storage-account '<ex:https://cloudwitness.blob.core.windows.net/>'
  --cluster-subnet-type 'MultiSubnet'

Добавление виртуальных машин в кластер

При добавлении первой виртуальной машины SQL Server в кластер создается кластер. Вы можете создать кластер с указанным ранее именем, установить для него роль на виртуальных машинах SQL Server, а также добавить их в кластер с помощью команды az sql vm add-to-group. Выполните команду az sql vm add-to-group еще раз, чтобы добавить в созданный кластер дополнительные виртуальные машины SQL Server.

Следующий фрагмент кода создает кластер и добавляет в него первую виртуальную машину SQL Server:

# Add SQL Server VMs to cluster
# example: az sql vm add-to-group -n SQLVM1 -g SQLVM-RG --sqlvm-group Cluster `
#  -b Str0ngAzur3P@ssword! -p Str0ngAzur3P@ssword! -s Str0ngAzur3P@ssword!
# example: az sql vm add-to-group -n SQLVM2 -g SQLVM-RG --sqlvm-group Cluster `
#  -b Str0ngAzur3P@ssword! -p Str0ngAzur3P@ssword! -s Str0ngAzur3P@ssword!

az sql vm add-to-group -n <VM1 Name> -g <Resource Group Name> --sqlvm-group <cluster name> `
  -b <bootstrap account password> -p <operator account password> -s <service account password>
az sql vm add-to-group -n <VM2 Name> -g <Resource Group Name> --sqlvm-group <cluster name> `
  -b <bootstrap account password> -p <operator account password> -s <service account password>

Используйте эту команду, чтобы добавить в кластер любые другие виртуальные машины SQL Server. Для имени виртуальной машины SQL Server измените только параметр -n.

Настройка кворума

Хотя диск-свидетель является наиболее устойчивым кворумом, он требует общего диска Azure, который накладывает некоторые ограничения для группы доступности. Поэтому рекомендуемым решением кворума для кластеров с группами доступности для SQL Server на виртуальных машинах Azure является облачный свидетель.

Если в кластере четное число голосов, настройте решение кворума, которое лучше всего подходит для бизнес-задач. Дополнительные сведения см. в статье Кворум с виртуальными машинами SQL Server.

Проверка кластера

Майкрософт поддерживает только отказоустойчивые кластеры, конфигурация которых прошла проверку. Подключитесь к виртуальной машине предпочтительным методом, например с помощью протокола удаленного рабочего стола (RDP), и убедитесь, что кластер прошел проверку, прежде чем продолжить. Несоблюдение этого действия оставляет кластер в неподдерживаемом состоянии.

Вы можете проверить кластер с помощью диспетчера отказоустойчивости кластеров (FCM) или следующей команды PowerShell:

Test-Cluster –Node ("<node1>","<node2>") –Include "Inventory", "Network", "System Configuration"

Создание группы доступности.

Создайте группу доступности вручную обычным способом с помощью SQL Server Management Studio, PowerShell или Transact-SQL.

Внимание

Не создавайте прослушиватель на этом шаге. Это действие будет выполнено с помощью Azure CLI в следующих разделах.

Создание прослушивателя

После создания группы доступности вручную можно создать прослушиватель с помощью команды az sql vm ag-listener.

Идентификатор ресурса подсети — это значение /subnets/<subnetname>, которое добавляется к идентификатору ресурса виртуальной сети. Чтобы определить идентификатор ресурса подсети, выполните следующие действия:

  1. Перейдите к группе ресурсов на портале Azure.
  2. Выберите ресурс виртуальной сети.
  3. Выберите Свойства в области Параметры.
  4. Определите идентификатор ресурса для виртуальной сети и добавьте /subnets/<subnetname> к нему в конце, чтобы создать идентификатор ресурса подсети. Например:
    • Ваш идентификатор ресурса виртуальной сети — /subscriptions/a1a1-1a11a/resourceGroups/SQLVM-RG/providers/Microsoft.Network/virtualNetworks/SQLVMvNet.
    • Ваше имя подсети — default.
    • Таким образом, ваш идентификатор ресурса подсети — /subscriptions/a1a1-1a11a/resourceGroups/SQLVM-RG/providers/Microsoft.Network/virtualNetworks/SQLVMvNet/subnets/default.

Следующий фрагмент кода создает прослушиватель группы доступности:

# Create the availability group listener
# example: az sql vm group ag-listener create -n AGListener -g SQLVM-RG `
#  --ag-name SQLAG --group-name Cluster --ip-address 10.0.0.27 `
#  --load-balancer sqlilb --probe-port 59999  `
#  --subnet /subscriptions/a1a1-1a11a/resourceGroups/SQLVM-RG/providers/Microsoft.Network/virtualNetworks/SQLVMvNet/subnets/default `
#  --sqlvms sqlvm1 sqlvm2

az sql vm group ag-listener create -n <listener name> -g <resource group name> `
  --ag-name <availability group name> --group-name <cluster name> --ip-address <ag listener IP address> `
  --load-balancer <lbname> --probe-port <Load Balancer probe port, default 59999>  `
  --subnet <subnet resource id> `
  --sqlvms <names of SQL VM's hosting AG replicas, ex: sqlvm1 sqlvm2>

Изменение числа реплик

Существует дополнительный уровень сложности при развертывании группы доступности в виртуальных машинах SQL Server, размещенных в Azure. Поставщик ресурсов и группа виртуальных машин теперь управляют ресурсами. Таким образом, при добавлении или удалении реплик в группе доступности выполняется дополнительная задача добавления сведений о виртуальных машинах SQL Server в метаданные прослушивателя. При изменении числа реплик в группе доступности необходимо также использовать команду az sql vm group ag-listener update, чтобы добавить в прослушиватель метаданные виртуальных машин SQL Server.

Добавление реплики

Чтобы добавить новую реплику в группу доступности, выполните следующие действия:

Azure CLI

  1. Добавьте виртуальную машину SQL Server в группу кластера, выполнив следующую команду:

    
    # Add the SQL Server VM to the cluster group
    # example: az sql vm add-to-group -n SQLVM3 -g SQLVM-RG --sqlvm-group Cluster `
    # -b Str0ngAzur3P@ssword! -p Str0ngAzur3P@ssword! -s Str0ngAzur3P@ssword!
    
    az sql vm add-to-group -n <VM3 Name> -g <Resource Group Name> --sqlvm-group <cluster name> `
    -b <bootstrap account password> -p <operator account password> -s <service account password>
    
  2. Используйте SQL Server Management Studio, чтобы добавить экземпляр SQL Server в качестве реплики в группу доступности.

  3. Добавьте метаданные виртуальной машины SQL Server в прослушиватель, выполнив следующую команду:

    # Update the listener metadata with the new VM
    # example: az sql vm group ag-listener update -n AGListener `
    # -g sqlvm-rg --group-name Cluster --sqlvms sqlvm1 sqlvm2 sqlvm3
    
    az sql vm group ag-listener update -n <Listener> `
    -g <RG name> --group-name <cluster name> --sqlvms <SQL VMs, along with new SQL VM>
    

Удаление реплики

Чтобы удалить реплику из группы доступности, выполните следующие действия:

Azure CLI

  1. Удалите реплику из группы доступности с помощью SQL Server Management Studio.
  2. Удалите метаданные виртуальной машины SQL Server из прослушивателя:
    # Update the listener metadata by removing the VM from the SQLVMs list
    # example: az sql vm group ag-listener update -n AGListener `
    # -g sqlvm-rg --group-name Cluster --sqlvms sqlvm1 sqlvm2
    
    az sql vm group ag-listener update -n <Listener> `
    -g <RG name> --group-name <cluster name> --sqlvms <SQL VMs that remain>
    
  3. Удалите виртуальную машину SQL Server из кластера:
    # Remove the SQL VM from the cluster
    # example: az sql vm remove-from-group --name SQLVM3 --resource-group SQLVM-RG
    
    az sql vm remove-from-group --name <SQL VM name> --resource-group <RG name> 
    

Удаление прослушивателя

Если вам потребуется удалить прослушиватель группы доступности, настроенный с помощью Azure CLI, это нужно делать через расширение агента IaaS. Так как прослушиватель зарегистрирован в расширении агента IaaS, недостаточно просто удалить его с помощью SQL Server Management Studio.

Лучший способ — удалить его с помощью расширения агента IaaS, используя приведенный ниже фрагмент кода в Azure CLI. Так из расширения агента IaaS для SQL удаляются метаданные прослушивателя группы доступности, а из группы доступности физически удаляется прослушиватель.

# Remove the availability group listener
# example: az sql vm group ag-listener delete --group-name Cluster --name AGListener --resource-group SQLVM-RG

az sql vm group ag-listener delete --group-name <cluster name> --name <listener name > --resource-group <resource group name>

Удаление кластера

Удалите все узлы из кластера, чтобы уничтожить его, а затем удалите метаданные кластера из расширения агента IaaS SQL. Это можно сделать с помощью Azure CLI или PowerShell.

Сначала удалите все виртуальные машины SQL Server из кластера:

# Remove the VM from the cluster metadata
# example: az sql vm remove-from-group --name SQLVM2 --resource-group SQLVM-RG

az sql vm remove-from-group --name <VM1 name>  --resource-group <resource group name>
az sql vm remove-from-group --name <VM2 name>  --resource-group <resource group name>

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

Затем удалите метаданные кластера из расширения агента IaaS SQL:

# Remove the cluster from the SQL VM RP metadata
# example: az sql vm group delete --name Cluster --resource-group SQLVM-RG

az sql vm group delete --name <cluster name> Cluster --resource-group <resource group name>

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

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

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