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


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

Применимо к: База данных 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

Настройка безопасности

Для получения подробных инструкций по настройке безопасности службы см. Конфигурация безопасности Split-Merge.

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

Создание самозаверяющего сертификата и PFX-файла

Используйте PowerShell для создания самозаверяющего сертификата и PFX-файла.

Сначала создайте новый каталог. Затем замените встроенные значения соответствующим образом и выполните следующие команды PowerShell из нового каталога. Замените <password> допустимым паролем.

  $cert = New-SelfSignedCertificate -Subject "CN=*.cloudapp.net" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256
  $mypwd = ConvertTo-SecureString -String "<password>" -Force -AsPlainText  ## Replace <password>
  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. Добавьте дополнительные переменные:

    Имя. Значение
    Строка подключения к синхронизации хранилища учетной записи WorkerRole Допустимая строка подключения для ранее созданного хранилища Azure.
    ОтпечатокСертификатаОсновногоШифрованияДанных Ранее созданный отпечаток сертификата.
    ПериодИстеченияСрокаМетаДанныхВМинутах 20160
    MaxRetryCount 5
    ЗАГРУЗИТЬ СЕРТИФИКАТЫ САЙТА *
    ВЫТАЩИТЬ_ИЗОБРАЖЕНИЕ_САЙТА_ЧЕРЕЗ_ВИРТУАЛЬНУЮ_СЕТЬ 0
  4. Выберите " Применить " и перезапустите приложение.

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

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

Если ваша веб-роль не может выйти в сеть, это, скорее всего, проблема с конфигурацией безопасности. Убедитесь, что tls/SSL настроен, как описано ранее.

Если ваша рабочая роль не выходит в сеть, но ваша веб-роль успешно запускается, скорее всего, проблема с подключением к созданной ранее базе данных состояния.

  • Убедитесь, что строка подключения точна.

  • Убедитесь, что сервер и база данных существуют, и идентификатор пользователя и пароль правильны.

  • Для базы данных Azure SQL строка подключения должна быть в форме:

    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 создает все эти базы данных на одном сервере по умолчанию, чтобы сохранить скрипт простым. Это не является ограничением службы Split-Merge.

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

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

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

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

    Пример командной строки. Замените <password> допустимым паролем.

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

    .\GetMappings.ps1 ^
    -UserName 'mysqluser' -Password '<password>' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
    
  5. ExecuteSampleSplitMerge.ps1 Выполните скрипт, чтобы выполнить операцию разделения (переместив половину данных первого сегмента во второй сегмент), а затем операцию слияния (переместите данные обратно на первый сегмент). Если настроить TSL и оставить конечную точку http отключенной, убедитесь, что можно использовать вместо этого конечную точку https://.

    Пример командной строки. Замените <password> допустимым паролем.

    .\ExecuteSampleSplitMerge.ps1 ^
    -UserName 'mysqluser' -Password '<password>' ^
    -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.

    В случае успешного выполнения выходные данные должны выглядеть следующим образом. Замените <password> допустимым паролем.

    .\ExecuteSampleSplitMerge.ps1 -UserName 'mysqluser' -Password '<password>' -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.