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

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

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

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

Diagram explaining availability group migration using a distributed availability group

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

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

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

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

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

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

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

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

С помощью Transact-SQL (T-SQL) создайте конечные точки на обоих исходных (OnPremNode1, OnPremNode2) и целевых (SQLVM1, SQLVM2) экземплярах SQL Server.

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

Чтобы создать конечные точки, выполните этот скрипт 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 

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

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

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

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

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

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

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

CREATE AVAILABILITY GROUP [OnPremAG]  
WITH ( AUTOMATED_BACKUP_PREFERENCE = PRIMARY, 
    DB_FAILOVER = OFF,  
    DTC_SUPPORT = NONE ) 
FOR DATABASE  [Adventureworks]  
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's secondary ip >', N'<primary mask>'), (N'<secondary replica's secondary ip>', N'<secondary mask>') )
, PORT=<port number you set>);
GO

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

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

Используйте Transact-SQL в глобальной первичной реплике исходного экземпляра SQL Server (OnPremNode1) и группе доступности (OnPremAG), чтобы создать распределенную группу доступности (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]  
   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  );  

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

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

После создания распределенной группы доступности вы можете завершить миграцию.