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

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

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

Примечание.

Средство разделения слияния предназначено для Azure веб-приложения. Конец жизни Облачные службы (классическая) — 31 августа 2024 года. Если вы использовали средство разделения слияния на Облачные службы (классическая модель), перейдите в Azure веб-приложения до 31 августа 2024 г.

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

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

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

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

  4. Используйте общедоступные образы docker для разделения слиянием или отправьте образы docker разбиения в службу контейнеров Azure или выбранный реестр Docker.

Создание двух веб-приложения Azure для службы

Создайте два веб-приложения — а worker также UI веб-приложение.

Веб-приложение рабочей роли

  1. Создайте веб-приложение в портал Azure.

  2. В поле "Публикация" выберите "Контейнер".

  3. Операционная система: выберите Windows.

  4. Перейдите на вкладку Docker .

  5. Заполните следующие сведения:
    Источник изображения: Docker hub
    Тип доступа: Public
    Изображение и тег: mcr.microsoft.com/splitmerge/splitmergeworker:20240812.1

  6. Используйте проверку и создание веб-приложения.

Веб-приложение пользовательского интерфейса

Чтобы создать веб-приложение пользовательского интерфейса, выполните те же действия, которые использовались для создания рабочего веб-приложения с одним отличием:

  • Другой образ 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 веб-приложения.

  1. Переход на портал Azure.
  2. Выберите Службы приложений.
  3. Выберите веб-приложение, созданное выше, для средства разделения слияния.
  4. Выберите сертификаты в меню.
  5. Выберите "Принести собственные сертификаты" (PFX).
  6. Выберите " Добавить сертификат " на панели.
  7. Выберите PFX-файл и введите тот же пароль, что и выше.
  8. После завершения скопируйте отпечаток сертификата из новой записи в списке.
  9. В меню веб-приложения откройте раздел "Конфигурация параметров / ".
  10. Задайте для режима сертификата клиента значение Require.

Конфигурация веб-приложения

Повторите следующие действия для обоих worker приложений и UI веб-приложений.

  1. Откройте развернутый веб-приложение и перейдите к параметрам приложения переменных>среды "Параметры> среды". Выберите Добавить.

  2. Добавьте переменную с именем 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

  3. Добавьте дополнительные переменные:

    Имя. Значение
    WorkerRoleSynchronizationStorageAccountConnectionString Допустимая строка подключения в ранее созданное хранилище Azure.
    DataEncryptionPrimaryCertificateThumbprint Ранее созданный отпечаток сертификата.
    MetadataExpirationPeriodInMinutes 20160
    MaxRetryCount 5
    WEBSITE_LOAD_CERTIFICATES *
  4. Выберите " Применить " и перезапустите приложение.

  5. Повторите те же действия для обоих 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 или более поздней версии.

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

  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.