Перемещение данных между масштабируемыми облачными базами данных
Применимо к: База данных SQL Azure
Если вы разрабатываете программное обеспечение как услугу и ваше предложение внезапно становится популярным, к этому росту нужно как-то адаптироваться. В результате добавляются новые базы данных (сегменты). Как перераспределить данные с учетом новых баз данных, не нарушив целостность данных? Для перемещения данных из ограниченных баз данных во вновь созданные используйте средство разбиения и слияния .
Средство разбиения и объединения выполняется как веб-служба Azure. Оно позволяет администратору или разработчику перемещать шардлеты (данные из сегмента) между разными базами данных (сегментами). Средство разбиения и объединения ведет базу метаданных службы, используя управление сопоставлениями сегментов, и обеспечивает согласованность сопоставлений.
Скачать
Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge
Документация
- Учебник по инструменту разбиения и объединения эластичной базы данных
- Настройка параметров безопасности для службы разделения и объединения
- Вопросы безопасности служб разделения и объединения
- Управление сопоставлением сегментов
- Перенос существующих баз данных для масштабирования
- Инструменты эластичных баз данных
- Глоссарий по средствам работы с эластичными базами данных
Зачем использовать инструмент разделения и объединения?
Гибкость
Приложениям требуется расширение за пределы отдельной базы данных Azure SQL. Используйте средство для переноса необходимых данных в новые базы данных без потерь.
Рост путем деления
Чтобы увеличить емкость и справиться с резким ростом, создайте дополнительную емкость путем сегментирования данных и распределения информации по постепенно возрастающему количеству баз данных, пока не будет достигнут нужный объем. Это — отличный пример применения функции разделения.
Сжатием путем слияния
Из-за сезонных изменений в характере бизнеса потребности в емкости могут меняться. Это средство позволяет сократить число единиц масштабирования, когда бизнес временно замедляется. Функция объединения в службе разбиения и объединения эластичного масштабирования отвечает данному требованию.
Управление хот-спотами путем перемещения шардлетов
При использовании одной базы данных несколькими клиентами определенное размещение шардлетов по сегментам может привести к падению производительности в некоторых сегментах. В такой ситуации потребуется перераспределить шардлеты или переместить нагруженные шардлеты в новые или менее загруженные сегменты.
Концепции и основные функции
Службы, размещаемые на стороне клиента
Служба разбиения/объединения реализуется в виде службы, размещаемой на стороне клиента. Необходимо развернуть и разместить службу в вашей подписке Microsoft Azure. Пакет, загружаемый через NuGet, содержит шаблон конфигурации, в который нужно внести информацию о вашем развертывании. Подробнее см. в руководстве по службе разбиения и слияния. Так как служба выполняется в подписке Azure, вы можете настроить большинство аспектов безопасности службы и управлять ими. Шаблон по умолчанию включает параметры настройки TLS, проверку подлинности клиента на основе сертификатов, шифрование хранимых учетных записей, защиту от DoS-атак и ограничения IP-адресов. Дополнительные сведения об аспектах безопасности можно получить в документе Настройка параметров безопасности для службы разбиения и объединения.
Служба, развернутая в стандартном виде, выполняется с одной рабочей ролью и одной веб-ролью. Каждая использует размер виртуальной машины A1 в облачных службах Azure. Эти параметры нельзя изменить при развертывании пакета, но можно изменить их после успешного развертывания в работающей облачной службе (через портал Azure). Обратите внимание, что рабочая роль по техническим причинам не должна быть настроена для более чем одного экземпляра.
Интеграция сопоставлений сегментов
Служба разбиения и объединения взаимодействует с картой сопоставления сегментов приложения. При использовании службы для разбиения и объединения диапазонов или перемещения данных между сегментами служба автоматически обновляет сопоставления сегментов. Для этого во время обработки запросов служба подключается к базе данных диспетчера сопоставления сегментов приложения и обновляет диапазоны ключей и сопоставления. Это гарантирует, что при выполнении операций разбиения и объединения задействованные сопоставления сегментов всегда будут иметь актуальные данные. Операции разбиения, объединения и перемещения шардлетов осуществляются перемещением пакетов шардлетов из исходного сегмента в целевой сегмент. Во время перемещения шардлета данные обрабатываемого шардлета отмечаются в карте сегментов как автономные и будут недоступны для подключений маршрутизации, управляемой данными, посредством API-интерфейса OpenConnectionForKey .
Согласованные подключения к шардлетам
При начале перемещения нового пакета шардлетов любые предоставленные картой сегментов подключения по маршрутизации на основе данных к сегменту, где хранится шардлет, обрываются и последующие подключения от API карты сегментов к этим шардлетам блокируются на время перемещения данных с целью предотвращения несогласованности. Подключения к другим шардлетам в пределах этого сегмента будут также разорваны, но могут быть немедленно восстановлены. После перемещения пакета шардлеты отмечаются как включенные в целевом сегменте, а исходные данные из исходного сегмента удаляются. Служба выполняет эти действия для каждого пакета, пока не будут перемещены все шардлеты. В результате во время выполнения операции разбиения, объединения или перемещения могут быть разорваны несколько подключений.
Управление доступностью шардлетов
Ограничение разрыва подключений рамками обрабатываемого в данный момент пакета шардлетов, как оговорено выше, ограничивает объем недоступных данных одним пакетом шардлетов. Такой подход более предпочтителен, чем если бы во время осуществления операции разбиения/объединения был недоступен весь сегмент. Размер пакета, который определяется количеством уникальных шардлетов для перемещения за момент времени, – это настраиваемый параметр. Его можно определить для каждой операции разделения и слияния в зависимости от потребностей в доступности и производительности приложения. Обратите внимание, что сегмент, заблокированный в сопоставлении сегментов, может превышать заданные размеры пакета. Это происходит потому, что служба выбирает размер диапазона таким образом, чтобы фактическое количество значений ключа сегментирования в данных примерно соответствовало размеру пакета. Это важно помнить, в особенности при наличии разреженных ключей сегментирования.
Хранилище метаданных
Служба разбиения и объединения использует базу данных для хранения состояния и журналов во время обработки запроса. Пользователь создает эту базу данных в своей подписке и указывает строку подключения в файле конфигурации для развертывания службы. Администраторы из организации пользователя также могут подключаться к этой базе данных для проверки хода выполнения запроса и изучения подробных сведений о потенциальных сбоях.
Сведения о сегментировании
Служба разбиения и объединения различает сегментированные таблицы (1), ссылочные таблицы (2) и обычные таблицы (3). Семантика операций разбиения, объединения и перемещения зависит от типа таблицы и определяется следующим образом:
Сегментированные таблицы
Операции разделения, объединения и перемещения переносят шардлеты из исходного сегмента в целевой. После успешного завершения всего запроса эти шардлеты удаляются из исходного сегмента. Обратите внимание, что целевые таблицы должны существовать на целевом сегменте до начала обработки операции и не должны содержать данных в целевом диапазоне.
Ссылочные таблицы
Для ссылочных таблиц операции разделения, объединения и перемещения копируют данные из исходного сегмента в целевой. Однако, обратите внимание, что в целевом сегменте не происходит изменений, если в заданной таблице уже присутствуют какие-либо строки. Для осуществления операции копирования ссылочной таблицы целевая таблица должна быть пустой.
Другие таблицы
В исходном или целевом сегменте операции разделения и объединения могут присутствовать другие таблицы. Служба разбиения и объединения не затрагивает эти таблицы при любых операциях перемещения или копирования данных. Учтите, что они могут помешать этим операциям в случае наличия ограничений.
Информация о ссылочных и сегментированных таблицах предоставляется интерфейсами API
SchemaInfo
в сопоставлении сегментов. Следующий пример демонстрирует использование этих API для объекта диспетчера сопоставления сегментов.// Create the schema annotations SchemaInfo schemaInfo = new SchemaInfo(); // reference tables schemaInfo.Add(new ReferenceTableInfo("dbo", "region")); schemaInfo.Add(new ReferenceTableInfo("dbo", "nation")); // sharded tables schemaInfo.Add(new ShardedTableInfo("dbo", "customer", "C_CUSTKEY")); schemaInfo.Add(new ShardedTableInfo("dbo", "orders", "O_CUSTKEY")); // publish smm.GetSchemaInfoCollection().Add(Configuration.ShardMapName, schemaInfo);
Таблицы и
nation
определены в качестве ссылочных таблицregion
и будут скопированы с помощью операций разделения или слияния и перемещения.customer
иorders
, в свою очередь, определяются как сегментированные таблицы.C_CUSTKEY
иO_CUSTKEY
используются в качестве ключа сегментирования.
Ссылочная целостность
Служба разбиения и объединения анализирует зависимости между таблицами и использует связи внешнего ключа и первичного ключа для выполнения операций перемещения ссылочных таблиц и шардлетов. В общем случае в первую очередь копируются ссылочные таблицы в порядке зависимости, затем копируются шардлеты в порядке их зависимостей в каждом пакете. Это нужно для того, чтобы учитывать ограничения внешнего ключа-основного ключа целевого сегмента при поступлении новых данных.
Согласованность сопоставления сегментов и завершение операций
Служба разбиения и объединения возобновляет работу после любого сбоя и стремится завершить любые активные запросы. Тем не менее, могут возникнуть неустранимые ситуации, например, когда целевой сегмент утерян или поврежден без возможности восстановления. В таком случае некоторые шардлеты, предназначенные для перемещения, могут сохраниться в исходном сегменте. Служба обеспечивает обновление сопоставления шардлетов только после успешного копирования необходимых данных в целевой сегмент. Шардлеты удаляются только после копирования всех данных в целевой сегмент и успешного обновления соответствующих сопоставлений. Операция удаления осуществляется в фоновом режиме, после того как диапазон данных уже стал доступен на целевом сегменте. Служба разбиения и объединения всегда гарантирует правильность сопоставлений в сопоставлении сегментов.
Пользовательский интерфейс службы разбиения и объединения
Пакет службы разбиения и объединения включает рабочую роль и веб-роль. Веб-роль используется для отправки запросов на разбиение и объединение в интерактивном режиме. Существуют следующие основные компоненты пользовательского интерфейса.
Тип операции
Тип операции — это переключатель, определяющий вид операции, выполняемой службой для данного запроса. Для выбора доступны сценарии разбиения, объединения и перемещения. Кроме того, запрошенную ранее операцию можно отменить. Можно использовать запросы на разбиение или объединение, а также перемещать запросы сопоставлений сегментов по диапазону. Сопоставления сегментов по списку поддерживают только операции перемещения.
Карта сегментов
Следующий раздел параметров запроса описывает сопоставление сегментов и базу данных, в которой размещается сопоставление сегментов. В частности, необходимо указать имя сервера и базы данных, в которой размещается карта сегментов, данные для подключения к базе данных c картой сегментов и, наконец, имя карты. В настоящее время операция принимает только один набор учетных данных. Эти учетные данные должны иметь достаточные разрешения для изменения сопоставления сегментов, а также пользовательских данных в этих сегментах.
Исходный диапазон (разделение и объединение)
Операции разделения и объединения обрабатывают диапазон, используя его нижний и верхний ключ. Чтобы указать операцию с несвязанным значением высокого ключа, установите флажок "Высокий ключ является максимальным" и оставьте поле с высоким ключом пустым. Значения ключей диапазона, заданные вами, могут не полностью совпадать с сопоставляемыми значениями и их границами в сопоставлении сегментов. If you do not specify any range boundaries at all the service will infer the closest range for you automatically. Сценарий PowerShell GetMappings.ps1 можно использовать для получения текущего сопоставления для данного сопоставления сегментов.
Поведение источника разделения (разделение)
Для операций разделения необходимо указать точку для разделения исходного диапазона. Это делается путем ввода ключа сегментирования для того места, в котором необходимо выполнить разбиение. Используйте расположенный рядом переключатель, чтобы указать, следует ли переместить нижнюю часть диапазона (за исключением ключа разбиения), или верхнюю часть диапазона (включая ключ разбиения).
Исходный шардлет (перемещение)
Операции перемещения отличаются от операций разделения или объединения тем, что для них не требуется указание диапазона в источнике данных. Источник данных для перемещения просто определяется значением ключа сегментирования, который планируется переместить.
Целевой сегмент (разделение)
После введения информации об исходном сегменте для операции разделения необходимо указать, куда следует скопировать данные, предоставив серверу имя базы данных для целевого сегмента.
Целевой диапазон (объединение)
Операции объединения перемещают шардлеты в существующий сегмент. Существующий сегмент указывается путем ввода пределов диапазона сегмента, с которым необходимо выполнить объединение.
Размер пакета
Размер пакета определяет количество шардлетов, которые будут отключены во время перемещения данных. Это целое число; когда нежелательны продолжительные периоды простоя сегментов, можно использовать маленькие значения. Большие значения увеличат продолжительность отключения шардлетов, но могут повысить производительность.
Идентификатор операции (отмена)
Если идет выполнение операции, в которой больше нет потребности, можно отменить эту операцию, указав в этом поле ее идентификатор. Идентификатор операции можно получить из таблицы состояний запросов (см. раздел 8.1) или из выходных данных в браузере, через который был послан запрос.
Требования и ограничения
Текущая реализация службы разбиения и объединения соответствует следующим требованиям и ограничениям.
- Сегменты должны существовать и быть зарегистрированы в сопоставлении сегментов до выполнения операций разбиения и объединения над этими сегментами.
- При исполнении операций служба не создает таблицы или другие объекты базы данных автоматически. Это означает, что схемы для всех сегментированных таблиц и ссылочных таблиц целевого сегмента должны существовать до начала любой операции разбиения, объединения и перемещения. В частности, сегментированные таблицы должны быть пустыми в диапазоне, в который операцией будут добавляться новые данные. В противном случае операция завершится ошибкой при начальной проверке согласованности целевого сегмента. Также обратите внимание на то, что ссылочные данные копируются только в случае, если ссылочная таблица пуста. Не гарантируется согласованность с другими параллельными операциями записи в эти ссылочные таблицы. Рекомендуется не осуществлять другие операции записи для внесения изменений в эти ссылочные таблицы во время выполнения операции разбиения и объединения.
- Служба использует идентификатор строки, который задается уникальным индексом или ключом, включая ключ сегментирования, который повышает надежность больших шардлетов. Это позволяет службе перемещать данные с еще большей степенью детализации, чем просто значение ключа сегментирования. Это позволяет уменьшить максимальный объем пространства журнала и количество требуемых блокировок для проведения операции. Рекомендуется для данной таблицы создать уникальный индекс или первичный ключ, включая ключ сегментирования, если вы хотите использовать эту таблицу вместе с запросами разбиения, объединения и перемещения. Чтобы производительность повысилась, ключ сегментирования должен находиться в первом столбце ключа или индекса.
- Во время обработки запроса некоторые данные шардлета могут одновременно быть и в исходном и в целевом сегменте. Это необходимо для защиты от сбоев при перемещении шардлетов. Интеграция разбиения и слияния с картой сегментов гарантирует, что в подключениях посредством API-интерфейса управляемой данными маршрутизации, в которых используется метод OpenConnectionForKey для карты сегментов, не возникнет несогласованных промежуточных состояний. Тем не менее при подключении к исходным или целевым сегментам без использования метода OpenConnectionForKey во время обработки запросов разбиения, слияния и перемещения могут наблюдаться несогласованные промежуточные состояния. Эти подключения могут показывать частичные или повторяющиеся результаты в зависимости от времени выполнения или используемых в подключении сегментов. В настоящий момент это ограничение распространяется на подключения, созданные многосегментными запросами эластичного масштабирования.
- База метаданных для службы разбиения и объединения не должна быть общей для различных ролей. Например, роль службы разбиения и объединения во время работы в промежуточном режиме должна ссылаться на базу метаданных, отличную от базы данных рабочей роли.
Выставление счетов
Служба разбиения и объединения выполняется как облачная служба в подписке Microsoft Azure. Поэтому плата взимается с вашего экземпляра облачных служб. Если вы нечасто выполняете операции разбиения, объединения и перемещения, рекомендуем удалить облачную службу разбиения и объединения. Это поможет сократить расходы на действующие или развернутые экземпляры облачной службы. Готовую к работе конфигурацию можно повторно развернуть и запустить всякий раз, когда потребуется выполнить операции разбиения и объединения.
Наблюдение
Таблицы состояния
Служба разбиения и слияния предоставляет таблицу RequestStatus в базе данных хранилища метаданных для отслеживания завершенных и выполняемых запросов. В таблице перечислены строки для каждого запроса разбиения и объединения в данном экземпляре службы. В ней представлена следующая информация для каждого запроса:
Timestamp
Время и дата начала запроса.
OperationId
Глобальный уникальный идентификатор запроса. Этот идентификатор также может использоваться для отмены операции во время ее выполнения.
Состояние
Текущее состояние запроса. Для выполняемых запросов в ней также приведен текущий этап выполнения запроса.
CancelRequest
Флаг, указывающий, отменен ли запрос.
Ход выполнения
Процентная оценка хода выполнения операции. Значение 50, указывает, что операция завершена примерно на 50 %.
Сведения
Более подробный отчет о ходе выполнения в формате XML. Отчет о ходе выполнения периодически обновляется по мере копирования наборов строк из исходного в целевой сегмент. В случаях ошибок или исключений в этом столбце также содержится более подробная информация об ошибке.
Система диагностики Azure
Служба разбиения и объединения для наблюдения и диагностики использует систему диагностики Azure из Azure SDK 2.5. Управление конфигурацией диагностики описано в разделе Включение диагностики в облачных службах Azure и виртуальных машинах. Загружаемый пакет содержит две конфигурации диагностики: для веб-роли и для рабочей роли. В нем описаны журналы счетчиков производительности, журналы IIS, журналы событий Windows и событий приложения разбиения и объединения.
Развертывание диагностики
Примечание.
В этой статье предусмотрено использование модуля Azure Az PowerShell, который является рекомендуемым модулем PowerShell для взаимодействия с Azure. Чтобы начать работу с модулем Az PowerShell, ознакомьтесь со статьей Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.
Внимание
Модуль PowerShell Azure Resource Manager по-прежнему поддерживается, но вся дальнейшая разработка сосредоточена на модуле Az.Sql. Сведения об этих командлетах см. в разделе AzureRM.Sql. Аргументы команд в модулях Az и AzureRm практически идентичны.
Чтобы включить наблюдение и диагностику с помощью конфигурации диагностики для веб- и рабочих ролей, предоставленных пакетом NuGet, выполните следующие команды с помощью Azure PowerShell:
$storageName = "<azureStorageAccount>"
$key = "<azureStorageAccountKey"
$storageContext = New-AzStorageContext -StorageAccountName $storageName -StorageAccountKey $key
$configPath = "<filePath>\SplitMergeWebContent.diagnostics.xml"
$serviceName = "<cloudServiceName>"
Set-AzureServiceDiagnosticsExtension -StorageContext $storageContext `
-DiagnosticsConfigurationPath $configPath -ServiceName $serviceName `
-Slot Production -Role "SplitMergeWeb"
Set-AzureServiceDiagnosticsExtension -StorageContext $storageContext `
-DiagnosticsConfigurationPath $configPath -ServiceName $serviceName `
-Slot Production -Role "SplitMergeWorker"
Дополнительные сведения о настройке и развертывании параметров диагностики можно найти в разделе Включение диагностики в облачных службах Azure и виртуальных машинах.
Получение диагностики
Диагностику можно получить при помощи Visual Studio Server Explorer, смотрите узел Azure в дереве обозревателя сервера. Откройте экземпляр Visual Studio и в строке меню щелкните Вид, затем Обозреватель серверов. Щелкните значок Azure, чтобы подключиться к подписке Azure. Перейдите в Azure -> "Хранилище" -><your storage account>
-> "Таблицы" -> "WADLogsTable". Дополнительные сведения см. в описании обозревателя сервера.
WaDLogsTable, выделенный на рисунке выше, содержит подробные события из журнала приложений службы разделения слиянием. Обратите внимание, что конфигурация по умолчанию, которая предоставляется в составе загружаемого пакета, предназначена для рабочего развертывания. Как следствие, интервал извлечения журналов и счетчиков из экземпляров службы достаточно большой (5 минут). Для тестирования и разработки можно сократить этот интервал, изменив настройки параметров диагностики веб-роли или рабочей роли. Щелкните правой кнопкой мыши роль в Visual Studio Server Explorer (см. выше) и затем измените период передачи в диалоговом окне настройки параметров диагностики:
Производительность
Обычно высокая производительность ожидается на высших, более производительных уровнях служб. Более высокая скорость ввода-вывода, мощные ЦП и большая память для высших уровней служб предоставляют преимущества при осуществлении операций массового копирования и удаления данных, которые используются внутри служб разбиения и объединения. По этой причине повышать уровень служб нужно только для этих баз данных на ограниченный период времени.
Служба также выполняет запросы проверки в процессе обычной работы. Эти запросы проверяют непредвиденное наличие данных в целевом диапазоне и контролируют запуск любой операции разбиения, объединения и перемещения из согласованного состояния. Все эти запросы работают с ключом сегментирования, который задает область действия операции. С запросом также передается размер пакета. Эти запросы лучше всего выполнять при наличии индекса с ключом сегментирования в первом столбце.
Кроме того, свойство уникальности при наличии ключа сегментирования в первом столбце позволят службе использовать оптимизированный алгоритм ограничения потребления ресурсов для журналов и памяти. Это свойство уникальности необходимо для перемещения больших объемов данных (обычно свыше 1 ГБ).
Обновление
- Следуйте инструкциям в разделе Развертывание службы разбиения и объединения.
- Измените файл конфигурации облачной службы для развертывания разбиения и объединения, чтобы были отражены новые параметры конфигурации. Новый обязательный параметр — это сведения о сертификате, используемом для шифрования. Проще всего сделать это, сравнив загруженный новый шаблон конфигурации с существующей конфигурацией. Убедитесь, что вы добавите параметры как для
DataEncryptionPrimaryCertificateThumbprint
интернета, так иDataEncryptionPrimary
для рабочей роли. - Перед развертыванием обновления в Azure убедитесь, что завершены все текущие операции разбиения и объединения. Это можно сделать, запросив таблицы RequestStatus и PendingWorkflows в базе данных метаданных разбиения и объединения для текущих запросов.
- Обновите существующее развертывание облачной службы для разбиения и объединения в подписке Azure с новым пакетом и обновленным файлом конфигурации службы.
Вам не требуется предоставлять новую базу метаданных для обновления средства разбиения и объединения. Новая версия метаданных существующей базы данных автоматически обновляется до новой версии.
Рекомендации и устранение неполадок
- Рекомендуется создать клиент для тестов и проверить наиболее важные операции разбиения, объединения и перемещения на нескольких сегментах с использованием этого тестового клиента. Убедитесь, что все метаданные определены корректно в сопоставлении сегментов и что операции не нарушают ограничения и не повреждают внешние ключи.
- Стоит поддерживать размер данных тестового клиента так, чтобы он был больше максимального размера данных вашего крупнейшего клиента. Это позволит избежать проблем, связанных с размером данных. Это позволит оценить верхнюю границу времени перемещения всех данных одного клиента.
- Убедитесь, что схема допускает удаления. Службе разбиения и объединения требуется возможность удаления данных из исходного сегмента после успешного копирования данных в целевой сегмент. Например, удаление триггеров может препятствовать удалению данных службой в источнике данных и привести к сбою операции.
- Ключ сегментирования должен быть первым столбцом первичного ключа или определения уникального индекса. Это обеспечивает наилучшую производительность как для запросов проверки разбиения и объединения, так и для фактических операций перемещения и удаления данных, которые всегда работают с диапазонами ключей сегментирования.
- Разместите свою службу разбиения и объединения в области и центре данных, где располагаются ваши базы данных.
Связанный контент
Еще не используете средства эластичных баз данных? Ознакомьтесь с нашим руководством по началу работы. Возникшие вопросы вы можете задать нам на странице вопросов Microsoft Q&A по Базе данных SQL. Что касается запросов новых функций, вы можете поделиться новыми идеями или проголосовать за существующие на форуме отзывов по Базе данных SQL.