Поделиться через


Учебник. Настройка репликации транзакций между Управляемым экземпляром SQL Azure и SQL Server

Область применения: Управляемый экземпляр SQL Azure

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

В этом руководстве описано следующее:

  • Настройте управляемый экземпляр SQL в качестве издателя репликации.
  • Настройте управляемый экземпляр SQL в качестве распространителя репликации.
  • Настройка SQL Server в качестве подписчика.

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

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

Примечание.

В этой статье описывается использование репликации транзакций в Управляемом экземпляре SQL Azure. Она не связана с группами отработки отказа, функцией управляемого экземпляра SQL Azure, которая позволяет создавать полные реплики отдельных экземпляров. При настройке репликации транзакций с группами отработки отказа следует учитывать дополнительные факторы.

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

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

  • Подписка Azure
  • Взаимодействие с развертыванием двух управляемых экземпляров SQL в одной виртуальной сети.
  • Подписчик SQL Server, развернутый локально или на виртуальной машине Azure. В этом руководстве используется виртуальная машина Azure.
  • SQL Server Management Studio (SSMS) 18.0 или более поздней версии.
  • Последняя версия Azure PowerShell.
  • Порты 445 и 1433 разрешают трафик SQL как в брандмауэре Azure, так и в брандмауэре Windows.

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

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

# set variables
$ResourceGroupName = "SQLMI-Repl"
$Location = "East US 2"

# Create a new resource group
New-AzResourceGroup -Name  $ResourceGroupName -Location $Location

Создание двух управляемых экземпляров SQL

Создайте два управляемых экземпляра SQL в этой новой группе ресурсов с помощью портала Azure.

  • Имя управляемого экземпляра SQL издателя должно быть sql-mi-publisher (наряду с несколькими символами для случайной обработки), а имя виртуальной сети должно быть vnet-sql-mi-publisher.

  • Имя управляемого экземпляра SQL распространителя должно быть sql-mi-distributor (наряду с несколькими символами для случайной обработки), и оно должно находиться в той же виртуальной сети, что и управляемый экземпляр SQL издателя.

    Снимок экрана: использование виртуальной сети издателя для распространителя.

Дополнительные сведения о создании управляемого экземпляра SQL см. в кратком руководстве по созданию управляемого экземпляра SQL Azure.

Примечание.

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

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

Создайте виртуальную машину SQL Server с помощью портала Azure. Виртуальная машина SQL Server должна иметь следующие характеристики.

  • Имя: sql-vm-subscriber
  • Образ: версия SQL Server, поддерживающая репликацию транзакций с управляемым экземпляром SQL Azure, в матрице поддержки
  • Группа ресурсов: то же, что и управляемый экземпляр SQL
  • Виртуальная сеть: sql-vm-subscriber-vnet.

Дополнительные сведения о развертывании виртуальной машины SQL Server в Azure см. в кратком руководстве по созданию SQL Server на виртуальной машине Windows на портале Azure.

Настройка пиринга виртуальных сетей

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

# Set variables
$SubscriptionId = '<SubscriptionID>'
$resourceGroup = 'SQLMI-Repl'
$pubvNet = 'sql-mi-publisher-vnet'
$subvNet = 'sql-vm-subscriber-vnet'
$pubsubName = 'Pub-to-Sub-Peer'
$subpubName = 'Sub-to-Pub-Peer'

$virtualNetwork1 = Get-AzVirtualNetwork `
  -ResourceGroupName $resourceGroup `
  -Name $pubvNet

 $virtualNetwork2 = Get-AzVirtualNetwork `
  -ResourceGroupName $resourceGroup `
  -Name $subvNet

# Configure VNet peering from publisher to subscriber
Add-AzVirtualNetworkPeering `
  -Name $pubsubName `
  -VirtualNetwork $virtualNetwork1 `
  -RemoteVirtualNetworkId $virtualNetwork2.Id

# Configure VNet peering from subscriber to publisher
Add-AzVirtualNetworkPeering `
  -Name $subpubName `
  -VirtualNetwork $virtualNetwork2 `
  -RemoteVirtualNetworkId $virtualNetwork1.Id

# Check status of peering on the publisher VNet; should say connected
Get-AzVirtualNetworkPeering `
 -ResourceGroupName $resourceGroup `
 -VirtualNetworkName $pubvNet `
 | Select PeeringState

# Check status of peering on the subscriber VNet; should say connected
Get-AzVirtualNetworkPeering `
 -ResourceGroupName $resourceGroup `
 -VirtualNetworkName $subvNet `
 | Select PeeringState

После установки пиринга виртуальной сети проверьте подключение, запустите SQL Server Management Studio (SSMS) на узле SQL Server и подключитесь к обоим управляемым экземплярам SQL. Дополнительные сведения о подключении к управляемому экземпляру SQL с помощью SSMS см. в статье "Использование SSMS для подключения к управляемому экземпляру SQL".

Снимок экрана: проверка подключения к управляемым экземплярам SQL.

Создание частной зоны DNS

Частная зона DNS позволяет маршрутизации DNS между управляемыми экземплярами SQL и SQL Server.

Создание частной зоны

  1. Войдите на портал Azure.

  2. Щелкните Создать ресурс, чтобы создать ресурс Azure.

  3. Выполните в Azure Marketplace поиск по строке private dns zone.

  4. Выберите ресурс частной зоны DNS , опубликованный корпорацией Майкрософт, и нажмите кнопку "Создать ", чтобы создать зону DNS.

  5. Выберите подписку и группу ресурсов из раскрывающегося списка.

  6. Укажите для зоны DNS произвольное имя, например repldns.com.

    Снимок экрана: создание частной зоны DNS на портале Azure.

  7. Выберите Review + create (Просмотреть и создать). Просмотрите параметры частной зоны DNS и нажмите кнопку "Создать ", чтобы создать ресурс.

Создание записи A

  1. Перейдите к новому ресурсу Частная зона DNS и щелкните Обзор.

  2. Щелкните +Набор записей, чтобы создать новую запись A.

  3. Укажите имя виртуальной машины SQL Server и частный внутренний IP-адрес.

    Снимок экрана, показывающий, как настроить запись A.

  4. Щелкните ОК, чтобы создать запись A.

  1. Перейдите к новому ресурсу Частная зона DNS и щелкните Связи виртуальных сетей.

  2. Выберите Добавить.

  3. Укажите имя для связи, например Pub-link.

  4. Выберите подписку из раскрывающегося списка и выберите виртуальную сеть для управляемого экземпляра SQL издателя.

  5. Установите флажок Включить авторегистрацию.

    Снимок экрана: создание ссылки на виртуальную сеть.

  6. Щелкните ОК, чтобы установить связь с виртуальной сетью.

  7. Повторите эти шаги, чтобы добавить ссылку на виртуальную сеть подписчика, указав для нее имя Sub-link.

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

Создайте учетную запись хранения Azure для рабочей папки, а затем создайте в этой учетной записи общую папку.

Скопируйте путь к общей папке в формате:

\\storage-account-name.file.core.windows.net\file-share-name

Пример: \\replstorage.file.core.windows.net\replshare

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

DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=****;EndpointSuffix=core.windows.net

Пример: DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ==;EndpointSuffix=core.windows.net

См. сведения о том, как управлять ключами доступа к учетной записи хранения.

Создание базы данных

Создайте базу данных на управляемом экземпляре SQL издателя. Для этого выполните следующие шаги:

  1. Запустите SQL Server Management Studio на SQL Server.
  2. Подключитесь к управляемому экземпляру SQL издателя (sql-mi-publisher).
  3. Откройте окно создания запроса и выполните следующий запрос T-SQL, чтобы создать базу данных.
-- Create the databases
USE [master]
GO

-- Drop database if it exists
IF EXISTS (SELECT * FROM sys.sysdatabases WHERE name = 'ReplTutorial')
BEGIN
    DROP DATABASE ReplTutorial
END
GO

-- Create new database
CREATE DATABASE [ReplTutorial]
GO

-- Create table
USE [ReplTutorial]
GO
CREATE TABLE ReplTest (
   ID INT NOT NULL PRIMARY KEY,
   c1 VARCHAR(100) NOT NULL,
   dt1 DATETIME NOT NULL DEFAULT getdate()
)
GO

-- Populate table with data
USE [ReplTutorial]
GO

INSERT INTO ReplTest (ID, c1) VALUES (6, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (2, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (3, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (4, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (5, 'pub')
GO
SELECT * FROM ReplTest
GO

Настройка распространителя

После установки подключения и создания примера базы данных можно настроить распределение на управляемом экземпляре SQL распространителя (sql-mi-distributor). Для этого выполните следующие шаги:

  1. Запустите SQL Server Management Studio на SQL Server.

  2. Подключитесь к управляемому экземпляру SQL распространителя (sql-mi-distributor).

  3. Откройте окно нового запроса и запустите следующий код Transact-SQL, чтобы настроить распределение на управляемом экземпляре SQL распространителя:

    EXECUTE sp_adddistributor
        @distributor = 'sql-mi-distributor.b6bf57.database.windows.net',
        @password = '<distributor_admin_password>';
    
    EXECUTE sp_adddistributiondb @database = N'distribution';
    
    EXECUTE sp_adddistpublisher
        @publisher = 'sql-mi-publisher.b6bf57.database.windows.net', -- primary publisher@distribution_db = N'distribution',
        @security_mode = 0,
        @login = N'azureuser',
        @password = N'<publisher_password>',
        @working_directory = N'\\replstorage.file.core.windows.net\replshare',
        @storage_connection_string = N'<storage_connection_string>' -- example:
        @storage_connection_string = N'DefaultEndpointsProtocol = https;AccountName = replstorage;AccountKey = 123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ = = ;EndpointSuffix = core.windows.net';
    

    Примечание.

    В параметре \ используйте только символы обратной черты (@working_directory). Использование символа прямой косой черты (/) может привести к ошибке при подключении к общей папке.

  4. Подключитесь к управляемому экземпляру SQL издателя (sql-mi-publisher).

  5. Откройте окно создания запроса и выполните следующий Transact-SQL код, чтобы зарегистрировать распространителя на издателе:

    USE master;
    GO
    
    EXECUTE sys.sp_adddistributor
        @distributor = 'sql-mi-distributor.b6bf57.database.windows.net',
        @password = '<distributor_admin_password>';
    

Создание публикации

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

  1. Запустите SQL Server Management Studio на SQL Server.

  2. Подключитесь к управляемому экземпляру SQL издателя (sql-mi-publisher).

  3. В обозревателе объектов разверните узел Репликация и щелкните папку Локальная публикация. Щелкните Создать публикацию.

  4. Щелкните Далее, чтобы перейти со страницы приветствия.

  5. На странице База данных публикации выберите созданную ранее базу данных ReplTutorial. Выберите Далее.

  6. На странице Тип публикации выберите Публикация транзакций. Выберите Далее.

  7. На странице Статьи установите флажок Таблицы. Выберите Далее.

  8. На странице Фильтрация строк таблицы щелкните Далее, не добавляя новых фильтров.

  9. На странице Агент моментальных снимков установите флажок Создать моментальный снимок немедленно и обеспечить доступ к нему для инициализации подписок. Выберите Далее.

  10. На странице "Безопасность агента" выберите параметры безопасности.... Укажите учетные данные для входа SQL Server для агента моментальных снимков и подключения к издателю. Щелкните OK, чтобы закрыть страницу Безопасность агента моментальных снимков. Выберите Далее.

    Снимок экрана: настройка безопасности агента моментальных снимков.

  11. На странице Действия мастера щелкните Создать публикацию и (необязательно) выберите Сформировать файл скрипта с этапами создания публикации, если вам нужен скрипт для использования в будущем.

  12. На странице "Завершение работы мастера " назовите публикацию ReplTestи нажмите кнопку "Далее ", чтобы создать публикацию.

  13. Создав публикацию, обновите узел Репликация в обозревателе объектов и разверните узел Локальные публикации, чтобы увидеть новую публикацию.

Создание подписки

После создания публикации можно создать подписку. Для этого выполните следующие шаги:

  1. Запустите SQL Server Management Studio на SQL Server.
  2. Подключитесь к управляемому экземпляру SQL издателя (sql-mi-publisher).
  3. Откройте окно Новый запрос и выполните следующий код Transact-SQL, чтобы добавить подписку и агент распространителя. Включите имя DNS в имя подписчика.
use [ReplTutorial]
exec sp_addsubscription
@publication = N'ReplTest',
@subscriber = N'sql-vm-subscriber.repldns.com', -- include the DNS configured in the private DNS zone
@destination_db = N'ReplSub',
@subscription_type = N'Push',
@sync_type = N'automatic',
@article = N'all',
@update_mode = N'read only',
@subscriber_type = 0

exec sp_addpushsubscription_agent
@publication = N'ReplTest',
@subscriber = N'sql-vm-subscriber.repldns.com', -- include the DNS configured in the private DNS zone
@subscriber_db = N'ReplSub',
@job_login = N'azureuser',
@job_password = '<Complex Password>',
@subscriber_security_mode = 0,
@subscriber_login = N'azureuser',
@subscriber_password = '<Complex Password>',
@dts_package_location = N'Distributor'
GO

Проверка репликации

Настроенную репликацию можно протестировать, добавив новые элементы в издатель и убедившись, что изменения распространяются на подписчик.

Выполните следующий фрагмент кода T-SQL, чтобы просмотреть строки в подписчике:

USE ReplSub;
GO

SELECT *
FROM dbo.ReplTest;

Выполните следующий фрагмент кода T-SQL, чтобы вставить в издатель дополнительные строки, а затем снова проверьте строки в подписчике.

USE ReplTutorial;
GO

INSERT INTO ReplTest (ID, c1)
VALUES (15, 'pub');

Очистка ресурсов

  1. На портале Azure перейдите к используемой группе ресурсов.
  2. Выберите управляемые экземпляры SQL и нажмите кнопку "Удалить". Введите yes текстовое поле, чтобы подтвердить удаление ресурса, а затем нажмите кнопку "Удалить". Этот процесс может занять некоторое время, чтобы завершить работу в фоновом режиме, и пока это не будет сделано, вы не сможете удалить виртуальный кластер или другие зависимые ресурсы. Отслеживайте удаление на вкладке "Действие ", чтобы подтвердить удаление управляемого экземпляра SQL.
  3. После удаления управляемого экземпляра SQL удалите виртуальный кластер , выбрав его в группе ресурсов, а затем нажмите кнопку "Удалить". Введите yes текстовое поле, чтобы подтвердить удаление ресурса, а затем нажмите кнопку "Удалить".
  4. Удалите все остальные ресурсы. Введите yes текстовое поле, чтобы подтвердить удаление ресурса, а затем нажмите кнопку "Удалить".
  5. Удалите группу ресурсов, выбрав "Удалить группу ресурсов", введите имя группы myResourceGroupресурсов и нажмите кнопку "Удалить".

Известные ошибки

Имена входа Windows не поддерживаются

Exception Message: Windows logins are not supported in this version of SQL Server.

Это означает, что для агента настроено имя входа Windows, вместо которого нужно использовать имя входа SQL Server. Чтобы указать имя входа SQL Server в качестве учетных данных, воспользуйтесь страницей Безопасность агента в разделе Свойства публикации.

Не удалось подключиться к службе хранилища Azure

Connecting to Azure Files Storage '\\replstorage.file.core.windows.net\replshare' Failed to connect to Azure Storage '' with OS error: 53.
2019-11-19 02:21:05.07 Obtained Azure Storage Connection String for replstorage
2019-11-19 02:21:05.07 Connecting to Azure Files Storage '\\replstorage.file.core.windows.net\replshare'
2019-11-19 02:21:31.21 Failed to connect to Azure Storage '' with OS error: 53.

Скорее всего, порт 445 закрыт в брандмауэре Azure, брандмауэре Windows или обоих.

Connecting to Azure Files Storage '\\replstorage.file.core.windows.net\replshare' Failed to connect to Azure Storage '' with OS error: 55.

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

  • Это допустимо: \\replstorage.file.core.windows.net\replshare
  • Такой может привести к ошибке OS 55: \\replstorage.file.core.windows.net/replshare

Не удалось подключиться к подписчику

The process could not connect to Subscriber 'SQL-VM-SUBSCRIBER
Could not open a connection to SQL Server [53].
A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections.

Возможные решения:

  • Убедитесь, что порт 1433 открыт.
  • Убедитесь, что в подписчике разрешен протокол TCP/IP.
  • Убедитесь, что при создании подписчика использовалось имя DNS.
  • Убедитесь, что виртуальные сети правильно связаны в частной зоне DNS.
  • Убедитесь, что запись A настроена правильно.
  • Убедитесь, что пиринг виртуальных сетей настроен правильно.

Отсутствие публикаций, на которые можно подписаться

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

There are no publications to which you can subscribe, either because this server has no publications or because you do not have sufficient privileges to access the publications.

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