Развертывание службы разбиения и объединения, чтобы перемещать данные между сегментированными базами данных
Применимо к: База данных SQL Azure
Средство разбиения и объединения перемещает данные между сегментированными базами данных. См. статью "Перемещение данных между масштабируемыми облачными базами данных".
Примечание.
Средство разделения слиянием предназначено для работы с Облачные службы (классической) и не Служба приложений.
Загрузка пакетов разбиения/объединения
Скачайте последнюю версию NuGet с сайта NuGet.
Откройте командную строку и перейдите в каталог, в который вы скачали nuget.exe. Скачиваемый файл включает команды PowerShell.
Скачайте последний пакет split-Merge в текущий каталог с помощью следующей команды:
nuget install Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge
Файлы помещаются в каталог с именем Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge.<x.x.xxx.x>
, где <x.x.xxx.x>
отражается номер версии. Найдите файлы службы разделения слиянием в подкаталоге content\splitmerge\service
и скрипты PowerShell split-Merge PowerShell (и обязательные клиентские библиотеки DLL) в подкаталоге content\splitmerge\powershell
.
Необходимые компоненты
Создайте базу данных SQL Azure, которая будет использоваться в качестве базы данных состояния разбиения и объединения. Переход на портал Azure. Создайте новую Базу данных SQL. Присвойте базе данных имя и создайте администратор и пароль. Обязательно запишите имя и пароль для последующего использования.
Убедитесь, что ваш сервер позволяет службам Azure подключиться к нему. На портале в колонке Параметры брандмауэра задайте для параметра Разрешить доступ к службам Azure значение Вкл. Выберите значок Сохранить.
Создайте учетную запись хранения Azure для вывода диагностических данных.
Создайте облачную службу Azure для размещения службы разбиения и объединения.
Настройка службы разбиения и объединения
Настройка службы разбиения и объединения
В папке, в которую вы скачали сборки split-Merge, создайте копию
ServiceConfiguration.Template.cscfg
файла, отправленного вместеSplitMergeService.cspkg
с ним, и переименуйте егоServiceConfiguration.cscfg
.Откройте
ServiceConfiguration.cscfg
в текстовом редакторе, например Visual Studio, который проверяет входные данные, такие как формат отпечатков сертификатов.Создайте новую базу данных или выберите существующую для хранения состояния операций разбиения и объединения и получите строку подключения к этой базе.
Внимание
В настоящее время база данных состояния должна использовать латинскую сортировку (
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
Введите этот строка подключения в
.cscfg
файле в разделах роли SplitMergeWeb и SplitMergeWorker в параметре ElasticScaleMetadata.Для роли SplitMergeWorker введите действительную строка подключения в хранилище Azure для
WorkerRoleSynchronizationStorageAccountConnectionString
параметра.
Настройка безопасности
Подробные указания по настройке безопасности службы см. в статье Настройка параметров безопасности для службы разбиения и объединения.
В целях простого тестового развертывания в этом руководстве выполняется минимальный набор действий по настройке для получения и запуска службы. Выполнение следующих действий позволяет взаимодействовать со службой только одной машине или учетной записи.
Создание самозаверяющего сертификата
Создайте новый каталог и из этого каталога выполните следующие команды в окне командной строки разработчика для Visual Studio :
makecert ^
-n "CN=*.cloudapp.net" ^
-r -cy end -sky exchange -eku "1.3.6.1.5.5.7.3.1,1.3.6.1.5.5.7.3.2" ^
-a sha256 -len 2048 ^
-sr currentuser -ss root ^
-sv MyCert.pvk MyCert.cer
В запросе на защиту закрытого ключа введите надежный пароль и подтвердите его. При появлении запроса введите пароль еще раз. Выберите "Да" в конце, чтобы импортировать его в корневое хранилище доверенных центров сертификации.
Создание PFX-файла
Выполните следующую команду в том же окне, в котором была выполнена команда makecert; используйте тот же пароль, который использовался для создания сертификата:
pvk2pfx -pvk MyCert.pvk -spc MyCert.cer -pfx MyCert.pfx -pi <password>
Импортируйте сертификат клиента в личное хранилище сертификатов.
- Дважды щелкните
MyCert.pfx
в проводнике Windows. - В мастере импорта сертификатов выберите текущего пользователя, а затем нажмите кнопку "Далее".
- Подтвердите путь к файлу и нажмите кнопку "Далее".
- Введите пароль, оставьте флажок "Включить все расширенные свойства " и нажмите кнопку "Далее".
- Оставьте автоматически флажок "Сохранить хранилище сертификатов[...] и нажмите кнопку "Далее".
- Нажмите кнопку "Готово" и "ОК".
Загрузите PFX-файл в облачную службу.
- Переход на портал Azure.
- Выберите Облачные службы.
- Выберите облачную службу, созданную ранее для службы split-Merge.
- Выберите сертификаты в верхнем меню.
- Выберите " Отправить " в нижней строке.
- Выберите PFX-файл и введите тот же пароль, что и раньше.
- После завершения скопируйте отпечаток сертификата из новой записи в списке.
Обновление файла конфигурации службы
Вставьте отпечаток сертификата, скопированный ранее в атрибут отпечатка или значения этих параметров. Для рабочей роли:
<Setting name="DataEncryptionPrimaryCertificateThumbprint" value="" />
<Certificate name="DataEncryptionPrimary" thumbprint="" thumbprintAlgorithm="sha1" />
Для веб-роли:
<Setting name="AdditionalTrustedRootCertificationAuthorities" value="" />
<Setting name="AllowedClientCertificateThumbprints" value="" />
<Setting name="DataEncryptionPrimaryCertificateThumbprint" value="" />
<Certificate name="SSL" thumbprint="" thumbprintAlgorithm="sha1" />
<Certificate name="CA" thumbprint="" thumbprintAlgorithm="sha1" />
<Certificate name="DataEncryptionPrimary" thumbprint="" thumbprintAlgorithm="sha1" />
Для рабочих развертываний следует использовать отдельные сертификаты для ЦС для шифрования, сертификата сервера и сертификатов клиента. Подробные указания см. в статье Настройка параметров безопасности для службы разбиения и объединения.
Развертывание службы
- Перейдите на портал Azure.
- Выберите ранее созданную облачную службу.
- Выберите Обзор.
- Выберите промежуточную среду, а затем нажмите кнопку "Отправить".
- В диалоговом окне введите метку развертывания. Для обоих
Package
Configuration
вариантов выберите и выберитеSplitMergeService.cspkg
From Local
файл и cscfg-файл, настроенный ранее. - Убедитесь, что флажок Развернуть, даже если одна или несколько ролей содержат отдельный экземпляр установлен.
- Нажмите кнопку проверки в правом нижнем углу, чтобы начать развертывание. Это может занять несколько минут.
Устранение неполадок с развертыванием
Если ваша веб-роль не в сети, скорее всего, проблема с конфигурацией безопасности. Убедитесь, что tls/SSL настроен, как описано ранее.
Если ваша рабочая роль не в сети, но ваша веб-роль завершается успешно, скорее всего, проблема с подключением к созданной ранее базе данных состояния.
Убедитесь, что строка подключения в CSCFG-файле задана верно.
Убедитесь, что сервер и база данных существуют, и правильность идентификатора пользователя и пароля.
Для Базы данных SQL Azure строка подключения должна выглядеть следующим образом.
Server=<serverName>.database.windows.net; Database=<databaseName>;User ID=<user>; Password=<password>; Encrypt=True; Connection Timeout=30
Убедитесь, что имя сервера не начинается
https://
.Убедитесь, что ваш сервер позволяет службам Azure подключиться к нему. Для этого откройте свою базу данных на портале и проверьте, задано ли для параметра Разрешить доступ к службам Azure значение Вкл**.
Тестирование развертывания службы
Подключение с помощью веб-браузера
Определите конечную веб-точку службы разбиения и объединения. Ее можно найти на портале, выбрав колонку Обзор облачной службы и просмотрев сведения справа в разделе URL-адрес сайта. https://
Замените http://
на , так как параметры безопасности по умолчанию отключают конечную точку HTTP. Откройте в браузере этот URL-адрес.
Тестирование с помощью скриптов 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.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по