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


Развертывание службы разбиения и объединения, чтобы перемещать данные между сегментированными базами данных

Применимо к: База данных SQL Azure

Средство разбиения и объединения перемещает данные между сегментированными базами данных. См. статью "Перемещение данных между масштабируемыми облачными базами данных".

Примечание.

Средство разделения слиянием предназначено для работы с Облачные службы (классической) и не Служба приложений.

Загрузка пакетов разбиения/объединения

  1. Скачайте последнюю версию NuGet с сайта NuGet.

  2. Откройте командную строку и перейдите в каталог, в который вы скачали nuget.exe. Скачиваемый файл включает команды PowerShell.

  3. Скачайте последний пакет 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 .

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

  1. Создайте базу данных SQL Azure, которая будет использоваться в качестве базы данных состояния разбиения и объединения. Переход на портал Azure. Создайте новую Базу данных SQL. Присвойте базе данных имя и создайте администратор и пароль. Обязательно запишите имя и пароль для последующего использования.

  2. Убедитесь, что ваш сервер позволяет службам Azure подключиться к нему. На портале в колонке Параметры брандмауэра задайте для параметра Разрешить доступ к службам Azure значение Вкл. Выберите значок Сохранить.

  3. Создайте учетную запись хранения Azure для вывода диагностических данных.

  4. Создайте облачную службу Azure для размещения службы разбиения и объединения.

Настройка службы разбиения и объединения

Настройка службы разбиения и объединения

  1. В папке, в которую вы скачали сборки split-Merge, создайте копию ServiceConfiguration.Template.cscfg файла, отправленного вместе SplitMergeService.cspkg с ним, и переименуйте его ServiceConfiguration.cscfg.

  2. Откройте ServiceConfiguration.cscfg в текстовом редакторе, например Visual Studio, который проверяет входные данные, такие как формат отпечатков сертификатов.

  3. Создайте новую базу данных или выберите существующую для хранения состояния операций разбиения и объединения и получите строку подключения к этой базе.

    Внимание

    В настоящее время база данных состояния должна использовать латинскую сортировку (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

  4. Введите этот строка подключения в .cscfg файле в разделах роли SplitMergeWeb и SplitMergeWorker в параметре ElasticScaleMetadata.

  5. Для роли 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>

Импортируйте сертификат клиента в личное хранилище сертификатов.

  1. Дважды щелкните MyCert.pfxв проводнике Windows.
  2. В мастере импорта сертификатов выберите текущего пользователя, а затем нажмите кнопку "Далее".
  3. Подтвердите путь к файлу и нажмите кнопку "Далее".
  4. Введите пароль, оставьте флажок "Включить все расширенные свойства " и нажмите кнопку "Далее".
  5. Оставьте автоматически флажок "Сохранить хранилище сертификатов[...] и нажмите кнопку "Далее".
  6. Нажмите кнопку "Готово" и "ОК".

Загрузите PFX-файл в облачную службу.

  1. Переход на портал Azure.
  2. Выберите Облачные службы.
  3. Выберите облачную службу, созданную ранее для службы split-Merge.
  4. Выберите сертификаты в верхнем меню.
  5. Выберите " Отправить " в нижней строке.
  6. Выберите PFX-файл и введите тот же пароль, что и раньше.
  7. После завершения скопируйте отпечаток сертификата из новой записи в списке.

Обновление файла конфигурации службы

Вставьте отпечаток сертификата, скопированный ранее в атрибут отпечатка или значения этих параметров. Для рабочей роли:

<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" />

Для рабочих развертываний следует использовать отдельные сертификаты для ЦС для шифрования, сертификата сервера и сертификатов клиента. Подробные указания см. в статье Настройка параметров безопасности для службы разбиения и объединения.

Развертывание службы

  1. Перейдите на портал Azure.
  2. Выберите ранее созданную облачную службу.
  3. Выберите Обзор.
  4. Выберите промежуточную среду, а затем нажмите кнопку "Отправить".
  5. В диалоговом окне введите метку развертывания. Для обоих Package Configurationвариантов выберите и выберите SplitMergeService.cspkg From Local файл и cscfg-файл, настроенный ранее.
  6. Убедитесь, что флажок Развернуть, даже если одна или несколько ролей содержат отдельный экземпляр установлен.
  7. Нажмите кнопку проверки в правом нижнем углу, чтобы начать развертывание. Это может занять несколько минут.

Устранение неполадок с развертыванием

Если ваша веб-роль не в сети, скорее всего, проблема с конфигурацией безопасности. Убедитесь, что 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 или более поздней версии.

Будут включены файлы скриптов:

  1. SetupSampleSplitMergeEnvironment.ps1 — настраивает тестовый уровень данных для разделения слияния.

    1. Создает базу данных диспетчера карт сегментов.
    2. Создает две базы данных сегментов.
    3. Создает сопоставление сегментов для этих баз данных (удаляет любые существующие сопоставления сегментов в этих базах данных).
    4. Создает небольшой пример таблицы в обоих сегментах и заполняет эту таблицу сегментами.
    5. Объявляет SchemaInfo для сегментированной таблицы.
  2. ExecuteSampleSplitMerge.ps1 — выполняет тестовые операции на тестовом уровне данных.

    1. Отправляет запрос разбиения к внешнему веб-серверу службы разбиения и объединения, которая отделяет половину данных из первого сегмента и переносит их во второй сегмент.
    2. Запрашивает у внешнего веб-сервера состояние запроса на разбиение и ожидает завершения запроса.
    3. Отправляет запрос на объединение внешнему веб-серверу службы разбиения и объединения, который перемещает данные из второго сегмента обратно в первый.
    4. Запрашивает у внешнего веб-сервера состояние запроса объединения и ожидает завершения запроса.
  3. GetMappings.ps1 — пример сценария верхнего уровня, который выводит текущее состояние сопоставлений сегментов.

  4. ShardManagement.psm1 — вспомогательный скрипт, который упаковывает API ShardManagement.

  5. SqlDatabaseHelpers.psm1— вспомогательный скрипт для создания баз данных и управления ими в База данных SQL.

Проверка развертывания с помощью PowerShell

  1. Откройте новое окно PowerShell и перейдите в каталог, в котором вы скачали пакет split-Merge, а затем перейдите в каталог PowerShell.

  2. Создайте сервер (или выберите существующий сервер), где будут созданы диспетчер сопоставлений сегментов и сегменты.

    Примечание.

    Скрипт SetupSampleSplitMergeEnvironment.ps1 создает все эти базы данных на одном сервере по умолчанию, чтобы сохранить скрипт простым. Это не ограничение самой службы разделения слиянием.

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

    Убедитесь, что сервер настроен на разрешение доступа для IP-адреса компьютера, на котором выполняются сценарии. Этот параметр можно найти в разделе SQL Server/брандмауэры и Виртуальные сети/IP-адреса клиентов.

  3. SetupSampleSplitMergeEnvironment.ps1 Выполните скрипт, чтобы создать образец среды.

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

    Пример командной строки:

    .\SetupSampleSplitMergeEnvironment.ps1 ^
    -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
    
  4. Выполните сценарий Getmappings.ps1 для просмотра сопоставлений, которые в настоящее время существуют в образце среды.

    .\GetMappings.ps1 ^
    -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
    
  5. 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.
    
  6. Экспериментируйте с другими типами данных. Все эти сценарии принимают дополнительный параметр -ShardKeyType, который позволяет указать тип ключа. Значение по умолчанию – Int32, но можно также указать Int64, Guid или Binary.

Запросы на создание

Службу можно использовать с помощью веб-интерфейса или импорта и использования SplitMerge.psm1 модуля PowerShell, который отправляет запросы через веб-роль.

Служба может перемещать данные в сегментированные и ссылочные таблицы. Сегментированная таблица содержит ключевой столбец сегментирования и различные строчные данные в каждом сегменте. Эталонная таблица не сегментирована, поэтому она содержит одни и те же данные строк для каждого сегмента. Справочные таблицы полезны для данных, которые часто не изменяются и используются для СОЕДИНЕНИЯ с сегментированных таблиц в запросах.

Чтобы выполнить операцию разделения слияния, необходимо объявить сегментированные таблицы и ссылочные таблицы, которые необходимо переместить. Это осуществляется с помощью API SchemaInfo . Этот API находится в Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement.Schema пространстве имен.

  1. Создайте для каждой сегментированной таблицы объект ShardedTableInfo, описывающий имя схемы родительской таблицы (необязательно, по умолчанию используется значение dbo), имя таблицы и имя столбца таблицы, который содержит ключ сегментирования.
  2. Создайте для каждой ссылочной таблицы объект ReferenceTableInfo, описывающий имя схемы родительской таблицы (необязательно, по умолчанию используется значение dbo) и имя таблицы.
  3. Добавьте предыдущие объекты TableInfo в новый объект SchemaInfo .
  4. Получите ссылку на объект ShardMapManager и вызовите GetSchemaInfoCollection.
  5. Добавьте 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.