Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: Управляемый экземпляр SQL Azure
Репликация транзакций позволяет вам реплицировать данные из одной базы данных в другую, размещенную на SQL Server или на Управляемом экземпляре SQL Azure. Управляемый экземпляр SQL может быть издателем, распространителем или подписчиком в топологии репликации. См. конфигурации транзакционной репликации для получения информации о доступных настройках.
В этом руководстве описано следующее:
- Настройте управляемый экземпляр 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.
Обязательные имена и параметры сети
В этом руководстве используются следующие имена ресурсов и параметры:
| Resource | Имя | Примечания. |
|---|---|---|
| Управляемый экземпляр SQL издателя | sql-mi-publisher |
Добавление случайных символов для уникальности |
| Виртуальная сеть издателя | vnet-sql-mi-publisher |
Размещение экземпляра издателя |
| Управляемый экземпляр SQL распространителя | sql-mi-distributor |
Должен находиться в той же виртуальной сети, что и издатель |
| Виртуальная машина SQL Server (подписчик) | sql-vm-subscriber |
Использование поддерживаемой версии SQL Server для матрицы поддержки |
| Виртуальная сеть подписчика | sql-vm-subscriber-vnet |
Требуется пиринг виртуальной сети для виртуальной сети издателя |
| Частная зона DNS | repldns.com |
Произвольное имя маршрутизации DNS |
| Обязательные порты | 445 (SMB), 1433 (SQL) | Должен быть открыт в брандмауэре Azure и брандмауэре Windows |
Создание группы ресурсов
Используйте следующий фрагмент кода PowerShell для создания новой группы ресурсов.
Задайте переменные:
$ResourceGroupName = "SQLMI-Repl"
$Location = "East US 2"
Создайте группу ресурсов:
New-AzResourceGroup -Name $ResourceGroupName -Location $Location
Проверьте, создана ли группа ресурсов:
Get-AzResourceGroup -Name $ResourceGroupName | Select-Object ResourceGroupName, Location
Создание двух управляемых экземпляров SQL
Создайте два управляемых экземпляра SQL в этой новой группе ресурсов с помощью портала Azure.
Имя управляемого экземпляра SQL издателя должно быть
sql-mi-publisher(наряду с несколькими символами для случайной обработки), а имя виртуальной сети должно бытьvnet-sql-mi-publisher.Имя управляемого экземпляра SQL распространителя должно быть
sql-mi-distributor(наряду с несколькими символами для случайной обработки), и оно должно находиться в той же виртуальной сети, что и управляемый экземпляр SQL издателя.
Дополнительные сведения о создании управляемого экземпляра SQL см. в кратком руководстве по созданию управляемого экземпляра SQL Azure.
Примечание.
Для простоты этот урок помещает управляемый экземпляр SQL дистрибьютора в ту же виртуальную сеть, что и издатель. Однако вы можете создать дистрибьютора в отдельной виртуальной сети с соответствующим пирингом VNet.
Создание виртуальной машины 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.
Настройка пиринга VNet (Virtual Network)
Настройте пиринг виртуальной сети, чтобы обеспечить связь между виртуальной сетью двух управляемых экземпляров SQL и виртуальной сетью SQL Server.
Задайте переменные:
$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
Настройте пиринг виртуальной сети от издателя к подписчику:
Add-AzVirtualNetworkPeering `
-Name $pubsubName `
-VirtualNetwork $virtualNetwork1 `
-RemoteVirtualNetworkId $virtualNetwork2.Id
Настройте пиринг виртуальной сети от подписчика к издателю:
Add-AzVirtualNetworkPeering `
-Name $subpubName `
-VirtualNetwork $virtualNetwork2 `
-RemoteVirtualNetworkId $virtualNetwork1.Id
Проверьте состояние пиринга в виртуальной сети издателя (должен быть возвращён Connected):
Get-AzVirtualNetworkPeering -ResourceGroupName $resourceGroup -VirtualNetworkName $pubvNet | Select-Object PeeringState
Проверьте состояние пиринга в виртуальной сети подписчика (должно возвращаться Connected):
Get-AzVirtualNetworkPeering -ResourceGroupName $resourceGroup -VirtualNetworkName $subvNet | Select-Object PeeringState
После того как пиринг виртуальной сети установлен, проверьте подключение, запустив SQL Server Management Studio (SSMS) на хосте SQL Server и подключившись к обоим управляемым экземплярам SQL. Дополнительные сведения о подключении к управляемому экземпляру SQL с помощью SSMS см. в статье "Использование SSMS для подключения к управляемому экземпляру SQL".
Создание частной зоны DNS
Частная зона DNS позволяет маршрутизации DNS между управляемыми экземплярами SQL и SQL Server.
Создание частной зоны
Войдите на портал Azure.
Щелкните Создать ресурс, чтобы создать ресурс Azure.
Выполните в Azure Marketplace поиск по строке
private dns zone.Выберите ресурс частной зоны DNS , опубликованный корпорацией Майкрософт, и нажмите кнопку "Создать ", чтобы создать зону DNS.
Выберите подписку и группу ресурсов из раскрывающегося списка.
Укажите для зоны DNS произвольное имя, например
repldns.com.Выберите Review + create (Просмотреть + создать). Просмотрите параметры частной зоны DNS и нажмите кнопку "Создать ", чтобы создать ресурс.
Создание записи A
Перейдите к новому ресурсу Частная зона DNS и щелкните Обзор.
Щелкните +Набор записей, чтобы создать новую запись A.
Укажите имя виртуальной машины SQL Server и частный внутренний IP-адрес.
Щелкните ОК, чтобы создать запись A.
Связывание виртуальной сети
Перейдите к новому ресурсу Частная зона DNS и щелкните Связи виртуальных сетей.
Выберите Добавить.
Укажите имя для связи, например
Pub-link.Выберите подписку из раскрывающегося списка, а затем выберите виртуальную сеть для управляемого экземпляра SQL издателя.
Установите флажок Включить авторегистрацию.
Щелкните ОК, чтобы установить связь с виртуальной сетью.
Повторите эти шаги, чтобы добавить ссылку на виртуальную сеть подписчика, указав для нее имя
Sub-link.
Создание учетной записи службы хранилища Azure
Создайте учетную запись хранения Azure для рабочей папки, а затем создайте в этой учетной записи общую папку.
Значения конфигурации хранилища
При настройке распределения требуются следующие значения:
-
Формат пути к рабочему каталогу:
\\<storage-account-name>.file.core.windows.net\<file-share-name> -
Формат строки подключения к хранилищу:
DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=<key>;EndpointSuffix=core.windows.net
Это важно
Используйте только обратные слеши (\) в пути рабочего каталога. Символ слэша (/) вызывает ошибки подключения.
Примеры значений, используемых в этом руководстве:
| Параметр | Пример значения |
|---|---|
| Рабочий каталог | \\replstorage.file.core.windows.net\replshare |
| строка подключения | DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ==;EndpointSuffix=core.windows.net |
Дополнительную информацию см. в разделе управление ключами доступа к учетной записи хранения.
Создание базы данных
Создайте базу данных на управляемом экземпляре SQL издателя. Для этого выполните следующие шаги:
- Запустите SQL Server Management Studio на SQL Server.
- Подключитесь к управляемому экземпляру SQL издателя (
sql-mi-publisher). - Откройте окно создания запроса и выполните следующие запросы T-SQL.
Удалите базу данных, если она существует и создайте новую:
USE [master];
GO
IF EXISTS (SELECT * FROM sys.sysdatabases WHERE name = 'ReplTutorial')
BEGIN
DROP DATABASE ReplTutorial;
END
GO
CREATE DATABASE [ReplTutorial];
GO
Создайте тестовую таблицу репликации:
USE [ReplTutorial];
GO
CREATE TABLE ReplTest (
ID INT NOT NULL PRIMARY KEY,
c1 VARCHAR(100) NOT NULL,
dt1 DATETIME NOT NULL DEFAULT getdate()
);
GO
Вставка примеров данных:
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
Ожидаемые выходные данные: 5 строк с идентификаторами 2, 3, 4, 5 и 6.
Настройка распространителя
После установки подключения и создания образца базы данных можно настроить распределение на управляемом сервере SQL распространителя (sql-mi-distributor).
Параметры конфигурации распределения
Выполните сбор следующих значений перед настройкой распределения:
| Параметр | Description | Example |
|---|---|---|
| DNS-имя распространителя | Полное доменное имя (FQDN) экземпляра распространителя | sql-mi-distributor.b6bf57.database.windows.net |
| DNS-имя издателя | Полное доменное имя (FQDN) экземпляра издателя | sql-mi-publisher.b6bf57.database.windows.net |
@working_directory |
Путь к общему хранилищу Azure Files (используйте только обратные слэши) | \\replstorage.file.core.windows.net\replshare |
@storage_connection_string |
Строка подключения учетной записи хранения | DefaultEndpointsProtocol=https;AccountName=replstorage;... |
@security_mode |
Режим проверки подлинности (0 = проверка подлинности SQL) | 0 |
@login / @password |
Учетные данные для входа SQL | azureuser |
Настройте экземпляр распространителя
- Запустите SQL Server Management Studio на SQL Server.
- Подключитесь к управляемому экземпляру SQL распространителя (
sql-mi-distributor). - Откройте окно "Создать запрос" и выполните следующие команды.
Добавьте распространителя:
EXECUTE sp_adddistributor
@distributor = 'sql-mi-distributor.b6bf57.database.windows.net',
@password = '<distributor_admin_password>';
Создайте базу данных распространителя:
EXECUTE sp_adddistributiondb @database = N'distribution';
Убедитесь, что база данных распространителя создана:
SELECT name FROM sys.databases WHERE name = 'distribution';
Добавьте издателя в распространитель:
EXECUTE sp_adddistpublisher
@publisher = 'sql-mi-publisher.b6bf57.database.windows.net',
@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'DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ==;EndpointSuffix=core.windows.net';
Примечание.
Используйте только обратные слэши (\) для параметра @working_directory. Символ слэша (/) вызывает ошибки подключения.
Регистрация распространителя посредством издателя
- Подключитесь к управляемому экземпляру SQL сервера издателя (
sql-mi-publisher). - Откройте окно создания запроса и выполните следующую команду, чтобы зарегистрировать распространителя:
USE master;
GO
EXECUTE sys.sp_adddistributor
@distributor = 'sql-mi-distributor.b6bf57.database.windows.net',
@password = '<distributor_admin_password>';
Убедитесь, что распространитель зарегистрирован:
SELECT * FROM sys.servers WHERE is_distributor = 1;
Создание публикации
После настройки распространения можно создать публикацию. Для этого выполните следующие шаги:
Запустите SQL Server Management Studio на SQL Server.
Подключитесь к управляемому экземпляру SQL издателя (
sql-mi-publisher).В обозревателе объектов разверните узел Репликация и щелкните папку Локальная публикация. Щелкните Создать публикацию.
Щелкните Далее, чтобы перейти со страницы приветствия.
На странице База данных публикации выберите созданную ранее базу данных
ReplTutorial. Выберите Далее.На странице Тип публикации выберите Публикация транзакций. Выберите Далее.
На странице Статьи установите флажок Таблицы. Выберите Далее.
На странице Фильтрация строк таблицы щелкните Далее, не добавляя новых фильтров.
На странице Агент моментальных снимков установите флажок Создать моментальный снимок немедленно и обеспечить доступ к нему для инициализации подписок. Выберите Далее.
На странице "Безопасность агента" выберите параметры безопасности.... Укажите учетные данные для входа SQL Server для агента моментальных снимков и подключения к издателю. Щелкните OK, чтобы закрыть страницу Безопасность агента снимков. Выберите Далее.
На странице Действия мастера щелкните Создать публикацию и (необязательно) выберите Сформировать файл скрипта с этапами создания публикации, если вам нужен скрипт для использования в будущем.
На странице "Завершение работы мастера " назовите публикацию
ReplTestи нажмите кнопку "Далее ", чтобы создать публикацию.Создав публикацию, обновите узел Репликация в обозревателе объектов и разверните узел Локальные публикации, чтобы увидеть новую публикацию.
Создание подписки
После создания публикации можно создать подписку. Для этого выполните следующие шаги:
- Запустите SQL Server Management Studio на SQL Server.
- Подключитесь к управляемому экземпляру SQL издателя (
sql-mi-publisher). - Откройте окно "Создать запрос" и выполните следующие команды Transact-SQL. Используйте DNS-имя, настроенное в частной зоне DNS в рамках имени подписчика.
Параметры подписки
| Параметр | Ценность | Description |
|---|---|---|
@subscriber |
sql-vm-subscriber.repldns.com |
DNS-имя подписчика (из частной зоны DNS) |
@destination_db |
ReplSub |
База данных о подписчике |
@subscription_type |
Push |
Распространитель отправляет изменения подписчику |
@sync_type |
automatic |
Автоматическая начальная синхронизация |
Добавьте подписку:
USE [ReplTutorial];
GO
EXEC sp_addsubscription
@publication = N'ReplTest',
@subscriber = N'sql-vm-subscriber.repldns.com',
@destination_db = N'ReplSub',
@subscription_type = N'Push',
@sync_type = N'automatic',
@article = N'all',
@update_mode = N'read only',
@subscriber_type = 0;
Добавьте агента push-подписки.
EXEC sp_addpushsubscription_agent
@publication = N'ReplTest',
@subscriber = N'sql-vm-subscriber.repldns.com',
@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
Убедитесь, что подписка создана:
SELECT * FROM distribution.dbo.MSsubscriptions;
Проверка репликации
Настроенную репликацию можно протестировать путем добавления новых элементов на стороне издателя и наблюдения за тем, как изменения распространяются на подписчика.
Просмотр начальных данных по подписчику
Подключитесь к подписчику SQL Server и выполните следующий запрос:
USE ReplSub;
GO
SELECT * FROM dbo.ReplTest;
Ожидаемые выходные данные: 5 строк с идентификаторами 2, 3, 4, 5 и 6 (начальные данные издателя).
Вставка новых данных на издателе
Подключитесь к управляемому экземпляру SQL Server издателя (sql-mi-publisher) и вставьте новую строку:
USE ReplTutorial;
GO
INSERT INTO ReplTest (ID, c1) VALUES (15, 'pub');
Проверьте вставку на издателе:
SELECT * FROM ReplTest WHERE ID = 15;
Проверьте репликацию на подписчике.
Через несколько секунд подключитесь к подписчику и убедитесь, что новая строка реплицирована:
USE ReplSub;
GO
SELECT * FROM dbo.ReplTest WHERE ID = 15;
Ожидаемые выходные данные: 1 строка с идентификатором 15 и значением c1 'pub'.
Очистка ресурсов
- На портале Azure перейдите к используемой группе ресурсов.
- Выберите управляемые экземпляры SQL и нажмите кнопку "Удалить". Введите
yesтекстовое поле, чтобы подтвердить удаление ресурса, а затем нажмите кнопку "Удалить". Этот процесс может занять некоторое время, чтобы завершить работу в фоновом режиме, и пока это не будет сделано, вы не сможете удалить виртуальный кластер или другие зависимые ресурсы. Отслеживайте удаление на вкладке "Действие ", чтобы подтвердить удаление управляемого экземпляра SQL. - После удаления управляемого экземпляра SQL удалите виртуальный кластер , выбрав его в группе ресурсов, а затем нажмите кнопку "Удалить". Введите
yesтекстовое поле, чтобы подтвердить удаление ресурса, а затем нажмите кнопку "Удалить". - Удалите все остальные ресурсы. Введите
yesтекстовое поле, чтобы подтвердить удаление ресурса, а затем нажмите кнопку "Удалить". - Удалите группу ресурсов, выбрав "Удалить группу ресурсов", введите имя группы
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 или более поздней версии, чтобы исключить это в качестве основной причины.