Перенос группы доступности с помощью распределенной группы доступности

Используйте распределенную группу доступности для переноса баз данных в группе доступности Always On, сохраняя поддержку высокой доступности и аварийного восстановления (HADR) после миграции в SQL Server на виртуальных машинах Azure.

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

Эта статья касается баз данных, участвующих в группе доступности, и требует наличия отказоустойчивого кластера Windows Server (WSFC) и прослушивателя группы доступности. Кроме того, можно перенести базы данных из автономного экземпляра SQL Server.

Схема, объясняющая миграцию группы доступности с помощью распределенной группы доступности.

Начальная настройка

Первый шаг — создание виртуальных машин SQL Server в Azure. Это можно сделать с помощью портала Azure, Azure PowerShell или шаблона ARM.

Обязательно настройте виртуальные машины SQL Server в соответствии с предварительными требованиями. Выберите между развертыванием одной подсети, которая использует Azure Load Balancer или распределенное сетевое имя для маршрутизации трафика в прослушиватель группы доступности или развертывание с несколькими подсетью, которое не имеет такого требования. Рекомендуется использовать развертывание в нескольких подсетях. Дополнительные сведения см. в разделе о возможности подключения.

Для простоты присоедините целевые виртуальные машины SQL Server к тому же домену, к которому присоединены исходные экземпляры SQL Server. Или же присоедините целевую виртуальную машину SQL Server к домену, который входит в федерацию домена исходного экземпляра SQL Server.

Чтобы вы могли использовать автоматическое заполнение для создания распределенной группы доступности, имя экземпляра для глобального первичного сервера (источника) распределенной группы доступности должно совпадать с именем экземпляра сервера пересылки (назначения) распределенной группы доступности. Если имеется несоответствие имени экземпляра между глобальным первичным и переадресатором, необходимо использовать ручное начальное значение для создания DAG и вручную добавить дополнительные файлы базы данных в будущем.

В этой статье используются следующие примеры параметров:

  • Имя базы данных: Adventureworks2022
  • Имена исходных компьютеров: OnPremNode1 (глобальный первичный в DAG), OnPremNode2
  • Исходные имена экземпляров SQL Server: MSSQLSERVERMSSQLSERVER
  • Имя группы доступности источника: OnPremAg
  • Имя прослушивателя группы доступности источника: OnPremAG_LST
  • Целевые имена виртуальных машин SQL Server: SQLVM1 (пересылка в DAG) SQLVM2
  • Целевой SQL Server в именах экземпляров виртуальной машины Azure: MSSQLSERVERMSSQLSERVER
  • Имя целевой группы доступности: AzureAG
  • Имя прослушивателя группы доступности источника: AzureAG_LST
  • Имя конечной точки: Hadr_endpoint
  • Имя распределенной группы доступности: DAG
  • Доменное имя: Contoso

Создание конечных точек

Используйте Transact-SQL (T-SQL) для создания конечных точек как в двух исходных экземплярах (OnPremNode1, так OnPremNode2и в целевых экземплярах SQL Server).SQLVM1SQLVM2

Если у вас уже есть группа доступности, настроенная для исходных экземпляров, выполните этот скрипт только в двух целевых экземплярах.

Чтобы создать конечные точки, выполните этот скрипт T-SQL на исходном и целевом серверах:

CREATE ENDPOINT [Hadr_endpoint] STATE = STARTED AS TCP (
    LISTENER_PORT = 5022,
    LISTENER_IP = ALL
)
FOR DATA_MIRRORING(ROLE = ALL,
    AUTHENTICATION = WINDOWS NEGOTIATE,
    ENCRYPTION = REQUIRED ALGORITHM AES);
GO

Учетные записи домена автоматически имеют доступ к конечным точкам, но учетные записи служб могут не быть автоматически частью группы sysadmin и могут не иметь разрешения на подключение. Чтобы вручную предоставить учетной записи службы SQL Server разрешение на подключение к конечной точке, выполните следующий скрипт T-SQL на обоих серверах:

GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [<your account>];

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

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

Если у вас уже есть группа доступности на исходных экземплярах, пропустите этот раздел.

Используйте Transact-SQL (T-SQL), чтобы создать группу доступности (OnPremAG) между двумя исходными экземплярами (OnPremNode1, ) OnPremNode2для примера Adventureworks2022 базы данных.

Чтобы создать группу доступности в исходных экземплярах, выполните этот сценарий в исходной первичной реплике (OnPremNode1):

CREATE AVAILABILITY GROUP [OnPremAG]
WITH (
    AUTOMATED_BACKUP_PREFERENCE = PRIMARY,
    DB_FAILOVER = OFF,
    DTC_SUPPORT = NONE
)
FOR DATABASE [Adventureworks2022] REPLICA
ON N'OnPremNode1' WITH (
    ENDPOINT_URL = N'TCP://OnPremNode1.contoso.com:5022',
    FAILOVER_MODE = AUTOMATIC,
    AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
    SEEDING_MODE = AUTOMATIC,
    SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)
),
N'OnPremNode2' WITH (
    ENDPOINT_URL = N'TCP://OnPremNode2.contoso.com:5022',
    FAILOVER_MODE = AUTOMATIC,
    AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
    SEEDING_MODE = AUTOMATIC,
    SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)
);

Затем необходимо присоединить вторичную реплику (OnPremNode2) к группе доступности (OnPremAg).

Для присоединения к группе доступности выполните во вторичной реплике исходного экземпляра этот скрипт:

ALTER AVAILABILITY GROUP [OnPremAG] JOIN;
GO
ALTER AVAILABILITY GROUP [OnPremAG] GRANT CREATE ANY DATABASE;
GO

Наконец, создайте прослушиватель для глобальной группы доступности пересылки (OnPremAG).

Чтобы создать прослушиватель, выполните в первичной реплике исходного экземпляра этот скрипт:

USE [master]
GO

ALTER AVAILABILITY GROUP [OnPremAG]
ADD LISTENER N'OnPremAG_LST' (
    WITH IP (
        (<available_static_ip>, <mask>),
        PORT = 60173
    )
);
GO

Создание целевой группы доступности

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

Если у вас уже есть группа доступности, настроенная между экземплярами SQL Server в Azure, пропустите этот раздел.

Используйте Transact-SQL (T-SQL) для создания группы доступности (AzureAG) на целевых экземплярах SQL Server (SQLVM1 и SQLVM2).

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

CREATE AVAILABILITY GROUP [AzureAG] FOR REPLICA
ON N'SQLVM1' WITH (
    ENDPOINT_URL = N'TCP://SQLVM1.contoso.com:5022',
    FAILOVER_MODE = MANUAL,
    AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
    BACKUP_PRIORITY = 50,
    SECONDARY_ROLE(ALLOW_CONNECTIONS = NO),
    SEEDING_MODE = AUTOMATIC
),
N'SQLVM2' WITH (
    ENDPOINT_URL = N'TCP://SQLVM2.contoso.com:5022',
    FAILOVER_MODE = MANUAL,
    AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
    BACKUP_PRIORITY = 50,
    SECONDARY_ROLE(ALLOW_CONNECTIONS = NO),
    SEEDING_MODE = AUTOMATIC
);
GO

Затем присоединитесь к целевой вторичной реплике (SQLVM2) к группе доступности (AzureAG).

Выполните во вторичной реплике целевого экземпляра этот скрипт:

ALTER AVAILABILITY GROUP [AzureAG] JOIN;
GO
ALTER AVAILABILITY GROUP [AzureAG] GRANT CREATE ANY DATABASE;
GO

Наконец, создайте прослушиватель (AzureAG_LST) для целевой группы доступности (AzureAG). Если вы развернули виртуальные машины SQL Server в нескольких подсетях, создайте прослушиватель с помощью Transact-SQL. Если вы развернули виртуальные машины SQL Server в одной подсети, настройте для прослушивателя службу Azure Load Balancer или имя распределенной сети.

Чтобы создать прослушиватель, выполните в первичной реплике группы доступности в Azure этот скрипт.

ALTER AVAILABILITY GROUP [AzureAG]
ADD LISTENER N'AzureAG_LST' (
    WITH IP (
        (N'<primary replica_secondary_ip>', N'<primary_mask>'),
        (N'<secondary replica_secondary_ip>', N'<secondary_mask>')
    ),
    PORT = <port_number_you_set>
);
GO

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

После настройки исходных (OnPremAG) и целевыхAzureAG групп доступности создайте распределенную группу доступности, чтобы охватывать обе отдельные группы доступности.

Используйте Transact-SQL в исходном основном () и группе доступности SQL Server (OnPremNode1OnPremAG) для создания распределенной группы доступности (DAG).

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

CREATE AVAILABILITY GROUP [DAG]
WITH (DISTRIBUTED) AVAILABILITY GROUP
ON 'OnPremAG' WITH (
    LISTENER_URL = 'tcp://OnPremAG_LST.contoso.com:5022',
    AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
    FAILOVER_MODE = MANUAL,
    SEEDING_MODE = AUTOMATIC
),
'AzureAG' WITH (
    LISTENER_URL = 'tcp://AzureAG_LST.contoso.com:5022',
    AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
    FAILOVER_MODE = MANUAL,
    SEEDING_MODE = AUTOMATIC
);
GO

Примечание.

Для режима заполнения выбрано значение AUTOMATIC, так как на целевом и исходном экземплярах используется одна и та же версия SQL Server. Если целевой объект SQL Server является более высокой или если глобальный первичный и пересылка имеют разные имена экземпляров, создайте распределенную группу доступности и присоедините вторичную группу доступности к распределенной группе доступности с SEEDING_MODE заданным значением MANUAL. Затем вручную восстановите базы данных из исходного экземпляра SQL Server в целевой. Дополнительные сведения см. в статье об обновлении версий во время миграции.

После создания распределенной группы доступности присоедините целевую группу доступности (AzureAG) к экземпляру целевого сервера пересылки (SQLVM1) к распределенной группе доступности (DAG).

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

ALTER AVAILABILITY GROUP [DAG]
INNER JOIN AVAILABILITY GROUP
ON 'OnPremAG' WITH (
        LISTENER_URL = 'tcp://OnPremAG_LST.contoso.com:5022',
        AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
        FAILOVER_MODE = MANUAL,
        SEEDING_MODE = AUTOMATIC
        ),
'AzureAG' WITH (
    LISTENER_URL = 'tcp://AzureAG_LST.contoso.com:5022',
    AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
    FAILOVER_MODE = MANUAL,
    SEEDING_MODE = AUTOMATIC
);
GO

Если необходимо отменить, приостановить или отложить синхронизацию между исходными и целевыми группами доступности (например, проблемами с производительностью), запустите этот скрипт на исходном глобальном первичном экземпляре (OnPremNode1):

ALTER AVAILABILITY GROUP [DAG]
MODIFY AVAILABILITY GROUP ON 'AzureAG'
WITH (SEEDING_MODE = MANUAL);

Дополнительные сведения см. в статье об отмене автоматического заполнения на сервере пересылки.