Развертывание службы разбиения и объединения, чтобы перемещать данные между сегментированными базами данных
Применимо к: База данных SQL Azure
Средство разбиения и объединения перемещает данные между сегментированными базами данных. См. статью "Перемещение данных между масштабируемыми облачными базами данных".
Примечание.
Средство разделения слияния предназначено для Azure веб-приложения. Конец жизни Облачные службы (классическая) — 31 августа 2024 года. Если вы использовали средство разделения слияния на Облачные службы (классическая модель), перейдите в Azure веб-приложения до 31 августа 2024 г.
Необходимые компоненты
Создайте базу данных SQL для использования в качестве базы данных состояния разделения слияния. Переход на портал Azure. Создайте новую базу данных SQL. Назовите базу данных и создайте новый администратор и пароль. Обязательно запишите имя и пароль для последующего использования.
Убедитесь, что логический сервер в Azure позволяет службам Azure подключаться к нему. В портал Azure в параметрах брандмауэра для логического сервера убедитесь, что параметр "Разрешить доступ к службам Azure" имеет значение "Вкл.". Выберите значок Сохранить.
Создайте учетную запись хранения Azure для вывода диагностических данных.
Используйте общедоступные образы docker для разделения слиянием или отправьте образы docker разбиения в службу контейнеров Azure или выбранный реестр Docker.
Создание двух веб-приложения Azure для службы
Создайте два веб-приложения — а worker
также UI
веб-приложение.
Веб-приложение рабочей роли
В поле "Публикация" выберите "Контейнер".
Операционная система: выберите Windows.
Перейдите на вкладку Docker .
Заполните следующие сведения:
Источник изображения:Docker hub
Тип доступа:Public
Изображение и тег:mcr.microsoft.com/splitmerge/splitmergeworker:20240812.1
Используйте проверку и создание веб-приложения.
Веб-приложение пользовательского интерфейса
Чтобы создать веб-приложение пользовательского интерфейса, выполните те же действия, которые использовались для создания рабочего веб-приложения с одним отличием:
- Другой образ Docker в поле "Изображение и тег ":
mcr.microsoft.com/splitmerge/splitmergeweb:20240812.1
Настройка веб-приложений split-Merge
Настройка безопасности
Подробные указания по настройке безопасности службы см. в статье Настройка параметров безопасности для службы разбиения и объединения.
В целях простого тестового развертывания в этом руководстве выполняется минимальный набор действий по настройке для получения и запуска службы. Выполнение следующих действий позволяет взаимодействовать со службой только одной машине или учетной записи.
Создание самозаверяющего сертификата и PFX-файла
Используйте PowerShell для создания самозаверяющего сертификата и PFX-файла.
Сначала создайте новый каталог. Затем замените встроенные значения соответствующим образом и выполните следующие команды PowerShell из нового каталога:
$certname = "{certificateName}" ## Replace {certificateName}
$cert = New-SelfSignedCertificate -Subject "CN=$certname" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256
$mypwd = ConvertTo-SecureString -String "{myPassword}" -Force -AsPlainText ## Replace {myPassword}
Export-PfxCertificate -Cert $cert -FilePath "C:\Users\admin\Desktop\$certname.pfx" -Password $mypwd ## Specify your preferred location
Отправка PFX-файла в веб-приложения и включение использования сертификатов
Повторите следующие действия для обоих worker
и UI
веб-приложения.
- Переход на портал Azure.
- Выберите Службы приложений.
- Выберите веб-приложение, созданное выше, для средства разделения слияния.
- Выберите сертификаты в меню.
- Выберите "Принести собственные сертификаты" (PFX).
- Выберите " Добавить сертификат " на панели.
- Выберите PFX-файл и введите тот же пароль, что и выше.
- После завершения скопируйте отпечаток сертификата из новой записи в списке.
- В меню веб-приложения откройте раздел "Конфигурация параметров / ".
- Задайте для режима сертификата клиента значение
Require
.
Конфигурация веб-приложения
Повторите следующие действия для обоих worker
приложений и UI
веб-приложений.
Откройте развернутый веб-приложение и перейдите к параметрам приложения переменных>среды "Параметры> среды". Выберите Добавить.
Добавьте переменную с именем ElasticScaleMetadata и значением с строка подключения для ранее развернутой базы данных состояния.
Внимание
В настоящее время база данных состояния должна использовать латинскую сортировку (
SQL\_Latin1\_General\_CP1\_CI\_AS
). Дополнительные сведения см. в разделе "Имя сортировки Windows".При использовании База данных SQL Azure строка подключения обычно находится в форме:
Server=<serverName>.database.windows.net; Database=<databaseName>;User ID=<userId>; Password=<password>; Encrypt=True; Connection Timeout=30
Добавьте дополнительные переменные:
Имя. Значение WorkerRoleSynchronizationStorageAccountConnectionString Допустимая строка подключения в ранее созданное хранилище Azure. DataEncryptionPrimaryCertificateThumbprint Ранее созданный отпечаток сертификата. MetadataExpirationPeriodInMinutes 20160 MaxRetryCount 5 WEBSITE_LOAD_CERTIFICATES * Выберите " Применить " и перезапустите приложение.
Повторите те же действия для обоих
worker
иUI
веб-приложений.
Устранение неполадок с развертыванием
Если ваша веб-роль не в сети, скорее всего, проблема с конфигурацией безопасности. Убедитесь, что tls/SSL настроен, как описано ранее.
Если ваша рабочая роль не в сети, но ваша веб-роль завершается успешно, скорее всего, проблема с подключением к созданной ранее базе данных состояния.
Убедитесь, что строка подключения является точным.
Убедитесь, что сервер и база данных существуют, и правильность идентификатора пользователя и пароля.
Для База данных SQL Azure строка подключения должен быть в форме:
Server=<serverName>.database.windows.net; Database=<databaseName>;User ID=<user>; Password=<password>; Encrypt=True; Connection Timeout=30
Убедитесь, что имя сервера не начинается
https://
.Убедитесь, что ваш сервер позволяет службам Azure подключиться к нему. Для этого откройте базу данных на портале и убедитесь, что для параметра "Разрешить доступ к службам Azure" задано значение "Вкл.".
Тестирование развертывания службы
Подключение с помощью веб-браузера
Перейдите к обзору UI
веб-приложения и нажмите кнопку "Обзор". При появлении запроса выберите правильный сертификат.
Тестирование с помощью скриптов PowerShell
Развертывание и среду можно проверить путем запуска включенных примеров скриптов PowerShell.
Внимание
Примеры сценариев выполняются в PowerShell 5.1. В настоящее время они не выполняются в PowerShell 6 или более поздней версии.
Будут включены файлы скриптов:
SetupSampleSplitMergeEnvironment.ps1
— настраивает тестовый уровень данных для разделения слияния.- Создает базу данных диспетчера карт сегментов.
- Создает две базы данных сегментов.
- Создает сопоставление сегментов для этих баз данных (удаляет любые существующие сопоставления сегментов в этих базах данных).
- Создает небольшой пример таблицы в обоих сегментах и заполняет эту таблицу сегментами.
- Объявляет SchemaInfo для сегментированной таблицы.
ExecuteSampleSplitMerge.ps1
— выполняет тестовые операции на тестовом уровне данных.- Отправляет запрос разбиения к внешнему веб-серверу службы разбиения и объединения, которая отделяет половину данных из первого сегмента и переносит их во второй сегмент.
- Запрашивает у внешнего веб-сервера состояние запроса на разбиение и ожидает завершения запроса.
- Отправляет запрос на объединение внешнему веб-серверу службы разбиения и объединения, который перемещает данные из второго сегмента обратно в первый.
- Запрашивает у внешнего веб-сервера состояние запроса объединения и ожидает завершения запроса.
GetMappings.ps1
— пример сценария верхнего уровня, который выводит текущее состояние сопоставлений сегментов.ShardManagement.psm1
— вспомогательный скрипт, который упаковывает API ShardManagement.SqlDatabaseHelpers.psm1
— вспомогательный скрипт для создания баз данных и управления ими в База данных SQL.
Проверка развертывания с помощью PowerShell
Откройте новое окно PowerShell и перейдите в каталог, в котором вы скачали пакет split-Merge, а затем перейдите в каталог PowerShell.
Создайте сервер (или выберите существующий сервер), где будут созданы диспетчер сопоставлений сегментов и сегменты.
Примечание.
Скрипт
SetupSampleSplitMergeEnvironment.ps1
создает все эти базы данных на одном сервере по умолчанию, чтобы сохранить скрипт простым. Это не ограничение самой службы разделения слиянием.Для перемещения данных и обновления карты сегментов требуется имя входа проверки подлинности SQL с доступом на чтение и запись к базам данных. Так как служба разделения слиянием работает в облаке, она в настоящее время не поддерживает встроенную проверку подлинности.
Убедитесь, что сервер настроен на разрешение доступа для IP-адреса компьютера, на котором выполняются сценарии. Этот параметр можно найти в разделе SQL Server/брандмауэры и Виртуальные сети/IP-адреса клиентов.
SetupSampleSplitMergeEnvironment.ps1
Выполните скрипт, чтобы создать образец среды.При выполнении этого скрипта все существующие структуры управления картами сегментов удаляются в базе данных диспетчера карт сегментов и сегментах. Может быть полезно повторно запустить скрипт, если вы хотите повторно инициализировать карту сегментов или сегменты.
Пример командной строки:
.\SetupSampleSplitMergeEnvironment.ps1 ^ -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
Выполните сценарий Getmappings.ps1 для просмотра сопоставлений, которые в настоящее время существуют в образце среды.
.\GetMappings.ps1 ^ -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
ExecuteSampleSplitMerge.ps1
Выполните скрипт, чтобы выполнить операцию разделения (переместив половину данных первого сегмента во второй сегмент), а затем операцию слияния (переместите данные обратно на первый сегмент). Если настроить TSL и оставить конечную точку http отключенной, убедитесь, что можно использовать вместо этого конечную точку https://.Пример командной строки:
.\ExecuteSampleSplitMerge.ps1 ^ -UserName 'mysqluser' -Password 'MySqlPassw0rd' ^ -ShardMapManagerServerName 'abcdefghij.database.windows.net' ^ -SplitMergeServiceEndpoint 'https://mysplitmergeservice.cloudapp.net' ^ -CertificateThumbprint '0123456789abcdef0123456789abcdef01234567'
Если вы получите следующую ошибку, скорее всего, это проблема с сертификатом веб-конечной точки. Попробуйте подключиться к веб-конечной точке с помощью любимого веб-браузера и проверьте, возникла ли ошибка сертификата.
Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLSsecure channel.
В случае успешного выполнения выходные данные должны выглядеть следующим образом:
.\ExecuteSampleSplitMerge.ps1 -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net' -SplitMergeServiceEndpoint 'http://mysplitmergeservice.cloudapp.net' -CertificateThumbprint 0123456789abcdef0123456789abcdef01234567 Sending split request Began split operation with id dc68dfa0-e22b-4823-886a-9bdc903c80f3 Polling split-merge request status. Press Ctrl-C to end Progress: 0% | Status: Queued | Details: [Informational] Queued request Progress: 5% | Status: Starting | Details: [Informational] Starting split-merge state machine for request. Progress: 5% | Status: Starting | Details: [Informational] Performing data consistency checks on target shards. Progress: 20% | Status: CopyingReferenceTables | Details: [Informational] Moving reference tables from source to target shard. Progress: 20% | Status: CopyingReferenceTables | Details: [Informational] Waiting for reference tables copy completion. Progress: 20% | Status: CopyingReferenceTables | Details: [Informational] Moving reference tables from source to target shard. Progress: 44% | Status: CopyingShardedTables | Details: [Informational] Moving key range [100:110) of Sharded tables Progress: 44% | Status: CopyingShardedTables | Details: [Informational] Successfully copied key range [100:110) for table [dbo].[MyShardedTable] ... ... Progress: 90% | Status: Completing | Details: [Informational] Successfully deleted shardlets in table [dbo].[MyShardedTable]. Progress: 90% | Status: Completing | Details: [Informational] Deleting any temp tables that were created while processing the request. Progress: 100% | Status: Succeeded | Details: [Informational] Successfully processed request. Sending merge request Began merge operation with id 6ffc308f-d006-466b-b24e-857242ec5f66 Polling request status. Press Ctrl-C to end Progress: 0% | Status: Queued | Details: [Informational] Queued request Progress: 5% | Status: Starting | Details: [Informational] Starting split-merge state machine for request. Progress: 5% | Status: Starting | Details: [Informational] Performing data consistency checks on target shards. Progress: 20% | Status: CopyingReferenceTables | Details: [Informational] Moving reference tables from source to target shard. Progress: 44% | Status: CopyingShardedTables | Details: [Informational] Moving key range [100:110) of Sharded tables Progress: 44% | Status: CopyingShardedTables | Details: [Informational] Successfully copied key range [100:110) for table [dbo].[MyShardedTable] ... ... Progress: 90% | Status: Completing | Details: [Informational] Successfully deleted shardlets in table [dbo].[MyShardedTable]. Progress: 90% | Status: Completing | Details: [Informational] Deleting any temp tables that were created while processing the request. Progress: 100% | Status: Succeeded | Details: [Informational] Successfully processed request.
Экспериментируйте с другими типами данных. Все эти сценарии принимают дополнительный параметр -ShardKeyType, который позволяет указать тип ключа. Значение по умолчанию – Int32, но можно также указать Int64, Guid или Binary.
Запросы на создание
Службу можно использовать с помощью веб-интерфейса или импорта и использования SplitMerge.psm1
модуля PowerShell, который отправляет запросы через веб-роль.
Служба может перемещать данные в сегментированные и ссылочные таблицы. Сегментированная таблица содержит ключевой столбец сегментирования и различные строчные данные в каждом сегменте. Эталонная таблица не сегментирована, поэтому она содержит одни и те же данные строк для каждого сегмента. Справочные таблицы полезны для данных, которые часто не изменяются и используются для СОЕДИНЕНИЯ с сегментированных таблиц в запросах.
Чтобы выполнить операцию разделения слияния, необходимо объявить сегментированные таблицы и ссылочные таблицы, которые необходимо переместить. Это осуществляется с помощью API SchemaInfo . Этот API находится в Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement.Schema
пространстве имен.
- Создайте для каждой сегментированной таблицы объект ShardedTableInfo, описывающий имя схемы родительской таблицы (необязательно, по умолчанию используется значение dbo), имя таблицы и имя столбца таблицы, который содержит ключ сегментирования.
- Создайте для каждой ссылочной таблицы объект ReferenceTableInfo, описывающий имя схемы родительской таблицы (необязательно, по умолчанию используется значение dbo) и имя таблицы.
- Добавьте предыдущие объекты TableInfo в новый объект SchemaInfo .
- Получите ссылку на объект ShardMapManager и вызовите GetSchemaInfoCollection.
- Добавьте SchemaInfo в SchemaInfoCollection, указав имя сопоставления сегмента.
Пример этого можно увидеть в сценарии SetupSampleSplitMergeEnvironment.ps1.
Служба split-Merge не создает целевую базу данных (или схему для таблиц в базе данных) для вас. Перед отправкой запроса в службу их необходимо предварительно создать.
Известные ошибки
При выполнении примеров скриптов PowerShell может появиться следующее сообщение:
Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
Эта ошибка означает, что сертификат TLS/SSL настроен неправильно. Следуйте инструкциям в разделе "Подключение к веб-браузеру".
Если вы не можете отправить запросы, может появиться следующее:
[Exception] System.Data.SqlClient.SqlException (0x80131904): Could not find stored procedure 'dbo.InsertRequest'.
В этом случае проверьте файл конфигурации, в частности, для параметра WorkerRoleSynchronizationStorageAccountConnectionString
. Эта ошибка обычно указывает, что рабочая роль не могла успешно инициализировать базу данных метаданных при первом использовании.
Связанный контент
Еще не используете средства эластичных баз данных? Ознакомьтесь с нашим руководством по началу работы. Возникшие вопросы вы можете задать нам на странице вопросов Microsoft Q&A по Базе данных SQL. Что касается запросов новых функций, вы можете поделиться новыми идеями или проголосовать за существующие на форуме отзывов по Базе данных SQL.