Вариант стратегии быстрого и надежного резервного копирования/восстановления VLDB по сетиИсточник: msmvps Томас Грохсер (Thomas H. Grohser)
Автор: Томас Грохсер (Thomas H. Grohser) Резюме: Размер баз данных непрерывно растёт, так же, как и растут требования к надежности и доступности баз. Одновременно с этим как никогда важным становится требование быстрого и надежного восстановления данных. Этот документ посвящён проблемам проектирования устойчивого резервного копирования и решений по восстановлению очень больших баз данных (VLDB). В этой статье на реальном примере демонстрируется как лучше всего использовать функциональность SQL Server 2008 для осуществления резервного копирования и восстановления, которыми обладает SQL Server 2008, а также создание планов резервного копирования и восстановления VLDB по сети.
Введение
Резервное копирование и восстановление баз данных в SQL Server похожи на многие другие, окружающие нас в реальном мире вещи; Вы сможете не понять их ценность, когда столкнетесь с ними впервые. За эти годы все мы сталкивались с такими ситуациями, когда не оказывалось под рукой нужной резервной копии; следствием этого становилась потеря бизнеса компанией, потеря работы для людей и потери данных. Компании находят оправдания, для того, чтобы не делать резервное копирование и не создавать план восстановления. Часто слышно фразы, подобные этим: "У нас есть кластер, так что нам не нужна резервная копия", или "Нам не нужен план восстановления, потому что мы делаем резервные копии каждый день". Что мы поняли за эти годы, так это то, что резервные копии и план восстановления нужны во всех случаях.
Краткий обзор Решения
Соглашение о качестве сервисаСамый важный шаг для создания успешной стратегии резервного копирования, это разработка и утверждение правильного соглашения об уровне сервиса (SLA). Если требования SLA неизвестны, невозможно организовать верную стратегию резервного копирования и восстановления.
Есть много других положений SLA, которые нужно не забыть согласовать, но мы не станем останавливаться в этой статье на абсолютно всех положениях возможного варианта соглашения.
Краткое описаниеФункции резервного копирования и восстановления предоставляемые SQL Server достаточно просты Основной задачей становится проектирование решений, способных обеспечить исполнение всех требований бизнеса и заданный уровень эффективности даже в случае серьёзного отказа оборудования или программных систем.
Как использовать данный документВам предлагается краткий обзор того, как надежно и быстро создавать по сети полные резервные копии баз данных. Помимо формализации требований SLA, в статье показано, как задача была реализована и какие варианты решения и параметры были избраны для возможных настроек команд резервного копирования и восстановления. В тексте также встречаются разнообразные советы и рекомендации, которые могут вам помочь при проектировании подобных решений в промышленной среде.
Реализация надежного резервирования по сетиПрежде всего, решение должно быть надежно. Надежное резервное копирование подразумевает что резервная копия должна восстанавливаться успешно и это не должно приводить к потере целостности данных с точки зрения приложения.
Когда резервную копию можно считать правильной?Это один из таких вопросов, которые, будучи заданы десяти разным людям, в итоге выдадут одиннадцать непохожих друг на друга ответов. В рамках этой статьи, мы будем придерживаться следующих критериев:
В итоге, полный цикл резервирования состоит из следующих шагов:
Обратите внимание: Не все компании имеют удаленный центр данных и, если невозможно выполнить восстановление в другом месте, храните резервные копии в разных местах, не там, где исходные базы данных. Никогда не размещайте резервные копии в той же самой стойке, или на том же самом сервере, или на том же диске где размещены исходные данные.
Основные опции встроенного механизма резервирования и восстановленияВстроенные средства резервного копирования и команды восстановления в SQL Server 2008 предоставляют следующие возможности:
Если резервное копирование выполняется на локальный диск, такая стратегия фактически работает быстрее, но требует дополнительного дискового пространства на сервере баз данных. Если резервное копирование выполняется на ресурс в сети, может подняться производительность стратегии в целом, не потребуется дополнительного дискового пространства на сервере баз данных. Вторая стратегия проще первой и поэтому в меньшей мере подвержена ошибкам. Если нет требований по хранению файлов резервных копий на локальных дисках, стоит выполнять копирования на распределённый ресурс в сети. Далее в этой статье пойдёт речь только об этой стратегии.
Что может пойти не так?Для того чтобы понять, как все сделать правильно, необходимо для начала рассмотреть все возможные варианты отказов. Необходимо определить все возможные условия сбоя, а затем спроектировать способы защиты организации от этих состояний. Например, могут возникнуть следующие проблемы:
Следующие подразделы статьи описывают те меры, которые были предприняты для защиты резервных копий от этих четырех проблем.
Выполнение надежного резервного копирования по сетиДопустим, имеется база данных с именем MyVLDB, которую нужно сохранить. База данных MyVLDB находится на сервере с именем SQL01. Файл-сервер, на котором мы хотим разместить резервную копию, называется BAK01. Полностью квалифицированное имя файлового ресурса \\backup. На рисунке 1 проиллюстрирована эта конфигурация.
Следующая команда выполняет резервное копирование базы данных на файловый сервер. BACKUP DATABASE MyVLDB Хотя это вполне допустимая команда, она не обеспечивает никакой защиты от перечисленных выше проблем. Далее представлены некоторые решения, которые помогут в случае нештатного поведения систем, и которые можно будет использовать в промышленной среде.
Защита от некорректной записи в файл резервной копииФайлы могут оказаться испорченными в процессе записи. Первый и самый простой шаг, который Вы можете предпринять для защиты от подобной проблемы, это генерация контрольной суммы файла резервной копии, которая позволит потом удостовериться, что будет обнаружен любой возможный вид искажения файла резервной копии. Внесём соответствующие изменения в сценарий: BACKUP DATABASE MyVLDB Опция WITH CHECKSUM помещает контрольную сумму на каждую страницу файла резервной копии, что позволяет обнаруживать повреждения страниц файла резервной копии во время её восстановления. Резервное копирование с опцией CHECKSUM будет потреблять всего на 2%-3% больше ресурсов, чем предыдущий вариант резервирования, но это с лихвой окупается повышением надежности резервирования.
Защита от отказа сервера баз данных во время резервированияРешение следующей проблемы зависит от того, что случится после отказа сервера баз данных в тот момент, когда он был занят созданием резервной копии. Если сбой сервера произошёл во время создания резервной копии, это приводит к невозможности использования файла этой резервной копии. Единственным способом устранить подобную проблему является повторная попытка создания резервной копии, которую следует предпринять сразу после того, как нормальная работа сервера будет восстановлена, например, после перезагрузки. В случае отказа резервного копирования, нужно избегать перезаписи резервной копии поверх уже существующих её файлов, чтобы на всякий случай была возможность восстановиться из последней успешной копии. BACKUP DATABASE MyVLDB Другой способ заключается в добавлении к имени файла даты и времени резервного копирования, и этот способ применим, если копирование достаточно делать раз в час или один раз в день. Следующий пример создает порядковый номер резервной копии, используя для этого функцию вычисления универсального времени (UTC): -- использование GETUTCDATE() в качестве порядкового номера копии Альтернативный пример представлен ниже, в нём порядковый номер резервной копии создаётся путём приращения единицы к текущему порядковому номеру каждый раз, когда выполняется резервное копирование: -- для нумерации копий используется возрастающая последовательность чисел -- это соответствующая команда резервного копирования Хотя этот метод выглядит более сложным, он более гибок. Следующие ниже примеры будут основываться на этом методе нумерации копий.
Защита от отказа сервера хранения копийФайловые серверы для хранения резервных копий также могут отказать и от этого необходимо предусмотреть защиту. Способ предотвращения подобного отказа состоит в том, чтобы использовать дополнительный сервер (в нашем примере это BAK02). Размещение этого сервера ещё в одном центре данных (отличном от двух рассмотренных выше) обеспечивает ещё большую защиту в случае отказа.
Резервная копия делается поочерёдно на двух серверах, и после двух полных циклов резервного копирования становится устойчивой к отказам, поскольку будут существовать две полные резервные копии на двух разных серверах в разных центрах данных.
Проверка восстанавливаемости резервной копииСледующим логическим шагом после создания резервной копии должна быть проверка на возможность воспользоваться файлами резервной копии для восстановления базы данных. Лучшим способом проверить это является восстановление базы данных из сохранённого файла резервной копии.
Восстановление в базу данных Test BackupДля того чтобы восстановить из копии тестовую базу данных, нужно иметь ещё один экземпляр SQL Server, установленный на резервном сервере, и ещё один логический диск - LUN, доступный серверу резервных копий. На втором сервере во время восстановления будут временно размещены файлы базы данных (диск должен быть достаточно большим, чтобы поместились файлы базы данных, размер которых может быть максимально возможным в обозримой перспективе). Для этих целей дисковый массив RAID0 является приемлемым компромиссом между производительностью, уровнем затрат и доступностью. Избыточность дисковых массивов тут не нужна, потому что база данных будет существовать временно. Уровень RAID 1/0 также допустим, если вы можете это себе позволить.
Для того чтобы получить из файла резервной копии MyVLDB00000001.bak информацию о схеме размещения базы данных по дискам, нужно выполнить следующую команду: RESTORE FILELISTONLY FROM DISK = 'c:\backup\MyVLDB00000001.bak'; После извлечения из первого файла резервной копии информации об используемых исходной базой данных дисках, нужно создать команду восстановления базы, которая восстановит файлы данных базы в предназначенное для этого место на резервном сервере. При этом сохраняются те же самые логические имена файлов, какие были получены из файла копии предыдущей командой. Сделать это можно с помощью следующего запроса: RESTORE DATABASE MyVLDB Если процесс восстановления завершится без ошибок, можно считать, что файлы резервной копии не были повреждены.
Выполнение DBCC CHECKDBЧтобы проверять целостность восстановленной базы данных, выполните следующую команду: DBCC CHECKDB(MyVLDB) WITH NO_INFOMSGS, EXTENDED_LOGICAL_CHECKS, DATA_PURITY Если эта команда не возвратит ошибок, можно быть уверенным, что резервная копия базы данных пригодна для восстановления базы в случае необходимости.
Автоматизация описанного процессаНиже представлен сценарий, который автоматически извлекает имена файлов из первого файла резервной копии и передаёт их на вход команды восстановления базы, выполняя затем инструкцию DBCC CHECKDB. DECLARE @dbName AS sysname = 'MyVLDB'; -- Создаём сценарий проверки восстанавливаемости
Высокая производительность резервирования по сетиКопирование двухтерабайтной базы данных на локальные жесткие диски и затем её восстановление удовлетворяет временным требованиям на восстановление нашей системы SQL Server. Однако, этот простой процесс не может обеспечить адекватную защиту от сценариев полного отказа ,формализованных в соглашении SLA. С другой стороны, копирование базы данных по сети в удаленное хранилище защиту от полного отказа обеспечить может. Проблему может создать ограничение, накладываемое полосой пропускания сети, которое обычно не превышает обычно 1 Гигабита в секунду (Gbps). Когда мы изучали данную ситуацию, основным критерием для сравнения производительности было копирование данных по сети 1-Gbps на расстояние в 10 миль в другой центр данных. Этот процесс занимал более 24-х часов, что было совершенно неприемлемо. Необходимо было найти такое решение, которое давало бы возможность выполнять резервное копирование в рамках того окна времени восстановления, которое было указано в SLA.
Таблица 1: Продолжительность резервирования 2Tб на сервер в 10 милях по сети
Сокращение времени резервного копированияЕсть два способа повышения скорости выполнения резервирования: оптимизация и распараллеливание.
Параллельное использование нескольких дисков и файловОдним из подходов к повышению производительности является увеличение числа дисков и размещаемых на них файлов. Давайте посмотрим что получится, если добавить логические диски (отдельные LUN) для каждого из серверов, и разместить файлы базы данных и резервной копии на этих дополнительных логических дисках.
Ниже показана команда, которая выполняет резервное копирование в два файла. BACKUP DATABASE MyVLDB Такое использование команды резервного копирования приводит к некоторому выигрышу в производительности, но не к четырехкратному её увеличению, которое можно было бы ожидать (двойной выигрыш при чтении плюс двойной выигрыш на записи). Чтобы полностью представить себе возможный выигрыш, нужно учесть пропускную способность сети.
Использование нескольких сетевых платПри резервном копировании по сети узким местом часто становится сеть. Увеличение пропускной способности сети больше чем 1 Gbps недешево, однако увеличение числа гигабитных сетевых плат в сервере относительно недорогая опция.
Многие производители сетевого оборудования предлагают сегодня решения, позволяющие объединять несколько сетевых плат в один логический сетевой интерфейс. Это решение хорошо работает на серверах, имеющих сотни клиентских подключений из сети, это решение позволяет использовать алгоритмы балансировки нагрузки, в зависимости от того, какие клиенты работают с сервером. В нашем случае нужно увеличить скорость между двумя узкоспециализированными серверами. Для этого мы использовали разделение сети на логические подсети. В таблице ниже показаны подсети для каждой сетевой платы двух серверов.
Таблица 2: Подсети Каждая сетевая плата находится в своей подсети (192.168.1.0/24, 192.168.3. 0/24). Теперь можно внести небольшие изменения в команду резервного копирования, указав там IP - адреса вместо имён серверов. Таким способом становится легко управлять тем, какая подсеть, а, следовательно, и какая сетевая плата будет использоваться для транспортировки данных. Тот факт, что все логические подсети будут находиться на одном и том же втором физическом уровне сети, не будет иметь никакого отрицательного влияния на это решение. BACKUP DATABASE MyVLDB В случае восстановления, это работает по той же схеме. RESTORE DATABASE MyVLDB Точно также всё будет работать и с большим числом сетевых плат. В описываемых в статье экспериментах проверялась параллельная работа 16 сетевых плат. BACKUP DATABASE MyVLDB Эмпирическим путём было показано, что в зависимости от производительности используемых ресурсов (главным образом серверов и сетевых плат), от двух до четырёх файлов через одну сетевую плату передаются довольно хорошо. Однако, только тесты в конкретных условиях заказчика могут помочь найти оптимальное число передаваемых через сетевую плату файлов.
Рекомендации по общему числу используемых файловНа основании результатов множества экспериментов, были выработаны рекомендации по оптимизации резервного копирования. Подспудно было также выяснено, что резервное копирование работало лучше в тех случаях, когда все ресурсы загружались равномерно. Для получения оптимальных результатов, все представленные ниже равенства должны выдерживаться. Уравнения перечислены в порядке их значимости, с представлением рекомендованных значений для n, которые выделены жирным шрифтом. Файлы базы данных должны быть равномерно распределены по логическим дискам, а файлы резервных копий должны равномерно распределяться между сетевыми платами.
Таблица 3: Сбалансированное распределение файлов по дискам
Дополнительные способы оптимизации и рекомендации
Разделение сетей для резервного копирования и общего доступаВсегда можно рассчитывать на хороший эффект от разделения сети общего доступа и сети для резервного копирования по физически независимым, разным сетям. Из-за разной природы трафика сетей общего доступа и сети резервного копирования, коммутаторы не всегда могут оптимально обслуживать одновременно два этих вида трафика. Кроме того, для достижения высокой пропускной способности трафика резервного копирования часто требуется большая часть ресурсов коммутатора.
Конфигурация на Рисунке 7 использует аппаратные средства сетевого коммутатора существенно эффективнее, чем на рисунке 8.
Большие фреймыМаксимальный размер пакета сети Ethernet в нормальных условиях составляет 15000 байт (равен размеру фрейма). Это означает то, что для передачи по сети 1 Мегабайта, его придётся разбить на 700 пакетов, которые будут переданы один за другим.
BLOCKSIZEПараметр, который задаёт используемый командой BACKUP размер блока, должен соответствовать размеру блока записи устройств долговременного хранения. Когда запись осуществляется на отдельный диск, будет работать достаточно хорошо даже используемое по умолчанию для размера блока значение равное 512. Если же запись направлена на RAID - массив или на SAN, стоит убедиться в том, что используемое по умолчанию значение не окажется меньше, чем, например, 65536.
BUFFERCOUNT и MAXTRANSFERSIZEИз параметров команды BACKUP можно выделить такие, которые также очень сильно влияют на производительность резервного копирования, это параметры BUFFERCOUNT и MAXTRANSFERSIZE. К сожалению, даже недели тестов не смогли помочь составить правило подбора оптимальных значений для этих параметров, поэтому Вам также необходимо будет выяснять оптимальные значения тестированием в Вашей среде. В качестве совета. для значения параметра MAXTRANSFERSIZE если у Вас система x64 или IA64 с достаточным объёмом оперативной памяти, можно начать тестирование со значения максимального размера буфера 4 Мб (4194304). Для получения более подробной информации о параметре BUFFERCOUNT и о других оптимизирующих параметрах, обратитесь к рекомендациям по настройке производительности сжатия резервных копий в технической статье: Tuning the Performance of Backup Compression in SQL Server 2008
Сжатие резервной копииСжатие резервных копий (новая функция, появившаяся в SQL Server 2008) предоставляет возможность увеличить производительность резервирования и в то же время существенно сократить потребляемое копией дисковое пространство, которое выделено для хранения резервных копий. Для включения сжатия резервной копии, в команде BACKUP нужно добавить опцию WITH COMPRESSION. BACKUP DATABASE MyVLDB Степень сжатия в действительности зависит от данных, которые хранятся в базе. Для большинства баз данных (цифровая информация, денежно-кредитные операции, дата и время, простой текст), коэффициент сжатия будет находиться между 1:4 и 1:6. Для баз данных содержащих некоторые другие типы данных, например, картинки, которые уже в сжатом формате, можно ожидать результаты похуже. Для получения более подробной информации об использовании сжатия с разными типами данных, смотрите статью в SQL Server Books Online: Сжатие резервных копий. sp_configure 'backup compression default', 1 Тут следует быть осторожным, поскольку если сжатие включается на уровне всего сервера, оно будет применяться и для разностных копий и для копий журнала транзакций. И если повышенная утилизация процессоров из-за сжатия не будет проблемой для полных резервных копий (такие копии обычно не планируют на время пиковых нагрузок), использование сжатия копий журнала может вызвать проблемы во время активной работы пользователей.
Рекомендации по аппаратным средствам файловых серверов, предназначенных для хранения копий
Дисковые устройстваК дискам, используемым для хранения и проверки восстанавливаемости файлов резервных копий, не применяются такие же высокие требования, как к дискам промышленных серверов. Так происходит потому, что у них почти все операции ввода-вывода выполняются последовательно и не носят случайный характер. Поэтому SATA диски в большинстве случаев очень хорошо подходят для этих целей.
Настройка RAID-контроллераДля создания массивов логических дисков, на которых решено хранить файлы резервных копий, стоит выбрать большой размер сегмента (64 Кб, 128 Кб, 256 Кб и выше). Также, стоит установить полное кэширование записи, а кэширование чтения можно полностью отключить. Можно ещё активизировать кэш записи отдельных шпинделей, так как если во время резервного копирования произойдёт сбой по питанию, резервная копия так и так станет непригодной, и в таком случае не имеет значения, были ли потеряны какие-либо байты в кэше записи или нет.
Настройка HBAЕсли в качестве дисков для файлов резервных копий используется дисковая подсистема типа SAN, максимальную глубину очереди для адаптеров, которые используются в подключении SAN, нужно увеличить настолько, насколько это возможно. Значение по умолчанию составляет 32, но резервное копирование и восстановление будут работать намного лучше при значениях близких к 256. Более подробную информацию можно найти в статье Настройка Windows Server 2008/2003 x64 для обслуживания SQL Server 2008, в разделе "NumberOfRequests и MaximumSGList".
Сетевые платыСледует очень разборчиво подходить к выбору сетевых плат, которые будут использоваться на серверах. Число портов ещё не гарантирует адекватную производительность ввода-вывода для всех этих портов в одно и то же время. Бывает так, что два четырехпортовых адаптера могут оказаться более производительными, чем один адаптер с четырьмя портами. Количество процессорного времени, используемого драйвером сетевого интерфейса, также очень важно. Бывают такие сетевые платы, которые используют до 50 процентов ресурсов одного процессора, и в то же время есть другие, которые используют всего 3 - 5 процентов.
Системы на основе NUMAЕсли сервер использует архитектуру с неоднородным доступом к памяти (NUMA), необходимо убедится в том, что все адаптеры ввода-вывода (например, NIC, RAID и HBA) распределены между всеми NUMA - узлами системы.
Вычисление времени, необходимого для резервного копирования и восстановления базы данныхОдним из ключевых элементов SLA является тот интервал времени, который закладывается на задачи резервного копирования, т.е. нужно будет рассчитать и запланировать время, которое займёт весь этот процесс. Это поможет выполнить требования спецификации ко времени восстановления работоспособности, а также, это помогает сформировать другие важные моменты аварийного плана, такие как частота выполнения резервных копий и параметры сжатия. Определение времени, занимаемого процессами резервного копирования и восстановления, выполняется в несколько шагов. Вначале необходимо вычислить объём копируемых данных: Если ожидается постоянный рост объёма данных во времени, размер файла полной резервной копии по истечении заданного периода времени может быть определен по следующей формуле: С другой стороны, если прирост относителен, для оценки будущего размера можно воспользоваться другой формулой: К полученному по формуле значению всегда стоит добавлять не меньше 10 процентов, в качестве буфера безопасности.
После этого, опираясь на данные о числе логических дисков для параллельной работы с файлами базы данных, на число логических дисков, используемых для параллельной работы с файлами резервных копий и число используемых сетевых плат, можно ввести следующие индикаторы производительности: Коэффициент сжатия резервной копии определяется так: Если сжатие не используется, это приведет к тому, что коэффициент сжатия станет таким: CompressionFactor = 1. В большинстве случаев, без сжатия резервной копии производительность сети будет наименьшей по сравнению с производительностью дискового чтения и записи, но когда сжатие включено, основным ограничением может стать чтение из базы: DatabaseReadPerformance, или другие, не учтенные пока компоненты, такие как загруженные сжатием процессорные ядра. Вычисления для расчета времени восстановления будут сложнее. Сначала нужно узнать, поддерживает ли используемая система мгновенную инициализацию файлов. Эта возможность позволяет SQL Server создавать файлы данных на томах NTFS без обнуления занимаемого файлами места во время создания или расширения файла. Поскольку у этого механизма существуют связанные с безопасностью риски, такой возможностью можно воспользоваться, только если учетной записи, под которой запущена служба SQL Server предоставить в локальных политиках право "Perform Volume Maintenance". Если учетная запись пользователя входит в группу локальных администраторов, это право ей будет предоставлено по умолчанию (Примечание: время инициализации файла журнала транзакций может ограничивать производительность, так как занимаемое этим файлом место не может не заполняться нулями). И точно так же, как в случае с расчетом времени резервного копирования, оценить время на восстановление из копии можно так: В случае если RestoreTime или BackupTime выше заданных SLA значений, можно воспользоваться изложенными ранее рекомендациями по уменьшению этих значений. Распараллеливание операций обычно ускоряет процесс больше чем попытка ускорить работу одного из компонент во всей цепочке. В сценариях с очень высокой производительностью стоит задуматься о применении обоих подходов. Значение BackupTime тут используется такое, как было описано ранее, а две другие переменные вычисляются так: Обратите внимание: на исполнение команды CHECKBD может потребоваться больше времени, чем время, которое необходимо для чтения с диска. Оно зависит от сложности схемы базы данных, и оно точно не будет меньше времени чтения.
ЗаключениеMicrosoft и, непосредственно команда SQL Server постоянно совершенствуют технологии обеспечения живучести систем, которые призваны помочь клиентам и партнерам решать задачи резервного копирования и восстановления в масштабах предприятия. SQL Server 2008 обеспечен для этих задач всем необходимым функционалом, на который могут положиться специалисты и который помогает успешно справляться с присущими сегодняшнему дню требованиями по управлению и защите данных. За счёт усовершенствований в ключевых областях, SQL Server 2008 стал надёжной платформой для обслуживания очень больших баз данных. Если эта статья помогла Вам, пожалуйста, сообщите автору о Ваших впечатлениях. Пришлите условную оценку статьи по пятибалльной системе и напишите, почему Вы дали такую оценку?
Приложение: Используемые аппаратные средстваСервер баз данных:
Файловые серверы копий:
Сетевое оборудование:
Параметры настройки резервного копирования:
Сетевые платы, которые использовались для резервного копирования, были равномерно распределены внутри сервера, а процессорные ядра, обслуживающие прерывания сетевых плат, были выбраны с учётом топологии узлов NUMA, чтобы ввод-вывод каждой сетевой платы обслуживался оптимальными процессорами.
|