Как сделать резервную копию работающего сервера Linode?

21

Мы хотим сделать резервную копию всего на нашем сервере Debian, который работает удаленно на другом конце света (размещенном на Linode), не выключая его.

Эта система работает с оболочкой, электронной почтой, XMPP / prosody и web, с парой простых настроек nginx.
Мы хотим сделать резервную копию файлов, связанных с этими вещами, чтобы быть в безопасности. Например, файлы, которые пользователи хранят в своих домашних каталогах.

Нам не нужно точно копировать существующую настройку по каждому файлу / etc; вместо этого, причина, по которой мы даже делаем резервное копирование в первую очередь, заключается в том, что мы можем переместить все это в новую настройку (более новая версия Debian все еще на Linode).

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

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

  • Я сказал: «Хорошо, я просто скопирую /и все, что находится под ним», а затем застрял в каком-то странном бесконечном цикле из-за того, что диск, на который я копировал, был смонтирован в / media / backup, и он копировал себя рекурсивно [obv эта конкретная проблема здесь неприменима, так как мы собираемся сделать резервную копию через rsync или подобное], или она застряла, пытаясь скопировать некоторые «живые» вещи в / proc или / var или что-то еще, например, пытаясь не отставать от постоянно меняющихся журналов, или
  • Я сказал: «Хорошо, я просто возьму минимум того, что нам нужно ... хм, домашние каталоги каждого и каталоги нашего веб-сервера (все под /var), и давайте закопаем копию /etcвсех старых писем в / var / vmail ", а затем я неизменно облажался с правами доступа к файлам или временными метками (на этот раз я не буду делать резервные копии файлов Unix на FAT-диск) или что-то забыл (" ох, снимите, у меня есть несколько пользовательских скриптов в / usr / local / bin, который я больше нигде не хранил, я забыл их получить, думаю, они исчезли ").

Таким образом, прямое копирование всего диска привело к ошибкам, а выборочное копирование каталогов привело к ошибкам. Я хочу знать, как сделать это правильно.

Вопрос о сбое сервера Что нужно для полной системы резервного копирования? охватывает философию и передовой опыт, но я ищу эти более конкретные детали:

  • Какие каталоги мне нужно скопировать, а какие исключить (учитывая, что это система, которая в данный момент работает и обслуживает вики, чат XMPP, электронную почту - с новыми сообщениями, поступающими во время выполнения задания копирования)
  • Какие атрибуты файла, такие как отметки времени, владелец и группа, мне нужно представить и как это сделать? ← Я думаю, что могу ответить на эту половину вопроса сам с чем-то вроде ... хм ... rsync -HXazЯ думаю, это хороший вариант для нас? -zOBV на самом деле не связано с вопросом , который «что мне сохранить»

Многие советы по резервному копированию, которые я вижу, например, использование dd, похоже, предполагают, что диск отключен и не используется. Но я не должен исключать «живой» директории , как / прок , и некоторые из поддиректории / вар (однако, некоторые вещи под / вар , я знаю , мы , безусловно , сделать нужно держать) и / монтирование? Что еще мне нужно подумать в этой ситуации? Тогда, я думаю, я могу просто перехватить это с помощью rsync и используя несколько --excludeфлагов.

Или есть идеи получше, особенно FOSS?

Sandra
источник
Я понимаю, что этот вопрос кажется чрезвычайно простым, но, запустив такие системы так долго, я снова и снова облажался, и никогда не задумывался, как это сделать правильно
Сандра,
serverfault.com/q/475849/126632
Майкл Хэмптон
Для чего стоит, cp -r -aпри копировании файлов сохранит как можно больше атрибутов файла (в зависимости от того, что поддерживает целевая файловая система). -aФлаг предписывает cpсохранять атрибуты. Копирование по сети или через файловую систему, которая не поддерживает требуемые атрибуты, tar -cвсегда работало для меня, хотя я полагаю, что есть некоторые крайние случаи, которые он не охватывает, и, в частности, я считаю, tarчто по умолчанию зависит от совпадения имен пользователей по обе системы. Тем не менее, я скопировал всю (не подключенную) систему Linux, используя tarбез каких-либо явных проблем.
Майкл Джонсон
Также есть ли какая-то конкретная причина, почему необходимо копировать систему вживую?
Майкл Джонсон
Использовать сервис снимков линоде?
Иваниван

Ответы:

15

Итак, вы хотите сделать резервную копию всего вашего диска без всех этих неприятных ошибок, а также отфильтровать все / proc и другие временные папки?

Один из вариантов - смонтировать корневую папку в другую папку в файловой системе, например так:

$ cd /mnt
$ mkdir drive
$ mount --bind / drive

Это даст вам все файлы на вашем диске, которые не считаются временными (например, папки / proc или / sys).

Теперь, когда у вас есть четкое представление о вашей корневой папке, вы можете просто скопировать ее на резервный диск, используя стандартные cpили rsync. Что-то вроде:

cp -R /mnt/drive /mnt/backupdrive

Это решает обе ваши проблемы:

  • Вы не попадете в рекурсию, потому что диск с резервной копией не смонтирован на диске (точка зрения)
  • вы не пропустите ни одного важного файла, потому что вы берете их все

Смотри также: man mount (8)

rollstuhlfahrer
источник
6
Будьте осторожны, с этим решением вы можете копировать записываемые файлы, такие как базы данных. Я рекомендую запустить скрипт для выгрузки базы данных в отдельный файл перед копированием файлов. Например, для MySQL вы можете использовать mysqldump.
Марко Мартинелли
10

В Linux все это файл. Это возможно через rsync, но есть вещи, о которых нужно знать, которые (в лучшем случае) трудно обойти.

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

На аппаратном уровне лучшая ситуация будет иметь зеркальный сервер на другой стороне, с таким же количеством портов Ethernet, той же раскладкой жесткого диска и так далее. Все, что отличается, подразумевает необходимость изменений конфигурации системы.

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

То же самое с разметкой разделов. Вам следует создать те же разделы, что и на вашем основном сервере, но если вы создадите их с нуля, вы получите разные UUID, поэтому вам нужно будет изменить fstab, grub, mdadm (если задействован soft-raid) и т. Д. ,

Но есть также много вещей, которые могут пойти не так, как базы данных, которые могут быть непоследовательными, если не были остановлены ранее (перед выполнением rsync).

Лучшей стратегией будет сначала подготовить оборудование и файловую систему (разделы) - в соответствии с конфигурацией основного сервера. Затем подключите пустые разделы через промежуточную систему (например, live CD с временно установленным ssh-сервером). Вы создаете пустой / proc, / dev, / sys и затем rsync остальных, вот так:

rsync -avz -H --delete /etc /bin (...and so on) destserver:/mnt/yourrootfs/

Затем вам нужно установить grub на устройство и настроить его, сделать его загрузочным, изменить конфигурацию сети, fstab и другие вещи, упомянутые ранее.

Вы также можете попробовать установить свежую систему (с той же версией, которую вы используете на своем основном сервере), затем выключить ее, смонтировать через другую временную систему (например, live cd), а затем заменить что-либо, кроме / proc, / sys, / dev и / boot с помощью rsync.

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

Комар
источник
Базы данных: если у вас есть соответствующие абстракции файловой системы (например, LVM), вы можете сделать последовательный снимок диска, не переходя к полной репликации БД. Однако для этого требуется, чтобы ваша база данных была в kill -9безопасности, иначе она может не восстановиться. Хорошая база данных должна справиться с этой ситуацией, но удивительное количество продуктов этого не делает (или, что еще хуже, они почти всегда восстанавливаются, но выходят из строя один раз в синюю луну, когда они действительно нужны для работы). Так что на практике репликация в любом случае, вероятно, более надежна.
Кевин
5

То, что вы действительно хотите, это восстановить. Что бы вы ни делали, вы должны регулярно проверять его.


Линоде есть служба резервного копирования. Снимки могут быть сделаны по ограниченному заранее заданному расписанию или с помощью API.

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

Джон Маховальд
источник
Я не вижу ничего о том, чтобы эти резервные копии все еще работали, если, например. Линод обанкротился.
Mark
Я узнал о службе резервного копирования Линоде, печатая одно из исправлений к моему вопросу, и я обсудил это с моим коллегой, и мы пошли на это. Это решило наш непосредственный кризис, но мы попытаемся найти способ хранить данные и в наших собственных домах. Итак, что я узнал, что у них есть этот сервис, я не знал, когда впервые опубликовал. Но при восстановлении возникает следующая проблема: если наш сервер неправильно настроен, это шарик жевательной резинки и проволочные подвески, мы не обязательно хотим восстановить его в точно такое же неправильно настроенное состояние. Мы хотим, чтобы наши любимые данные, хотя.
Сандра
Я написал еще несколько статей о том, как экспортировать эту резервную копию в другое хранилище, если оно соответствует вашей целевой точке восстановления и доменам сбоев. Но я оставил это, чтобы быть кратким. Хороший план обеспечения непрерывности бизнеса, резервные копии которого являются лишь частью, определяет и решает такие риски.
Джон Маховальд
1

Я использую BackupPC для своего небольшого виртуального частного сервера, это работает достаточно хорошо. BackupPC может использовать rsync под капотом и поддерживает полное и инкрементное резервное копирование. Посмотрите на это и посмотрите, будет ли оно соответствовать вашим требованиям.

Ханс-Мартин Моснер
источник
1

Запустите вашу систему на ZFS. Затем вы можете сделать мгновенный атомарный снимок, используя нечто похожее на:

# zfs snap -r tank@name-of-backup

где имя tankвашего пула ZFS. Этот моментальный снимок гарантированно является моментальным моментальным снимком файловой системы и всех ее дочерних файловых систем.

Создав снимок, вы можете перенести его на другой хост, используя zfs sendи ssh.

Джим Л.
источник
0

Я думаю, это зависит от того, на каком сервере вы работаете с внутренней командой linux, это невозможно, вы должны имитировать / передавать полные данные и библиотеки. Если вы работаете на VMware и хорошо настроены, он обеспечивает живую миграцию. Или же вы должны использовать сторонние инструменты. Надеюсь, что это поможет вам. Еще несколько ссылок Как сделать резервную копию живого сервера?

Rsync - хорошая команда для синхронизации данных между серверами.

asktyagi
источник
0

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

Во-первых, если вы перенесете это на платформу с дополнительным контролем над базовой аппаратной платформой, вы сможете делать снимки дисков всех файлов во время работы сервера. Например, в AWS вы можете сделать снимок диска EBS и даже заплатить только за разницу, если позже сделаете еще один снимок.

Во-вторых, я рекомендую настроить скрипт вашего полного сервера с помощью системы управления конфигурацией, такой как Ansible. Это будет

  • документировать все, что вы настроили в системе контроля версий

  • позволит вам протестировать воссоздание сервера из резервной копии или с нуля, чтобы убедиться, что ваши скрипты обновлены

  • позволяют вам перезапустить скрипт в более новой операционной системе, обычно с довольно незначительными изменениями.

jdog
источник
1
Оказывается, вы можете делать снимки на Linode тоже. Я проверю Ansible! Это своего рода побочная тема к тому, что я изначально хотел знать, но что-то подобное - и я никогда не слышал об этом [я имею в виду, я слышал о вымышленном устройстве из замечательных книг на хайнском языке) - звучит замечательно!
Сандра