Рейтинг:1

Возможна ли миграция между двумя физическими дисками без (большого) простоя?

флаг de

У меня есть сервер с базой данных среднего размера на диске, который заполняется. На данный момент в игре нет ни LVM, ни RAID, ни чего-то подобного. У меня уже есть новый диск, установленный на сервере.

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

У меня есть несколько идей, и я хотел бы знать, насколько осуществима каждая из них.

  1. Переход на LVM. Если можно перенести голый раздел на LVM (это так!?), то это просто pvmove перейти на новый диск вообще без простоев. Я корю себя за то, что не использовал LVM в то время. :/

  2. Используйте dm-raid для зеркалирования с существующего диска на новый диск, дождитесь синхронизации, затем разбейте рейд и выбросьте старый диск. Для этого требуется только время простоя, достаточное для повторного монтирования файловой системы с физического устройства на устройство сопоставления устройств. Таким образом, «проблема» здесь заключается в том, что у меня будет слой RAID, который я не использовал после всего сказанного и сделанного. Я также не достигаю гибкости LVM, используя эту настройку.

Другой вариант — настроить новый сервер (или даже просто новую службу на том же сервере) и использовать возможности репликации базы данных (в данном случае PostgreSQL), но это кажется гораздо более трудоемким, чем необходимо.

Mat avatar
флаг cn
Mat
Альтернативой репликации может быть создание новых табличных пространств и перемещение объектов из старых в новые. (Но я недостаточно знаю Postgres - может возникнуть много блокировок.)
djdomi avatar
флаг za
базы данных не следует копировать напрямую, пока они используются, я бы предложил сделать перерыв в работе на выходных, добавить весь жесткий диск и впоследствии расширить его. помните, что в случае отсутствия рейда и резервного копирования вы действительно глупы и получаете большее влияние, так как это
флаг de
@djdomi Я не предлагал копировать данные из-под работающей базы данных. Я специально ищу здесь параметры файловой системы. Мой первоначальный тест чтения/записи просто использовал `cp -r`, чтобы увидеть, сколько времени это займет.Мы рассматривали возможность использования `rsync` дважды (один раз онлайн, один раз позже), но решили, что скорость чтения старого диска является узким местом, и нам нужно прочитать 100% как источника, так и цели, чтобы выполнить «дифференциальный» rsync во время простоя, поэтому реальной пользы нет.
флаг de
@Mat Перемещение объектов из одного табличного пространства в другое может работать, но приложение поверх базы данных не поддерживает ничего подобного, и я недостаточно хорошо знаю PostgreSQL, чтобы переносить такие используемые данные.
A.B avatar
флаг cl
A.B
Я верну эту ссылку, которую не решался поставить, потому что для ее правильного понимания требуется много усилий: https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm. -clone.html . предостережение: [Обновление метаданных на диске](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-clone.html#updating-on-disk-metadata). Просто потребуется короткое время простоя для переключения базового устройства FS. С большим количеством локтей целью может быть LVM PV / LV, подготовленный заранее. Затем, как только все будет перенесено, 2-е небольшое время простоя для повторной настройки.
флаг de
@A.B `dm-clone` выглядит как то, что я ищу.Можете ли вы подтвердить, что я (1) остановлю свою службу / базу данных, перемонтирую существующую fs только для чтения, создам dm-клон со старого- > нового устройства, перемонтирую, чтобы все выглядело так, как раньше, затем (2) перезапустите службы и позволить гидратации завершиться, затем (3) в любой момент после завершения гидратации я могу удалить старое устройство и dm-clone fs и переключиться на использование только нового?
A.B avatar
флаг cl
A.B
вы бы не перемонтировали fs только для чтения. Вы подготовите новый блок в целевом объекте со ссылкой (используя функции клонирования) на старое блочное устройство, а затем напрямую смонтируете fs в новом месте. гидратация может работать во время операций с базой данных. Вероятно, вам удастся заставить цель использовать точные блоки заранее подготовленного LV, поэтому позже у вас будут доступны функции LVM.
флаг de
@AB Я спрашивал о режиме только для чтения, потому что не хотел бы, чтобы исходная файловая система изменялась во время активной операции копирования. Я полагаю, что на самом деле его можно полностью размонтировать, поскольку dm-clone все равно будет работать на уровне блоков.
флаг de
Для цели LVM я могу указать смещение блока цели, чтобы избежать перезаписи заголовка LVM на целевом устройстве? Звучит действительно интересно. Теоретически, однако, я мог бы также клонировать источник в цель, где цель уже является логическим томом LVM, поскольку само исходное устройство не содержит ничего, кроме файловой системы, и логический том будет аналогичным.
A.B avatar
флаг cl
A.B
Да, это подразумевалось: источник доступен только для чтения, если его никто не использует. Чтобы избежать ошибок манипулирования, вы можете сделать блочное устройство доступным только для чтения с помощью `blockdev --setro`. И да, вы можете выбрать сам LV в качестве конечной части клона dm.

Ответить или комментировать

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