Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Microsoft в Yandex Cloud
    • Все руководства
    • Использование своей лицензии для продуктов Microsoft
    • Безопасная передача пароля в скрипт инициализации
    • Развертывание Active Directory
    • Развертывание Microsoft Exchange
    • Развертывание Remote Desktop Services
    • Развертывание Remote Desktop Gateway
    • Развертывание группы доступности Always On с внутренним сетевым балансировщиком
  • Правила тарификации

В этой статье:

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Создайте сетевую инфраструктуру
  • Создайте внутренний сетевой балансировщик
  • Создайте обработчик
  • Создайте и подключите целевую группу к балансировщику
  • Подготовьте виртуальные машины для группы доступности
  • Подготовьте образы Windows Server
  • Создайте файл с учетными данными администратора
  • Создайте виртуальные машины
  • Перенесите свои лицензии для Windows Server
  • Установите и настройте Active Directory
  • Создайте пользователей и группы в Active Directory
  • Установите и настройте SQL Server
  • Создайте Windows Server Failover Cluster
  • Настройте Always On
  • Протестируйте группу доступности
  • Как удалить созданные ресурсы
  1. Практические руководства
  2. Развертывание группы доступности Always On с внутренним сетевым балансировщиком

Развертывание группы доступности Always On с внутренним сетевым балансировщиком

Статья создана
Yandex Cloud
Улучшена
Обновлена 21 апреля 2025 г.
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Создайте сетевую инфраструктуру
  • Создайте внутренний сетевой балансировщик
    • Создайте обработчик
    • Создайте и подключите целевую группу к балансировщику
  • Подготовьте виртуальные машины для группы доступности
    • Подготовьте образы Windows Server
    • Создайте файл с учетными данными администратора
    • Создайте виртуальные машины
    • Перенесите свои лицензии для Windows Server
    • Установите и настройте Active Directory
    • Создайте пользователей и группы в Active Directory
    • Установите и настройте SQL Server
    • Создайте Windows Server Failover Cluster
    • Настройте Always On
  • Протестируйте группу доступности
  • Как удалить созданные ресурсы

Важно

В Yandex Cloud продукты Microsoft можно использовать только с вашими собственными лицензиями и только на выделенных хостах. Подробнее см. Использование своей лицензии для продуктов Microsoft.

Сценарий описывает развертывание в Yandex Cloud группы доступности Always On с балансировкой нагрузки между узлами с помощью внутреннего сетевого балансировщика. Несколько подсетей будут объединены в одну общую подсеть путем настройки сетевых интерфейсов. Благодаря этому не потребуется использование Multisubnet Failover. Основной IP-адрес будет назначаться реплике, в которую ведется запись. У этой же реплики будет открыт порт, на который балансировщик будет направлять трафик. Поскольку порт, указанный для подключения к балансировщику, становится недоступным, для приема трафика будет использоваться дополнительный нестандартный порт.

Чтобы создать и настроить группу доступности Always On с внутренним сетевым балансировщиком:

  1. Подготовьте облако к работе.
  2. Создайте сетевую инфраструктуру.
  3. Создайте внутренний сетевой балансировщик.
  4. Подготовьте виртуальные машины для группы доступности.
  5. Протестируйте группу доступности.

Если созданные ресурсы вам больше не нужны, удалите их.

Подготовьте облако к работеПодготовьте облако к работе

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

Примечание

Проверьте, что в платежном аккаунте указаны пользовательские данные, необходимые для выполнения требований лицензионной политики Microsoft. Без этих данных вы не сможете запустить продукт.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки группы доступности входят:

  • плата за постоянно запущенную виртуальную машину (см. тарифы Yandex Compute Cloud);
  • плата за использование сетевого балансировщика (см. тарифы Yandex Network Load Balancer);
  • плата за использование динамического или статического публичного IP-адреса (см. тарифы Yandex Virtual Private Cloud).

Вы можете воспользоваться перемещением лицензий и использовать собственную лицензию SQL Server в Yandex Cloud.

Создайте сетевую инфраструктуруСоздайте сетевую инфраструктуру

Подготовьте сетевую инфраструктуру для размещения группы доступности.

  1. Создайте сеть с именем ya-network:

    Консоль управления
    Bash
    PowerShell
    1. Откройте раздел Virtual Private Cloud в каталоге, где требуется создать облачную сеть.
    2. Нажмите кнопку Создать сеть.
    3. Задайте имя сети: ya-network.
    4. Нажмите кнопку Создать сеть.

    Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

    По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

    yc vpc network create --name ya-network
    

    Установите интерфейс командной строки Yandex Cloud, чтобы использовать команды CLI в PowerShell.

    yc vpc network create --name ya-network
    
  2. Создайте подсети, в которых будут размещаться виртуальные машины и сетевой балансировщик:

    • Три подсети для размещения ВМ SQLServer: ya-sqlserver-rc1a, ya-sqlserver-rc1b и ya-sqlserver-rc1d. К каждой подсети будет привязана таблица маршрутизации mssql.
    • Подсеть ya-ilb-rc1a для сетевого балансировщика.
    • Подсеть ya-ad-rc1a для Active Directory.
    Консоль управления
    Bash
    PowerShell
    1. Откройте раздел Virtual Private Cloud в каталоге, где требуется создать подсети.
    2. Выберите сеть ya-network.
    3. Нажмите кнопку Добавить подсеть.
    4. Заполните форму: введите имя подсети ya-sqlserver-rc1a, выберите зону доступности ru-central1-a из выпадающего списка.
    5. Введите CIDR подсети: IP-адрес и маску подсети: 192.168.1.0/28.
    6. Нажмите кнопку Создать подсеть.

    Повторите шаги для подсетей со следующими именами и CIDR:

    • ya-sqlserver-rc1b в зоне доступности ru-central1-b — 192.168.1.16/28;
    • ya-sqlserver-rc1d в зоне доступности ru-central1-d — 192.168.1.32/28;
    • ya-ilb-rc1a в зоне доступности ru-central1-a — 192.168.1.48/28;
    • ya-ad-rc1a в зоне доступности ru-central1-a — 10.0.0.0/28.
    yc vpc subnet create \
       --name ya-sqlserver-rc1a \
       --zone ru-central1-a \
       --range 192.168.1.0/28 \
       --network-name ya-network
    
    yc vpc subnet create \
      --name ya-sqlserver-rc1b \
      --zone ru-central1-b \
      --range 192.168.1.16/28 \
      --network-name ya-network
    
    yc vpc subnet create \
       --name ya-sqlserver-rc1d \
       --zone ru-central1-d \
       --range 192.168.1.32/28 \
       --network-name ya-network
    
    yc vpc subnet create \
       --name ya-ilb-rc1a \
       --zone ru-central1-a \
       --range 192.168.1.48/28 \
       --network-name ya-network
    
    yc vpc subnet create \
      --name ya-ad-rc1a \
      --zone ru-central1-a \
      --range 10.0.0.0/28 \
      --network-name ya-network
    
    yc vpc subnet create `
       --name ya-sqlserver-rc1a `
       --zone ru-central1-a `
       --range 192.168.1.0/28 `
       --network-name ya-network
    
    yc vpc subnet create `
       --name ya-sqlserver-rc1b `
       --zone ru-central1-b `
       --range 192.168.1.16/28 `
       --network-name ya-network
    
    yc vpc subnet create `
       --name ya-sqlserver-rc1d `
       --zone ru-central1-d `
       --range 192.168.1.32/28 `
       --network-name ya-network
    
    yc vpc subnet create `
       --name ya-ilb-rc1a `
       --zone ru-central1-a `
       --range 192.168.1.48/28 `
       --network-name ya-network
    
    yc vpc subnet create `
       --name ya-ad-rc1a `
       --zone ru-central1-a `
       --range 10.0.0.0/28 `
       --network-name ya-network
    

Создайте внутренний сетевой балансировщикСоздайте внутренний сетевой балансировщик

Bash
PowerShell
yc load-balancer network-load-balancer create \
   --name ya-loadbalancer \
   --type internal
yc load-balancer network-load-balancer create `
   --name ya-loadbalancer `
   --type internal

Создайте обработчикСоздайте обработчик

Bash
PowerShell

Получите идентификатор подсети:

yc vpc subnet get --name ya-ilb-rc1a

Создайте обработчик, указав идентификатор подсети:

yc load-balancer network-load-balancer add-listener \
   --name ya-loadbalancer \
   --listener name=ya-listener,port=1433,target-port=14333,protocol=tcp,internal-address=192.168.1.62,internal-subnet-id=<идентификатор_подсети>
$inlbSubnet = yc vpc subnet get `
   --name ya-ilb-rc1a `
   --format json | ConvertFrom-Json
yc load-balancer network-load-balancer add-listener `
   --name ya-loadbalancer `
   --listener name=ya-listener,port=1433,target-port=14333,protocol=tcp,internal-address=192.168.1.62,internal-subnet-id=$($inlbSubnet.id)

Создайте и подключите целевую группу к балансировщикуСоздайте и подключите целевую группу к балансировщику

Bash
PowerShell
yc load-balancer target-group create \
   --name ya-tg \
   --target address=192.168.1.3,subnet-name=ya-sqlserver-rc1a \
   --target address=192.168.1.19,subnet-name=ya-sqlserver-rc1b \
   --target address=192.168.1.35,subnet-name=ya-sqlserver-rc1d

Скопируйте из ответа идентификатор целевой группы и выполните команду:

yc load-balancer network-load-balancer attach-target-group \
   --name ya-loadbalancer \
   --target-group target-group-id=<идентификатор_целевой_группы>,healthcheck-name=listener,healthcheck-tcp-port=59999
yc load-balancer target-group create `
   --name ya-tg `
   --target address=192.168.1.3,subnet-name=ya-sqlserver-rc1a `
   --target address=192.168.1.19,subnet-name=ya-sqlserver-rc1b `
   --target address=192.168.1.35,subnet-name=ya-sqlserver-rc1d
$TargetGroup = yc load-balancer target-group get `
   --name ya-tg `
   --format json | ConvertFrom-Json
yc load-balancer network-load-balancer attach-target-group `
   --name ya-loadbalancer `
   --target-group target-group-id=$($TargetGroup.id),healthcheck-name=listener,healthcheck-tcp-port=59999

Подготовьте виртуальные машины для группы доступностиПодготовьте виртуальные машины для группы доступности

Подготовьте образы Windows ServerПодготовьте образы Windows Server

Перед созданием ВМ подготовьте свой образ Windows Server, чтобы использовать его в Yandex Cloud со своей собственной лицензией.

Создайте файл с учетными данными администратораСоздайте файл с учетными данными администратора

Создайте файл setpass со скриптом для установки пароля локальной учетной записи администратора. Этот скрипт будет выполняться при создании виртуальных машин через CLI.

Внимание

Файл setpass должен быть в кодировке UTF-8.

Bash
PowerShell
touch ~/setpass
echo '#ps1' >> ~/setpass
echo 'Get-LocalUser | Where-Object SID -like *-500 | Set-LocalUser -Password (ConvertTo-SecureString "YaQWErty123" -AsPlainText -Force)' >> ~/setpass
cd
ni ~/setpass
echo '#ps1' >> ~/setpass
echo 'Get-LocalUser | Where-Object SID -like *-500 | Set-LocalUser -Password (ConvertTo-SecureString "YaQWErty123" -AsPlainText -Force)' >> ~/setpass

Важно

Указанный пароль используется только для тестирования. Используйте собственный сложный пароль при развертывании кластера для работы в продуктовом окружении.

Пароль должен соответствовать требованиям к сложности.

Подробные рекомендации по защите Active Directory читайте на сайте разработчика.

Создайте виртуальные машиныСоздайте виртуальные машины

ВМ нужно создавать на выделенных хостах. Получить идентификатор выделенного хоста можно с помощью Yandex Cloud CLI, выполнив команду yc compute host-group list-hosts (подробнее о команде см. в справочнике).

Создайте ВМ для бастионного хостаСоздайте ВМ для бастионного хоста

Создайте бастионный хост с ОС Windows Server 2022 Datacenter с публичным IP-адресом для доступа к остальным ВМ:

Bash
PowerShell
yc compute instance create \
   --name ya-jump1 \
   --hostname ya-jump1 \
   --zone ru-central1-a \
   --memory 4 \
   --cores 2 \
   --metadata-from-file user-data=setpass \
   --create-boot-disk \
     type=network-ssd,size=50,image-id=<идентификатор_образа_с_Windows> \
   --network-interface \
     subnet-name=ya-ad-rc1a,nat-ip-version=ipv4 \
   --host-id <идентификатор_выделенного_хоста> \
   --async

Примечание

Команды yc compute instance create | create-with-container | update | add-metadata поддерживают подстановку в метаданные ВМ значений переменных окружения. Эти значения, заданные в ключе user-data в формате $<имя_переменной>, в момент выполнения команды Yandex Cloud CLI будут подставлены в метаданные ВМ из переменных окружения среды, в которой выполняется команда.

Чтобы изменить такое поведение, не подставлять значение переменной из среды выполнения команды CLI и передать в метаданные ВМ имя переменной в формате $<имя_переменной>, используйте синтаксис с двумя символами доллара. Например: $$<имя_переменной>.

Подробнее см. в разделе Особенности передачи переменных окружения в метаданных через CLI.

yc compute instance create `
   --name ya-jump1 `
   --hostname ya-jump1 `
   --zone ru-central1-a `
   --memory 4 `
   --cores 2 `
   --metadata-from-file user-data=setpass `
   --create-boot-disk `
     type=network-ssd,size=50,image-id=<идентификатор_образа_с_Windows> `
   --network-interface `
     subnet-name=ya-ad-rc1a,nat-ip-version=ipv4 `
   --host-id <идентификатор_выделенного_хоста> `
   --async

Примечание

Команды yc compute instance create | create-with-container | update | add-metadata поддерживают подстановку в метаданные ВМ значений переменных окружения. Эти значения, заданные в ключе user-data в формате $<имя_переменной>, в момент выполнения команды Yandex Cloud CLI будут подставлены в метаданные ВМ из переменных окружения среды, в которой выполняется команда.

Чтобы изменить такое поведение, не подставлять значение переменной из среды выполнения команды CLI и передать в метаданные ВМ имя переменной в формате $<имя_переменной>, используйте синтаксис с двумя символами доллара. Например: $$<имя_переменной>.

Подробнее см. в разделе Особенности передачи переменных окружения в метаданных через CLI.

Создайте ВМ для Active DirectoryСоздайте ВМ для Active Directory

Bash
PowerShell
yc compute instance create \
   --name ya-ad \
   --hostname ya-ad \
   --zone ru-central1-a \
   --memory 6 \
   --cores 2 \
   --metadata-from-file user-data=setpass \
   --create-boot-disk \
     type=network-ssd,size=50,image-id=<идентификатор_образа_с_Windows> \
   --network-interface \
     subnet-name=ya-ad-rc1a,ipv4-address=10.0.0.3 \
   --host-id <идентификатор_выделенного_хоста> \
   --async
yc compute instance create `
   --name ya-ad `
   --hostname ya-ad `
   --zone ru-central1-a `
   --memory 6 `
   --cores 2 `
   --metadata-from-file user-data=setpass `
   --create-boot-disk `
     type=network-ssd,size=50,image-id=<идентификатор_образа_с_Windows> `
   --network-interface `
     subnet-name=ya-ad-rc1a,ipv4-address=10.0.0.3 `
   --host-id <идентификатор_выделенного_хоста> `
   --async

Создайте ВМ для серверов SQL ServerСоздайте ВМ для серверов SQL Server

Создайте три виртуальных машины с ОС Windows Server 2022 Datacenter для серверов SQL Server:

Bash
PowerShell
yc compute instance create \
   --name ya-mssql1 \
   --hostname ya-mssql1 \
   --zone ru-central1-a \
   --memory 16 \
   --cores 4 \
   --metadata-from-file user-data=setpass \
   --create-boot-disk \
     type=network-ssd,size=50,image-id=<идентификатор_образа_с_Windows> \
   --create-disk \
     type=network-ssd,size=200 \
   --network-interface \
     subnet-name=ya-sqlserver-rc1a,ipv4-address=192.168.1.3 \
   --host-id <идентификатор_выделенного_хоста> \
   --async
yc compute instance create \
   --name ya-mssql2 \
   --hostname ya-mssql2 \
   --zone ru-central1-b \
   --memory 16 \
   --cores 4 \
   --metadata-from-file user-data=setpass \
   --create-boot-disk \
     type=network-ssd,size=50,image-id=<идентификатор_образа_с_Windows> \
   --create-disk \
     type=network-ssd,size=200 \
   --network-interface \
     subnet-name=ya-sqlserver-rc1b,ipv4-address=192.168.1.19 \
   --host-id <идентификатор_выделенного_хоста> \
   --async
yc compute instance create \
   --name ya-mssql3 \
   --hostname ya-mssql3 \
   --zone ru-central1-d \
   --memory 16 \
   --cores 4 \
   --metadata-from-file user-data=setpass \
   --create-boot-disk \
     type=network-ssd,size=50,image-id=<идентификатор_образа_с_Windows> \
   --create-disk \
     type=network-ssd,size=200 \
   --network-interface \
     subnet-name=ya-sqlserver-rc1d,ipv4-address=192.168.1.35 \
   --host-id <идентификатор_выделенного_хоста> \
   --async
yc compute instance create `
   --name ya-mssql1 `
   --hostname ya-mssql1 `
   --zone ru-central1-a `
   --memory 16 `
   --cores 4 `
   --metadata-from-file user-data=setpass `
   --create-boot-disk `
     type=network-ssd,size=50,image-id=<идентификатор_образа_с_Windows> `
   --create-disk `
     type=network-ssd,size=200 `
   --network-interface `
     subnet-name=ya-sqlserver-rc1a,ipv4-address=192.168.1.3 `
   --host-id <идентификатор_выделенного_хоста> `
   --async
yc compute instance create `
   --name ya-mssql2 `
   --hostname ya-mssql2 `
   --zone ru-central1-b `
   --memory 16 `
   --cores 4 `
   --metadata-from-file user-data=setpass `
   --create-boot-disk `
     type=network-ssd,size=50,image-id=<идентификатор_образа_с_Windows> `
   --create-disk `
     type=network-ssd,size=200 `
   --network-interface `
     subnet-name=ya-sqlserver-rc1b,ipv4-address=192.168.1.19 `
   --host-id <идентификатор_выделенного_хоста> `
   --async
yc compute instance create `
   --name ya-mssql3 `
   --hostname ya-mssql3 `
   --zone ru-central1-d `
   --memory 16 `
   --cores 4 `
   --metadata-from-file user-data=setpass `
   --create-boot-disk `
     type=network-ssd,size=50,image-id=<идентификатор_образа_с_Windows> `
   --create-disk `
     type=network-ssd,size=200 `
   --network-interface `
     subnet-name=ya-sqlserver-rc1d,ipv4-address=192.168.1.35 `
   --host-id <идентификатор_выделенного_хоста> `
   --async

Перенесите свои лицензии для Windows ServerПеренесите свои лицензии для Windows Server

Подключитесь к каждой созданной ВМ и активируйте на ней свою лицензию для Windows Server.

Установите и настройте Active DirectoryУстановите и настройте Active Directory

  1. Подключитесь к ВМ ya-jump1 с помощью RDP. Используйте логин Administrator и ваш пароль.

  2. С ВМ ya-jump1 подключитесь к ВМ ya-ad с помощью RDP и той же учетной записи.

  3. На ВМ ya-ad запустите PowerShell и установите необходимые роли сервера:

    PowerShell
    Install-WindowsFeature AD-Domain-Services -IncludeManagementTools
    
  4. Создайте лес Active Directory:

    PowerShell
    Install-ADDSForest `
      -DomainName 'yantoso.net' `
      -Force:$true `
      -SafeModeAdministratorPassword `
        ('YaP@ssw0rd!11' | ConvertTo-SecureString -AsPlainText -Force)
    

    После этого ВМ перезапустится.

  5. Снова подключитесь к ВМ ya-ad.

  6. Переименуйте сайт и добавьте в него созданные подсети:

    PowerShell
    Get-ADReplicationSite 'Default-First-Site-Name' | Rename-ADObject -NewName 'ru-central1'
    New-ADReplicationSubnet -Name '10.0.0.0/28'  -Site 'ru-central1'
    New-ADReplicationSubnet -Name '192.168.1.0/28'  -Site 'ru-central1'
    New-ADReplicationSubnet -Name '192.168.1.16/28' -Site 'ru-central1'
    New-ADReplicationSubnet -Name '192.168.1.32/28' -Site 'ru-central1'
    New-ADReplicationSubnet -Name '192.168.1.48/28' -Site 'ru-central1'
    
  7. Укажите Forwarder для DNS-сервера:

    PowerShell
    Set-DnsServerForwarder '10.0.0.2'
    
  8. Укажите адреса DNS-сервера:

    PowerShell
    Get-NetAdapter | Set-DnsClientServerAddress -ServerAddresses "10.0.0.3,127.0.0.1"
    

Создайте пользователей и группы в Active DirectoryСоздайте пользователей и группы в Active Directory

  1. Подключитесь к ВМ ya-jump1 с помощью RDP. Используйте логин Administrator и ваш пароль.

  2. С ВМ ya-jump1 подключитесь к ВМ ya-ad с помощью RDP и той же учетной записи.

  3. На ВМ ya-ad запустите PowerShell и создайте сервисную учетную запись mssql-svc:

    PowerShell
    New-ADUser `
      -Name mssql-svc `
      -AccountPassword ('YaQWErty123' | ConvertTo-SecureString -AsPlainText -Force) `
      -CannotChangePassword $true `
      -PasswordNeverExpires $true `
      -Enabled $true
    
  4. Создайте группы для доступа к резервным копиям и серверам баз данных:

    PowerShell
    New-AdGroup mssql-admins-grp -GroupScope:Global
    New-AdGroup mssql-backups-grp -GroupScope:Global
    
  5. Добавьте учетную запись Administrator во все группы. В группу mssql-backups-grp добавьте сервисную учетную запись mssql-svc:

    PowerShell
    Add-ADGroupMember mssql-admins-grp -Members Administrator
    Add-ADGroupMember mssql-backups-grp -Members Administrator
    Add-ADGroupMember mssql-backups-grp -Members mssql-svc
    
  6. Задайте SPN сервисной учетной записи:

    PowerShell
    setspn -A MSSQLSvc/ya-mssql1.yantoso.net:1433 yantoso\mssql-svc
    setspn -A MSSQLSvc/ya-mssql1.yantoso.net yantoso\mssql-svc
    
    setspn -A MSSQLSvc/ya-mssql2.yantoso.net:1433 yantoso\mssql-svc
    setspn -A MSSQLSvc/ya-mssql2.yantoso.net yantoso\mssql-svc
    
    setspn -A MSSQLSvc/ya-mssql3.yantoso.net:1433 yantoso\mssql-svc
    setspn -A MSSQLSvc/ya-mssql3.yantoso.net yantoso\mssql-svc
    

Установите и настройте SQL ServerУстановите и настройте SQL Server

Установите SQL Server на серверы баз данных:

  1. Настройте на ВМ с серверами БД доступ в интернет:

    Bash
    PowerShell
    yc compute instance add-one-to-one-nat <идентификатор_ВМ_ya-mssql1> --network-interface-index 0
    yc compute instance add-one-to-one-nat <идентификатор_ВМ_ya-mssql2> --network-interface-index 0
    yc compute instance add-one-to-one-nat <идентификатор_ВМ_ya-mssql3> --network-interface-index 0
    
    yc compute instance add-one-to-one-nat <идентификатор_ВМ_ya-mssql1> --network-interface-index 0
    yc compute instance add-one-to-one-nat <идентификатор_ВМ_ya-mssql2> --network-interface-index 0
    yc compute instance add-one-to-one-nat <идентификатор_ВМ_ya-mssql3> --network-interface-index 0
    
  2. Запустите RDP и подключитесь к ВМ ya-mssql1 с учетной записью Administrator и вашим паролем. Для подключения используйте публичный IP-адрес ВМ.

  3. Запустите PowerShell и установите роль:

    PowerShell
    Install-WindowsFeature Failover-Clustering -IncludeManagementTools
    
  4. Перезапустите ВМ.

  5. Снова подключитесь к ВМ ya-mssql1 и запустите PowerShell.

  6. Инициализируйте и отформатируйте второй логический диск:

    PowerShell
    Get-Disk | `
      Where-Object PartitionStyle -Eq "RAW" | `
        Initialize-Disk -PassThru -PartitionStyle:GPT | `
          New-Partition -DriveLetter 'X' -UseMaximumSize | `
            Format-Volume `
               -FileSystem:NTFS `
               -AllocationUnitSize:64KB `
               -Force `
               -ShortFileNameSupport $false `
               -Confirm:$false
    

    Появится запрос подтверждения форматирования диска. Нажмите кнопку Format disk. Нажмите кнопку Start. После завершения форматирования нажмите кнопку OK.

  7. Подготовьте папки для дистрибутива, резервного копирования, хранения баз данных, логов и временных файлов:

    PowerShell
    mkdir C:\dist
    mkdir X:\BACKUP
    mkdir X:\DB
    mkdir X:\DBLOG
    mkdir X:\TEMPDB
    mkdir X:\TEMPDBLOG
    
  8. Загрузите в папку C:\dist англоязычный образ SQL Server 2022 из интернета.

  9. Установите модуль SqlServer:

    PowerShell
    Install-Module -Name SqlServer
    
  10. При запросе подтверждения установки введите Y.

  11. Импортируйте команды модуля SqlServer для PowerShell:

    PowerShell
    Import-Module SQLServer
    
  12. Укажите адрес DNS-сервера:

    PowerShell
    Get-NetAdapter | Set-DnsClientServerAddress -ServerAddresses "10.0.0.3"
    

    Подготовьте данные для доступа к домену:

    PowerShell
    $domain_credential = `
      New-Object System.Management.Automation.PSCredential (
          'yantoso\Administrator', `
          ('YaQWErty123' | ConvertTo-SecureString -AsPlainText -Force))
    

    Добавьте сервер БД в домен:

    PowerShell
    Add-Computer -DomainCredential $domain_credential -DomainName 'yantoso.net' -Restart -Force
    

    ВМ автоматически перезапустится.

  13. После перезапуска снова подключитесь к ВМ с логином yantoso\Administrator, откройте PowerShell.

  14. Настройте необходимые права служебной учетной записи:

    PowerShell
    & secedit /export /cfg sec_conf_export.ini /areas user_rights
    
    $secConfig = Get-Content sec_conf_export.ini | Select-Object -SkipLast 3
    $versionSection = Get-Content sec_conf_export.ini | Select-Object -Last 3
    
    $SID = Get-WmiObject `
      -Class Win32_UserAccount `
      -Filter "name='mssql-svc' and domain='yantoso'" | `
        Select-Object -ExpandProperty SID
    
    $isSeManageVolumePrivilegeDefined = $secConfig | `
      Select-String SeManageVolumePrivilege
    
    if ($isSeManageVolumePrivilegeDefined) {
      $secConfig = $secConfig -replace '^SeManageVolumePrivilege .+', "`$0,*$SID"
    } else {
      $secConfig = $secConfig + "SeManageVolumePrivilege = *$SID"
    }
    
    $isSeLockMemoryPrivilegeDefined = $secConfig | `
      Select-String SeLockMemoryPrivilege
    
    if ($isSeLockMemoryPrivilegeDefined) {
      $secConfig = $secConfig -replace '^SeLockMemoryPrivilege .+', "`$0,*$SID"
    } else {
      $secConfig = $secConfig + "SeLockMemoryPrivilege = *$SID"
    }
    
    $secConfig = $secConfig + $versionSection
    $secConfig | Set-Content sec_conf_import.ini
    
    secedit /configure /db secedit.sdb /cfg sec_conf_import.ini /areas user_rights
    
    Remove-Item sec_conf_import.ini
    Remove-Item sec_conf_export.ini
    
  15. Настройте файрвол:

    PowerShell
    New-NetFirewallRule `
      -Group "MSSQL" `
      -DisplayName "SQL Server Default" `
      -Name "MSSQLServer-In-TCP" `
      -LocalPort 1433 `
      -Action "Allow" `
      -Protocol "TCP"
    
    New-NetFirewallRule `
      -Group "MSSQL" `
      -DisplayName "SQL Server AAG Custom" `
      -Name "MSSQLAAG-In-TCP" `
      -LocalPort 14333 `
      -Action "Allow" `
      -Protocol "TCP"
    
    New-NetFirewallRule `
      -Group "MSSQL" `
      -DisplayName "MSSQL HADR Default" `
      -Name "MSSQLHADR-In-TCP" `
      -LocalPort 5022 `
      -Action "Allow" `
      -Protocol "TCP"
    
    New-NetFirewallRule `
      -Group "MSSQL" `
      -DisplayName "MSSQL NLB Probe" `
      -Name "MSSQLAAG-NLB-In-TCP" `
      -LocalPort 59999 `
      -Action "Allow" `
      -Protocol "TCP"
    
  16. Установите SQL Server. Смонтируйте образ, выполните установку и отсоедините образ:

    PowerShell
    Mount-DiskImage -ImagePath C:\dist\<имя_образа_SQL_Server>.iso
    
    & D:\setup.exe /QUIET /INDICATEPROGRESS /IACCEPTSQLSERVERLICENSETERMS `
      /ACTION=INSTALL /FEATURES=SQLENGINE /INSTANCENAME=MSSQLSERVER `
      /SQLSVCACCOUNT="yantoso\mssql-svc" /SQLSVCPASSWORD="YaQWErty123" `
      /SQLSYSADMINACCOUNTS="yantoso\mssql-admins-grp" /UpdateEnabled=FALSE `
      /SQLBACKUPDIR="X:\BACKUP" /SQLTEMPDBDIR="X:\TEMPDB" /SQLTEMPDBLOGDIR="X:\TEMPDBLOG" `
      /SQLUSERDBDIR="X:\DB" /SQLUSERDBLOGDIR="X:\DBLOG"
    
    Dismount-DiskImage -ImagePath C:\dist\<имя_образа_MSSQL_Server>.iso
    
  17. Повторите шаги 2-16 для ВМ ya-mssql2 и ya-mssql3.

  18. Отключите у ВМ доступ в интернет:

    Bash
    PowerShell
    yc compute instance remove-one-to-one-nat <идентификатор_ВМ_ya-mssql1> --network-interface-index 0
    yc compute instance remove-one-to-one-nat <идентификатор_ВМ_ya-mssql2> --network-interface-index 0
    yc compute instance remove-one-to-one-nat <идентификатор_ВМ_ya-mssql3> --network-interface-index 0
    
    yc compute instance remove-one-to-one-nat <идентификатор_ВМ_ya-mssql1> --network-interface-index 0
    yc compute instance remove-one-to-one-nat <идентификатор_ВМ_ya-mssql2> --network-interface-index 0
    yc compute instance remove-one-to-one-nat <идентификатор_ВМ_ya-mssql3> --network-interface-index 0
    
  19. Подключитесь к ВМ ya-jump1 с помощью RDP. Используйте логин Administrator и ваш пароль.

  20. С ВМ ya-jump1 подключитесь к ВМ ya-mssql1 с помощью RDP и той же учетной записи. Настройте статический адрес со своей маской подсети:

    $IPAddress = Get-NetAdapter | Get-NetIPAddress -AddressFamily IPv4 | Select-Object -ExpandProperty IPAddress
    $InterfaceName = Get-NetAdapter | Select-Object -ExpandProperty Name
    $Gateway = Get-NetIPConfiguration | Select-Object -ExpandProperty IPv4DefaultGateway | Select-Object -ExpandProperty NextHop
    
    netsh interface ip set address $InterfaceName static $IPAddress 255.255.255.192 $Gateway
    
  21. Повторите шаги 19-20 для ВМ ya-mssql2 и ya-mssql3.

  22. Для работы группы доступности Always On требуется настроенный Windows Server Failover Cluster. Для его создания необходимо протестировать серверы БД. На любой из ВМ кластера выполните:

    PowerShell
    Test-Cluster -Node 'ya-mssql1.yantoso.net'
    Test-Cluster -Node 'ya-mssql2.yantoso.net'
    Test-Cluster -Node 'ya-mssql3.yantoso.net'
    

Создайте Windows Server Failover ClusterСоздайте Windows Server Failover Cluster

  1. Подключитесь к ВМ ya-jump1 с помощью RDP. Используйте логин Administrator и ваш пароль.

  2. С ВМ ya-jump1 подключитесь к ВМ ya-mssql1 с помощью RDP и учетной записи yantoso\Administrator.

  3. Создайте кластер из трех серверов БД:

    PowerShell
    New-Cluster `
      -Name 'wsfc' `
      -Node 'ya-mssql1.yantoso.net','ya-mssql2.yantoso.net','ya-mssql3.yantoso.net' `
      -NoStorage `
      -StaticAddress 192.168.1.4
    
    Test-Cluster
    
    Get-ClusterResource -Name 'Cluster IP Address' | `
      Stop-ClusterResource
    
    Get-ClusterResource -Name 'Cluster IP Address' | `
      Set-ClusterParameter -Multiple `
        @{
          "Address"="169.254.1.1";
          "SubnetMask"="255.255.255.255";
          "OverrideAddressMatch"=1;
          "EnableDhcp"=0
        }
    
    Get-ClusterResource -Name 'Cluster Name' | Start-ClusterResource -Wait 60
    
  4. Включите на всех ВМ TCP/IP и добавьте порт 14333 для получения трафика:

    PowerShell
    [reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
    [reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement")
    
    $nodes = @('ya-mssql1.yantoso.net','ya-mssql2.yantoso.net','ya-mssql3.yantoso.net')
    
    foreach ($node in $nodes) {
      $smo = [Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer]::new($node)
      $np = $smo.GetSmoObject("ManagedComputer[@Name=`'$node`']/ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='NP']")
      $tcp = $smo.GetSmoObject("ManagedComputer[@Name=`'$node`']/ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Tcp']")
      $ipall = $smo.GetSmoObject("ManagedComputer[@Name=`'$node`']/ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Tcp']/IPAddress[@Name='IPAll']")
    
      if (-not $ipall.IPAddressProperties['TcpPort'].Value -ne '1433,14333') {
        $ipall.IPAddressProperties['TcpPort'].Value = '1433,14333'
        $tcp.Alter()
        $altered = $true
      }
    
      if (-not $tcp.IsEnabled) {
        $tcp.IsEnabled = $true
        $tcp.Alter()
        $altered = $true
      }
      if (-not $np.IsEnabled) {
        $np.IsEnabled = $true
        $np.Alter()
        $altered = $true
      }
    
      if ($altered) {
        Get-Service -Name 'MSSQLSERVER' -ComputerName $node | Restart-Service -Force
        Start-Sleep -Seconds 60
      }
    }
    
  5. Назначьте служебному пользователю mssql-svc разрешения на управление серверами:

    PowerShell
    Add-SqlLogin -Path "SQLSERVER:\SQL\ya-mssql1\Default" `
      -LoginName "yantoso\mssql-svc" `
      -LoginType "WindowsUser" `
      -Enable `
      -GrantConnectSql
    
    Add-SqlLogin -Path "SQLSERVER:\SQL\ya-mssql2\Default" `
      -LoginName "yantoso\mssql-svc" `
      -LoginType "WindowsUser" `
      -Enable `
      -GrantConnectSql
    
    Add-SqlLogin -Path "SQLSERVER:\SQL\ya-mssql3\Default" `
      -LoginName "yantoso\mssql-svc" `
      -LoginType "WindowsUser" `
      -Enable `
      -GrantConnectSql
    
    $mssql1 = Get-Item "SQLSERVER:\SQL\ya-mssql1.yantoso.net\Default"
    $mssql1.Roles['sysadmin'].AddMember('yantoso\mssql-svc')
    $mssql1.Roles['sysadmin'].Alter()
    
    $mssql2 = Get-Item "SQLSERVER:\SQL\ya-mssql2.yantoso.net\Default"
    $mssql2.Roles['sysadmin'].AddMember('yantoso\mssql-svc')
    $mssql2.Roles['sysadmin'].Alter()
    
    $mssql3 = Get-Item "SQLSERVER:\SQL\ya-mssql3.yantoso.net\Default"
    $mssql3.Roles['sysadmin'].AddMember('yantoso\mssql-svc')
    $mssql3.Roles['sysadmin'].Alter()
    

Настройте Always OnНастройте Always On

  1. По очереди подключитесь к каждому серверу и включите SqlAlwaysOn:

    1. Подключитесь к узлу кластера Windows Server Failover Cluster (WSFC), на котором размещен экземпляр SQL Server.
    2. В меню Start выберите All programs → Microsoft SQL Server → Configuration Tools → SQL Server Configuration Manager.
    3. В SQL Server Configuration Manager, нажмите правой кнопкой мыши на экземпляр SQL Server, для которого требуется включить Always On Availability Groups, и выберите Properties.
    4. Перейдите на вкладку Always On High Availability.
    5. Включите опцию Enable Always On Availability Groups и перезагрузите службу экземпляра SQL Server.
  2. Создайте и запустите эндпоинты HADR:

    PowerShell
    New-SqlHADREndpoint -Port 5022 -Owner sa `
     -Encryption Supported -EncryptionAlgorithm Aes `
     -Name AlwaysonEndpoint `
     -Path "SQLSERVER:\SQL\ya-mssql1.yantoso.net\Default"
    
    Set-SqlHADREndpoint -Path "SQLSERVER:\SQL\ya-mssql1.yantoso.net\Default\Endpoints\AlwaysonEndpoint" -State Started
    
    New-SqlHADREndpoint -Port 5022 -Owner sa `
      -Encryption Supported -EncryptionAlgorithm Aes `
      -Name AlwaysonEndpoint `
      -Path "SQLSERVER:\SQL\ya-mssql2.yantoso.net\Default"
    
    Set-SqlHADREndpoint -Path "SQLSERVER:\SQL\ya-mssql2.yantoso.net\Default\Endpoints\AlwaysonEndpoint" -State Started
    
    New-SqlHADREndpoint -Port 5022 -Owner sa `
      -Encryption Supported -EncryptionAlgorithm Aes `
      -Name AlwaysonEndpoint `
      -Path "SQLSERVER:\SQL\ya-mssql3.yantoso.net\Default"
    
    Set-SqlHADREndpoint -Path "SQLSERVER:\SQL\ya-mssql3.yantoso.net\Default\Endpoints\AlwaysonEndpoint" -State Started
    
  3. Создайте переменные с параметрами реплик. Основной репликой будет выступать ya-mssql1, второй и третьей — ya-mssql2 и ya-mssql3.

    PowerShell
    $PrimaryReplica = New-SqlAvailabilityReplica `
     -Name ya-mssql1 `
     -EndpointUrl "TCP://ya-mssql1.yantoso.net:5022" `
     -FailoverMode "Automatic" `
     -AvailabilityMode "SynchronousCommit" `
     -AsTemplate -Version 13
    
    $SecondaryReplica = New-SqlAvailabilityReplica `
      -Name ya-mssql2 `
      -EndpointUrl "TCP://ya-mssql2.yantoso.net:5022" `
      -FailoverMode "Automatic" `
      -AvailabilityMode "SynchronousCommit" `
      -AsTemplate -Version 13
    
    $ThirdReplica = New-SqlAvailabilityReplica `
      -Name ya-mssql3 `
      -EndpointUrl "TCP://ya-mssql3.yantoso.net:5022" `
      -FailoverMode "Automatic" `
      -AvailabilityMode "SynchronousCommit" `
      -AsTemplate -Version 13
    
  4. Создайте из реплик группу доступности MyAG и добавьте туда первый сервер:

    PowerShell
    New-SqlAvailabilityGroup `
        -Name 'MyAG' `
        -AvailabilityReplica @($PrimaryReplica, $SecondaryReplica, $ThirdReplica) `
        -Path "SQLSERVER:\SQL\ya-mssql1.yantoso.net\Default"
    
  5. Добавьте оставшиеся серверы в группу доступности:

    PowerShell
    Join-SqlAvailabilityGroup -Path "SQLSERVER:\SQL\ya-mssql2.yantoso.net\Default" -Name 'MyAG'
    Join-SqlAvailabilityGroup -Path "SQLSERVER:\SQL\ya-mssql3.yantoso.net\Default" -Name 'MyAG'
    
  6. Создайте Listener с IP-адресом 192.168.1.62, который принадлежит внутреннему сетевому балансировщику:

    PowerShell
    $NLBIPAddress = '192.168.1.62'
    
    Get-Cluster | `
      Add-ClusterResource -Name 'MyAG Network Name' -Group 'MyAG' -ResourceType 'Network Name'
    Get-ClusterResource -Name 'MyAG Network Name' | `
      Set-ClusterParameter -Multiple `
        @{
          Name = 'MyAGlistener'
          DnsName = 'MyAGlistener'
        }
    
    Get-Cluster | `
      Add-ClusterResource -Name 'My AG listener IP Address' -Group 'MyAG' -ResourceType 'IP Address'
    Get-ClusterResource -Name 'My AG listener IP Address' | `
      Set-ClusterParameter -Multiple `
        @{
          Address=$NLBIPAddress
          ProbePort=59999
          SubnetMask="255.255.255.255"
          Network="Cluster Network 1"
          EnableDhcp=0
        }
    
    Add-ClusterResourceDependency `
      -Resource 'MyAG Network Name' `
      -Provider 'My AG listener IP Address'
    
    Stop-ClusterResource 'MyAG'
    
    Add-ClusterResourceDependency `
      -Resource 'MyAG' `
      -Provider 'MyAG Network Name'
    
    Start-ClusterResource 'MyAG'
    
  7. Назначьте порт 14333 обработчику:

    PowerShell
    Set-SqlAvailabilityGroupListener `
      -Port 14333 `
      -Path "SQLSERVER:\Sql\ya-mssql1.yantoso.net\Default\AvailabilityGroups\MyAG\AvailabilityGroupListeners\MyAGlistener"
    
  8. Откройте порт 14333 на всех ВМ кластера:

    PowerShell
    $nodes = @('ya-mssql1.yantoso.net','ya-mssql2.yantoso.net','ya-mssql3.yantoso.net')
    
    foreach ($node in $nodes) {
      $smo = [Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer]::new($node)
      $tcp = $smo.GetSmoObject("ManagedComputer[@Name=`'$node`']/ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Tcp']")
      $np = $smo.GetSmoObject("ManagedComputer[@Name=`'$node`']/ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='NP']")
      $ipall = $smo.GetSmoObject("ManagedComputer[@Name=`'$node`']/ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Tcp']/IPAddress[@Name='IPAll']")
    
      if (-not $ipall.IPAddressProperties['TcpPort'].Value -ne '1433,14333') {
        $ipall.IPAddressProperties['TcpPort'].Value = '1433,14333'
        $tcp.Alter()
        $altered = $true
      }
    
      if (-not $tcp.IsEnabled) {
        $tcp.IsEnabled = $true
        $tcp.Alter()
        $altered = $true
    
      }
      if (-not $np.IsEnabled) {
        $np.IsEnabled = $true
        $np.Alter()
        $altered = $true
      }
    
      if ($altered) {
        Get-Service -Name 'MSSQLSERVER' -ComputerName $node | Restart-Service
        Start-Sleep -Seconds 60
      }
    }
    
  9. Создайте базу данных на сервере ya-mssql1:

    PowerShell
    Invoke-Sqlcmd -Query "CREATE DATABASE MyDatabase" -ServerInstance 'ya-mssql1.yantoso.net'
    
  10. Задайте настройки доступа к папке с резервными копиями на сервере:

    PowerShell
    New-SMBShare -Name SQLBackup -Path "X:\BACKUP" -FullAccess "yantoso\mssql-backups-grp"
    
    $Acl = Get-Acl "X:\BACKUP"
    $AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("yantoso\mssql-backups-grp","Read", "ContainerInherit, ObjectInherit", "None", "Allow")
    $Acl.AddAccessRule($AccessRule)
    
    $Acl | Set-Acl "X:\BACKUP"
    
  11. Создайте резервную копию базы MyDatabase на ВМ ya-mssql1:

    PowerShell
    Backup-SqlDatabase `
      -Database "MyDatabase" -Initialize `
      -BackupFile "MyDatabase.bak" `
      -ServerInstance "ya-mssql1.yantoso.net"
    
    Backup-SqlDatabase `
      -Database "MyDatabase" -Initialize `
      -BackupFile "MyDatabase.log" `
      -ServerInstance "ya-mssql1.yantoso.net" `
      -BackupAction Log
    
  12. Восстановите базу данных на сервере ya-mssql2 из резервной копии:

    PowerShell
    Restore-SqlDatabase `
      -Database "MyDatabase" `
      -BackupFile "\\ya-mssql1.yantoso.net\SQLBackup\MyDatabase.bak" `
      -Path "SQLSERVER:\SQL\ya-mssql2.yantoso.net\Default" `
      -NORECOVERY
    
    Restore-SqlDatabase `
      -Database "MyDatabase" `
      -BackupFile "\\ya-mssql1.yantoso.net\SQLBackup\MyDatabase.log" `
      -Path "SQLSERVER:\SQL\ya-mssql2.yantoso.net\Default" `
      -RestoreAction Log `
      -NORECOVERY
    
  13. Восстановите базу данных на сервере ya-mssql3 из резервной копии:

    PowerShell
    Restore-SqlDatabase `
      -Database "MyDatabase" `
      -BackupFile "\\ya-mssql1.yantoso.net\SQLBackup\MyDatabase.bak" `
      -Path "SQLSERVER:\SQL\ya-mssql3.yantoso.net\Default" `
      -NORECOVERY
    
    Restore-SqlDatabase `
      -Database "MyDatabase" `
      -BackupFile "\\ya-mssql1.yantoso.net\SQLBackup\MyDatabase.log" `
      -Path "SQLSERVER:\SQL\ya-mssql3.yantoso.net\Default" `
      -RestoreAction Log `
      -NORECOVERY
    
  14. Добавьте все базы данных в группу доступности:

    PowerShell
    Add-SqlAvailabilityDatabase `
     -Path "SQLSERVER:\SQL\ya-mssql1.yantoso.net\Default\AvailabilityGroups\MyAG" `
     -Database "MyDatabase"
    
    Add-SqlAvailabilityDatabase `
      -Path "SQLSERVER:\SQL\ya-mssql2.yantoso.net\Default\AvailabilityGroups\MyAG" `
      -Database "MyDatabase"
    
    Add-SqlAvailabilityDatabase `
      -Path "SQLSERVER:\SQL\ya-mssql3.yantoso.net\Default\AvailabilityGroups\MyAG" `
      -Database "MyDatabase"
    

Протестируйте группу доступностиПротестируйте группу доступности

Тестирование работы базы данных можно провести на любой из доменных ВМ. Для входа используйте учетную запись yantoso\Administrator.

  1. Создайте таблицу в реплицируемой БД MyDatabase:

    PowerShell
    Invoke-Sqlcmd -ServerInstance 'MyAGlistener.yantoso.net' -Query @"
    CREATE TABLE MyDatabase.dbo.test (
      test_id INT IDENTITY(1,1) PRIMARY KEY,
      test_name VARCHAR(30) NOT NULL
    );
    "@
    
  2. Добавьте в таблицу БД новую строку:

    PowerShell
    Invoke-Sqlcmd -ServerInstance 'MyAGlistener.yantoso.net' -Query @"
    INSERT INTO MyDatabase.dbo.test (test_name) 
    VALUES ('one')
    "@
    
  3. Проверьте, появилась ли строка в таблице:

    PowerShell
    Invoke-Sqlcmd -ServerInstance 'MyAGlistener.yantoso.net' -Query @"
    SELECT *
    FROM MyDatabase.dbo.test;
    "@
    

    Результат:

    test_id test_name
    ------- ---------
          1 one
    
  4. Проверьте имя основной реплики БД:

    PowerShell
    Invoke-Sqlcmd -Query "SELECT @@SERVERNAME" -ServerInstance 'MyAGlistener.yantoso.net'
    

    Результат:

    Column1
    -------
    YA-MSSQL1
    
  5. Выполните аварийное переключение на вторую реплику:

    PowerShell
    Invoke-Sqlcmd -Query "ALTER AVAILABILITY GROUP MyAg FAILOVER" -ServerInstance 'ya-mssql2.yantoso.net'
    
  6. Снова проверьте имя основной реплики:

    PowerShell
    Invoke-Sqlcmd -Query "SELECT @@SERVERNAME" -ServerInstance 'MyAGlistener.yantoso.net'
    

    Результат:

    Column1
    -------
    YA-MSSQL2
    
  7. Добавьте еще одну строку в таблицу, чтобы проверить работу второй реплики на запись:

    PowerShell
    Invoke-Sqlcmd -ServerInstance 'MyAGlistener.yantoso.net' -Query @"
    INSERT INTO MyDatabase.dbo.test (test_name) 
    VALUES ('two')
    "@
    
  8. Убедитесь, что строка добавлена:

    PowerShell
    Invoke-Sqlcmd -ServerInstance 'MyAGlistener.yantoso.net' -Query "SELECT * FROM MyDatabase.dbo.test"
    

    Результат:

    test_id test_name
    ------- ---------
          1 one
          2 two
    

Как удалить созданные ресурсыКак удалить созданные ресурсы

Чтобы перестать платить за созданные ресурсы, удалите созданные виртуальные машины и балансировщик:

  • ya-jump1;
  • ya-ad;
  • ya-mssql1;
  • ya-mssql2;
  • ya-mssql3;
  • ya-loadbalancer.

Была ли статья полезна?

Предыдущая
Развертывание Remote Desktop Gateway
Следующая
Лицензии Microsoft в Yandex Cloud
Проект Яндекса
© 2025 ООО «Яндекс.Облако»