powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Создание "зеркала" БД на другом сервере через nbackup
14 сообщений из 14, страница 1 из 1
Создание "зеркала" БД на другом сервере через nbackup
    #39896053
Даниил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется сервер Firebird 2.5.9 classic под Windows.
БД размером 60 Гб. Ночью - полностью свободна от пользователей. В это время делается бэкап, который потом копируется на несколько хранилищ по сети. Из-за того, что в течение дня идет довольно большое количество Insert|Update, счетчики транзакций довольно быстро увеличиваются. Читал, что при переполнении счетчика количества транзакций может случиться беда, поэтому я сбрасываю счетчики - после бэкапа еще ежедневно подменяю рабочую базу восстановленной из только что сделанного бэкапа. Таким образом еще и "чищу мусор". Разумеется восстановление идет не на файл рабочей БД, а в сторонку и только если все прошло хорошо, то подменяется файл .fdb. Подобные действия уже обсуждались на этом форуме, некоторые меня ругали, но если я буду подменять БД не раз в день, а раз в неделю/месяц, то от этого особенно ничего не изменится. Хотелось бы чтобы все действия шли в автоматическом режиме.
Так же имеется другой сервер тоже Firebird 2.5.9 classic под Windows, использующийся в качестве горячего бекапа сервера БД. Утром он берет ночной ежедневный бэкап и разворачивает у себя копию вчерашней БД. Если с основным сервером все совсем плохо (железо погибло, БД не лечится и т.п.) - то все пользователи начинают работать на вчерашней БД на резервном сервере - это лучше чем ничего, но все-равно очень плохо с точки зрения потери данных за рабочий день с утра до момента поломки.
Задача - иметь на резервном сервере как можно более свежую копию БД.
Кроме репликации HQBird или другими инструментами можно ли это сделать с помощью стандартного средства Firebird 2.5 - nbackup? Например, создавая снимки БД каждые 10-15 минут. Полноценного зеркала БД при этом конечно не получится, но потеря данных за 15 минут лучше, чем потеря данных за 8 часов.

С nbackup я до этого еще ни разу не работал, поэтому провел несколько экспериментов на резервном сервере, пытаясь обыграть все возможные ситуации и понять, можно ли каким-то образом если "что-то пойдет не так", поломать рабочую БД.
Ежедневный бэкап БД с помощью gbak я не трогаю - он в любом случае останется. Кстати, он выполняется около 15 минут.
Предполагаю работать так - делать дельты одного уровня (допустим 0-го) с помощью nbackup на рабочем сервере, затем копировать их на резервный и сразу же заливать на копию БД. Если прошло с ошибкой, то повторять что? Заново копировать ту же дельту и заливать? Ведь новая дельта того же уровня уже не зальется в копию БД, поскольку будет нарушена цепочка версий. Исходя из этого получается, что необходимо делать дельты нескольких уровней. Например: 0 - раз в 2 часа, 1 - раз в час, 2 - раз в 15 минут. Тогда если с файлом дельты 2 уровня была проблема, то можно надеяться, что дельта уровня выше зальется без ошибок.
Нагрузку на БД эмулировал периодическими INSERT|UPDATE по паре табличек в БД, как оно пойдет на рабочей БД - пока не знаю.
Далее я через 1 час сделал копию БД 0 уровня, затем через каждые 15 минут - 1 уровня. Заметил, что время создания копий 1 уровня меньше, но не кардинально, чем создание копии 0 уровня, хотя объем создаваемой дельты-бэкапа меньше. Вероятно это из-за того, что nbackup при создании копии БД любого уровня приходится в любом случае читать весь файл с БД. Ошибаюсь? Так же предполагаю, что на рабочем сервере nbackup будет выполняться гораздо быстрее, поскольку скорость диска примерно в 5 раз выше, чем на резервном. Проверял тупо копируя файл с БД в ту же папку на тот же диск при неактивных пользователях. На резервном сервере скорость 230 МБ/с, на основном - 1 ГБ/с.

Далее попробовал "поломать" БД своими некорректными действиями:
1) Запуск нескольких экземпляров nbackup отрабатываются нормально. Точнее 2й запущенный экземпляр nbackup выдает ошибку. Это логично и с БД ничего плохого не происходит. Дельта-бэкап создается первым nbackup нормально.
2) Во время работы nbackup прибил его процесс. БД осталась в заблокированном виде, при работе с БД данные не потерялись, дельта-файл (с данными после блокировки БД) лежит рядом с БД, пользователи работают с БД нормально. Разблокировка БД с параметром -N проходит нормально, данные не потерялись. Получается, что процесс работы nbackup мне необходимо контролировать - если за определенное время после запуска текущего процесса nbackup БД не вернулась в разблокированный режим, то прибиваем процесс nbackup и вручную разблокируем БД?
Передавать при этом на резервный сервер нечего - повторяем запуск nbackup или ждем следующего запуска по расписанию.
3) Если БД осталась заблокирована с помощью запущенного nbackup, то еженощный gbak сделает бэкап данных на момент блокировки БД, а не на момент конца рабочего дня. Это мне тоже нужно контролировать.
И тем более если я ежедневно подменяю рабочую БД из backup-restore, то будет совсем беда - потеря данных до конца рабочего дня. Кстати, дельта данных при попытке разблокировки БД с параметром -N в БД, которая прошла через backup-restore, зальется в нее? Я сам еще не проверял.
4) Если попытка разблокировки БД на основном сервере прошла с ошибкой, то что делать? Такой ситуации я пока воспроизвести не смог, поэтому поэкспериментировать не на чем.
5) Если за рабочий день произошло что-то непонятное с резервной БД (дельты перестали заливаться, поломалась копия БД во время заливки дельт-бекапов и т.п.) то это все не так страшно, поскольку каждой ночью на резервном сервере база все-равно будет разворачиваться из полного бэкапа, созданного gbak на основном сервере. А вот если из-за работы nbackup на основном сервере что-то произойдет с рабочей БД, то тогда уж лучше вообще не заниматься зеркалированием данных таким способом.

Подобное уже кто-то реализовывал? С чем мне еще придется столкнуться?
...
Рейтинг: 0 / 0
Создание "зеркала" БД на другом сервере через nbackup
    #39896095
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДаниилИз-за того, что в течение дня идет довольно большое количество Insert|Update, счетчики транзакций довольно быстро увеличиваются. Читал, что при переполнении счетчика количества транзакций может случиться беда, поэтому я сбрасываю счетчики - после бэкапа еще ежедневно подменяю рабочую базу восстановленной из только что сделанного бэкапа.

переходи на 3.0 и про переполнение счётчиков можешь забыть.


ДаниилДалее я через 1 час сделал копию БД 0 уровня, затем через каждые 15 минут - 1 уровня. Заметил, что время создания копий 1 уровня меньше, но не кардинально, чем создание копии 0 уровня, хотя объем создаваемой дельты-бэкапа меньше. Вероятно это из-за того, что nbackup при создании копии БД любого уровня приходится в любом случае читать весь файл с БД. Ошибаюсь? Так же предполагаю, что на рабочем сервере nbackup будет выполняться гораздо быстрее, поскольку скорость диска примерно в 5 раз выше, чем на резервном. Проверял тупо копируя файл с БД в ту же папку на тот же диск при неактивных пользователях. На резервном сервере скорость 230 МБ/с, на основном - 1 ГБ/с.

опять же переходи на 3.0. Там nbackup 1 и последующих уровней не читает файл БД целиком
...
Рейтинг: 0 / 0
Создание "зеркала" БД на другом сервере через nbackup
    #39896099
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДаниилЧитал, что при переполнении счетчика количества транзакций может случиться беда, поэтому я сбрасываю счетчики
мде. и что, нельзя взять gstat -h, посмотреть когда создана база, вычислить насколько Next увеличивается в сутки, и поделить два миллиарда на это число?
Кроме того, ежедневно ресторить базу - ну совсем никакой нужды нет, кроме как для собственного развлечения.
ДаниилТаким образом еще и "чищу мусор".
который неизвестно, есть или нет.
ДаниилХотелось бы чтобы все действия шли в автоматическом режиме.
обычно, когда бэкап-рестор с заменой БД идет в автоматическом режиме, этой схеме (и базе) в какой-то случайный момент наступает полный кабздец.
Даниилделать дельты одного уровня (допустим 0-го)
0го уровня - это не дельты, это полная копия.
Даниили сразу же заливать на копию БД
прочитай документацию по нбэкапу 5 раз, пока полностью не поймешь.
http://www.ibase.ru/files/firebird/nbackup_ru.pdf
...
Рейтинг: 0 / 0
Создание "зеркала" БД на другом сервере через nbackup
    #39896272
Даниил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
обычно, когда бэкап-рестор с заменой БД идет в автоматическом режиме, этой схеме (и базе) в какой-то случайный момент наступает полный кабздец.

Я успешность рестора контролирую. После этого подмена файлов идет - бывшая база меняется на только-то отресторенную. На всякий случай старый файл с базой кроме создания бэкапа еще и копируется как обычный файл на соседний диск. Кроме этого периодический бэкап-рестор будет выполнять функцию микроремонта базы.
По вашему опыту поддержки пользователей, какие причины приводили к проблемам при автоматической замене БД? Кроме переполнения диска, где лежит база, больше ничего в голову не приходит.


kdv

0го уровня - это не дельты, это полная копия.
прочитай документацию по нбэкапу 5 раз, пока полностью не поймешь.
http://www.ibase.ru/files/firebird/nbackup_ru.pdf

Согласен с замечаниями. Плохо разобрался.
Т.е. если мне надо чтобы файлы дельт бэкапов были небольшими по размеру, то начинаем с утра с 0 уровня, а далее 1, 2, 3, ... уровень каждые N-минут.
Ограничения на количество собираемых файлов судя по инструкции нет. Будет только ограничение windows на 2047 знаков в командной строке. Но в таком случае для сборки всей БД, допустим в конце 12-тичасового рабочего дня при периодичности раз в 15 минут понадобится 48 файлов (уровней) с дельтами бэкапов относительно небольшого размера.
Если же стоит задача уменьшить количество файлов, то необходимо будет делать допустим раз в 1 час дельту 1 уровня, затем 3 дельты 2 уровня и при этом у каждой следующей дельты 1 уровня будет расти объем по сравнению с ее предыдущей того же уровня. При этом для сборки копии БД понадобится только 3 файла: 0, 1 и 2 уровней. И в сумме по объему они будут меньше, чем суммарный объем тех 48 файлов.
...
Рейтинг: 0 / 0
Создание "зеркала" БД на другом сервере через nbackup
    #39896307
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даниил,

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

Ну например. Дельта содержит ровно столько страниц, сколько изменилось в БД с момента предыдущего уровня бэкапа. Поэтому, например, дельта уровня 1 будет увеличиваться всегда, с каждым разом. И дельта уровня 2 может быть больше, чем уровня 1, если в базе произошло много изменений.
Поэтому объем всех дельт за конкретный период времени можно узнать только экспериментально.

Я уже писал, что вы "чистите" мусор, но не представляете, есть-ли он вообще в БД. И не знаете, сколько у вас транзакций в сутки, и когда кончатся 2 млрд транзакций в 2.5. Соответственно, ваши ежедневные ресторы не имеют никакого смысла.
Вы можете всё это делать, just for fun, но без понимания, зачем вы производите определенные действия, у вас не будет понимания, как всё это восстановить в случае сбоя.

Даниил понадобится 48 файлов (уровней) с дельтами бэкапов
жуть какая.
...
Рейтинг: 0 / 0
Создание "зеркала" БД на другом сервере через nbackup
    #39896392
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Соответственно, ваши ежедневные ресторы не имеют никакого смысла.


С этим не соглашусь. Издревле успешный рестор был единственным признаком, почти гарантирующим здоровье базы. И фиаско еженощного позволяло вовремя заметить по крайней мере последствия неаккуратной правки метаданных и, скажем, поломку какого-нибудь индекса, пока это не стало серьёзной проблемой. Возможно, наличие идеально-безглючного nbackup снимает остроту ситуации. Возможно. Наличие безглючного. Однако, я продолжаю придерживаться мнения, что любая безошибочно работающая программа просто содержит чётное количество ошибок. Поэтому наличие в загашнике свежей ежедневной копии греет душу.
...
Рейтинг: 0 / 0
Создание "зеркала" БД на другом сервере через nbackup
    #39896398
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишка
С этим не соглашусь.
Никто не против постоянного тестового восстановления.
Возражают против ежесуточного переписывания рабочей базы.
...
Рейтинг: 0 / 0
Создание "зеркала" БД на другом сервере через nbackup
    #39896399
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишкаИздревле успешный рестор был единственным признаком, почти гарантирующим здоровье базы.
это да, но заменять ориг. базу этим рестором зачем? Я так же в одной конторе спросил, ответ был - "а хрен его знает...".
...
Рейтинг: 0 / 0
Создание "зеркала" БД на другом сервере через nbackup
    #39896403
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
Старый плюшевый мишкаИздревле успешный рестор был единственным признаком, почти гарантирующим здоровье базы.

это да, но заменять ориг. базу этим рестором зачем? Я так же в одной конторе спросил, ответ был - "а хрен его знает...".

Тады да, присоединяюсь.
...
Рейтинг: 0 / 0
Создание "зеркала" БД на другом сервере через nbackup
    #39896475
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишка
Возможно, наличие идеально-безглючного nbackup снимает остроту ситуации.

Не снимает.
Точнее, снимает в том смысле что база которая не отресторится gbak все равно может быть восстановлена из nbackup.
Однако, nbackup восстановит любую ересь которая присутствует в базе, и рестор из gbak тут больше нужен как диагностика этой ереси.

У меня сделано так:

Ночью делается бэкап посредством gbak и перемещается на сервер бэкпов.
Рестора не делается.
В целях контроля этих бэкапов, когда нужна база для тестирования разработки - беру оттуда и разворачиваю на своем компе.

В 6 утра на сервере делается бэкап nbackup уровня 0.
Каждый час (или полчаса, зависит от сервера) делаю nbackup уровня 1.
Эти бэкапы складываются на сервере, но на отдельный винт.

Таким образом восстановиться можно с точностью до часа (получаса).

Firebird 2.5.9

Замену рабочей базы на отресторенную произвожу при регламентных чистках на сервере, вручную. Бывает это раз в 1-2 года.
...
Рейтинг: 0 / 0
Создание "зеркала" БД на другом сервере через nbackup
    #39896919
Даниил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
мде. и что, нельзя взять gstat -h, посмотреть когда создана база, вычислить насколько Next увеличивается в сутки, и поделить два миллиарда на это число?

Посмотрел транзакции за пятницу - 520000. При таком количестве счетчиков хватит на 4130 дней, т.е. 11 лет.
В середине недели поинтенсивнее работают - до 700 тыс. транзакций в день. В итоге - достаточно будет делать замену БД на свежеотресторенную 1 раз в год.

Так же сделал замеры по времени создания инкрементного бэкапа и обратно сборки рабочей БД.
Создание бэкапа что 0, что 1 уровня (к этому моменту сделал вставку около 20 тыс. записей в одну из таблиц) заняло одинаковое время - 6 минут (замерял bat-ником).
Обратная "сборка" БД из 4 файлов (с 0 по 3 уровень) общим объемом 70 Гб с помощью nbackup на тестовом сервере заняло 3 минуты (замерял дважды). Это получается, что анализ измененных версий записей при создании инкрементного бэкапа занимает 50% времени.

Попробовал еще в процессе создания бэкапа очередного уровня при подключенных пользователях менять структуру некоторых таблиц и ХП - все работает так же как при незалоченной БД - к примеру, DDL используемых клиентами ХП блокируются при попытке изменения.
Почему про это пишу - я делаю такие действия с рабочей БД при подключенных пользователях. Изменения типа полей у используемых таблиц и создание/удаление индексов не делаю (из-за практически гарантированной вероятности проблем из-за этого), но создание новых полей в используемых таблицах, создание новых ХП, таблиц или изменение неиспользуемых ХП - делаю.

Меня беспокоит надежность заливки дельты-БД в рабочую БД при какой-либо проблеме во время работы nbackup.
Те, кто использует nbackup - как вы отслеживаете успех его работы? Контролируете через определенное время после запуска nbackup факт наличия дельты рядом с базой? Или делаете это к примеру раз в день, после окончания работы (если база не 24х7)? При каком-либо сбое nbackup наличие нерабочего зеркала меня будет волновать меньше, чем потеря данных в рабочей базе из-за потери данных в файле-дельте.

Еще подскажите, пожалуйста, какая проверка рабочей БД будет более правильная - восстановимость бэкапа или валидация БД (gfix -v -full)?
Как я понял из статьи ( http://www.ibase.ru/db_repair/#gfix) восстановимость бэкапа более показательна и для автоматической ежедневной проверки достаточно пользоваться только ей?
...
Рейтинг: 0 / 0
Создание "зеркала" БД на другом сервере через nbackup
    #39896922
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДаниилЕще подскажите, пожалуйста, какая проверка рабочей БД будет более правильная - восстановимость бэкапа или валидация БД (gfix -v -full)?
Как я понял из статьи ( http://www.ibase.ru/db_repair/#gfix) восстановимость бэкапа более показательна и для автоматической ежедневной проверки достаточно пользоваться только ей?

это разные проверки. Одна вторую не может заменить.

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

Бекап может быть восстановимым, но в БД есть физические повреждения. В БД может не быть физических повреждений, но бекап не восстановимый (например проблема с метаданными).

З.Ы. Вместо gfix -v -full можно использовать онлайн валидацию через сервисы, которой не нужен эксклюзивный доступ к БД.
...
Рейтинг: 0 / 0
Создание "зеркала" БД на другом сервере через nbackup
    #39896939
Даниил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
это разные проверки. Одна вторую не может заменить.
...

Теперь понятно, подробно разъяснили. Спасибо.

Симонов Денис
З.Ы. Вместо gfix -v -full можно использовать онлайн валидацию через сервисы, которой не нужен эксклюзивный доступ к БД.
Про сервисы не знал. Почитал сейчас, запустил - все работает одновременно - и изменение данных пользователями (скриптом) и action_validate и создание инкрементного бэкапа. Диск только при таком наборе сильно просаживается по скорости.
...
Рейтинг: 0 / 0
Создание "зеркала" БД на другом сервере через nbackup
    #39896953
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даниил

Так же сделал замеры по времени создания инкрементного бэкапа и обратно сборки рабочей БД.
Создание бэкапа что 0, что 1 уровня (к этому моменту сделал вставку около 20 тыс. записей в одну из таблиц) заняло одинаковое время - 6 минут (замерял bat-ником).
Обратная "сборка" БД из 4 файлов (с 0 по 3 уровень) общим объемом 70 Гб с помощью nbackup на тестовом сервере заняло 3 минуты (замерял дважды). Это получается, что анализ измененных версий записей при создании инкрементного бэкапа занимает 50% времени.

Не-а.
nbackup ничего про версии записей не знает, да ему это и не нужно.
Он смотрит на страницы целиком, а что там на этих страницах - ему по барабану.

В 2.5.* для определения изменилась страница или нет - серверу таки нужно прочитать саму страницу.
В 3.* и выше - у страниц есть некий флаг в котором указывается изменилась страница или нет, и серверу читать саму страницу уже не нужно, поэтому 3.* и выше, по слухам, выполняют инкрементальный бэкап значительно быстрее чем 2.5.*
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Создание "зеркала" БД на другом сервере через nbackup
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]