如何备份正在运行的Linode服务器?


21

我们希望对Debian服务器上的所有内容进行备份,该服务器在世界另一端(由Linode托管)上远程运行,而无需关闭它。

该系统运行Shell,电子邮件,XMPP / prosody和Web,并带有几个简单的nginx设置。
为了安全起见,我们希望备份与这些东西相关的文件。例如,用户已将文件存储在其主目录中。

我们不需要为每个/ etc文件精确复制现有的安装程序;相反,我们甚至首先进行备份的原因是,我们可以将其全部移至新设置(较新版本的Debian仍在Linode上)。

我看到Linode提供了备份服务。但是从长远来看,我们还需要我们自己的备份,以防万一它们掉下来或发生其他奇怪的事情。

存在此问题的原因是,当我过去尝试进行备份时,一直犯以下两个错误之一:

  • 我已经执行了“确定,我将对其进行/所有复制”,然后由于要复制的驱动器挂载在/ media / backup下而被卡在某个怪异的无限循环中,并且以递归方式复制自身[obv这个特定的问题在这里不适用,因为我们要通过rsync或类似的文件进行备份],或者它试图在/ proc或/ var或其他任何内容中复制一些“有效的”东西,例如试图跟上不断变化的日志,要么
  • 我已经走了:“好吧,我将仅获取我们所需的最低限度……嗯,每个人的主目录和我们的Web服务器目录(都在之下/var),让我们/etc在/ var /下获取所有旧邮件的副本。vmail”,然后我总是会搞砸文件权限或时间戳(以确保这次不将unix文件备份到FAT驱动器)或忘记了某些内容(“哦,射击,我在/ usr /中有一些自定义脚本我从未在其他地方存储过的本地/垃圾箱,我忘了拿那些,猜想它们现在已经消失了”)。

因此,obv直接复制整个驱动器会导致陷阱,有选择地复制目录会导致陷阱。我想知道如何正确做。

服务器故障问题完整备份系统需要什么?涵盖了哲学和良好实践,但我正在寻找以下这些更具体的细节:

  • 我需要复制哪些目录,我要排除哪些目录(假设这是一个当前正在运行的系统,并且正在提供Wiki,XMPP聊天,电子邮件-在复制作业运行时会出现新消息)
  • 我需要显示哪些文件属性,例如时间戳记,所有者和组,该怎么做?←我想我可以用类似以下内容来回答问题的一半……嗯…… rsync -HXaz我认为这对我们来说是一个不错的选择?该-zOBV没有真正涉及到这是“我该怎么维护”的问题

我看到的许多备份建议(例如使用dd)似乎都以未安装驱动器且未使用该驱动器为前提。但我我不应该排除“活”的目录,如/ proc和一些在/ var子目录(但是,一些在/ var我知道我们肯定的东西必要保持)和/安装?在这种情况下,我还需要考虑什么?然后我想我可以使用rsync并使用一堆--exclude标志对其进行骚扰。

还是有更好的想法,尤其是对FOSS友好的想法?


我知道这个问题似乎非常基础,但是运行了如此长时间的系统却使我一遍又一遍地搞砸了,而我从来没有真正抱怨过如何正确地做它
Sandra


出于价值考虑,cp -r -a在复制文件时(根据目标文件系统支持的内容)将保留尽可能多的文件属性。该-a标志指示cp保留属性。对于通过网络或不支持所需属性的文件系统进行复制,tar -c对我来说一直很有效,尽管我认为有些情况无法解决,尤其tar是默认情况下,我相信它取决于用户名匹配两个系统。就是说,我复制了一个完整的(未安装的)Linux系统,使用时tar没有任何明显的问题。
米歇尔·约翰逊

另外,是否有任何特殊原因需要实时复制系统?
米歇尔·约翰逊

使用linode的快照服务?
ivanivan

Answers:


15

因此,您要备份所有驱动器而没有所有那些讨厌的错误,并且还要过滤掉所有/ proc和其他临时文件夹?

一种选择是将根文件夹安装到文件系统内的另一个文件夹,如下所示:

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

这将为您提供驱动器上所有不是临时文件(例如/ proc或/ sys文件夹)。

现在您已经有了根文件夹的清晰视图,您可以使用standard cp或将其复制到备份驱动器rsync。类似于以下内容:

cp -R /mnt/drive /mnt/backupdrive

这可以解决您提到的两个问题:

  • 您无需进行递归操作,因为备份磁盘未安装在驱动器中(从角度来看)
  • 您不会错过任何重要文件,因为您将它们全部拿走了

另请参阅:man mount(8)


6
请注意,使用此解决方案,您可能会复制正在写入的文件,例如数据库。我建议在复制文件之前运行脚本将数据库转储到单独的文件中。例如对于MySQL,您可以使用mysqldump。
Marco Martinelli

10

在Linux中,所有内容都是文件。可以通过rsync进行操作,但是有一些事情要知道,(最好)很难解决。

您应该首先考虑复制,尤其是对于数据库。在主服务器之前设置代理/负载平衡器也是一个好主意,这样您就可以在过渡期间轻松地与主服务器和镜像服务器来回切换。

在硬件级别,最好的情况是在另一侧安装类似镜像的服务器,该服务器具有相同数量的以太网端口,相同的硬盘布局等等。所有不同之处都意味着需要更改系统配置。

例如,如果您有两个eth端口,则要确保网络配置,防火墙等与两台服务器上的接口名称匹配,并且如果它们不同,则需要在rsync之后更改配置,或者在第二台设备上更改设备名称(目标)服务器。

与分区布局相同。您应该在主服务器上创建相同的分区,但是如果从头开始创建分区,则最终会得到不同的UUID,因此需要更改fstab,grub,mdadm(如果涉及到软袭击)等等。 。

但是,还有很多可能出问题的地方,例如数据库,如果以前没有停止过(在执行rsync之前),它们可能会不一致。

最好的策略是首先准备硬件和文件系统(分区),以匹配主服务器的配置。然后通过中介系统(例如,临时安装了ssh-server的live CD)挂载空的parititon。创建空的/ proc,/ dev,/ sys,然后重新同步其余的,如下所示:

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

您真正想要的是还原。无论您做什么,都必须定期恢复对其进行测试。


Linode具有备份服务。可以按有限的预定时间表或使用API​​拍摄快照。

基于快照的备份的一个优点是它们提供了一个及时的时间点,因为在复制时数据不会改变。快照也可以轻松还原到其他主机,在这种情况下为新的Linode。


我没有看到任何有关确保备份的工作,例如。Linode破产了。
Mark

我在输入问题的编辑内容之一时发现了Linode的备份服务,然后我与同事讨论了这一点,我们进行了尝试。它解决了我们眼前的危机,但我们将尝试找到一种将数据存储在我们自己家中的方法。因此,为了使他们能够提供该服务,我第一次发布时并没有意识到。但是还原存在以下问题:如果服务器配置错误,一团口香糖和铁丝挂衣架,我们不一定要将其还原到完全相同的错误配置状态。我们确实想要我们喜欢的数据。
桑德拉

如果适合您的恢复点目标和故障域,我还写了一些有关将此备份导出到另一个存储的内容。但我忽略了这一点。备份只是其中一部分的良好业务连续性计划可以识别并应对此类风险。
John Mahowald

1

我正在为我的小型虚拟专用服务器使用BackupPC,这相当不错。BackupPC可以在后台使用rsync并支持完整和增量备份。看一看,看看它是否可以满足您的要求。


1

在ZFS上运行系统。然后,您可以使用类似于以下内容的快照来进行瞬时原子快照:

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

tankZFS池的名称在哪里。保证该快照是文件系统及其所有子文件系统的即时瞬时快照。

创建快照后,可以使用zfs send和将快照转移到另一台主机ssh


0

我认为,这取决于使用内部linux命令运行服务器的方式和位置,这是不可能的,您必须模拟/管道完整的数据和库。如果您在vmware上运行且配置正确,它将提供实时迁移。否则,您必须使用第三方工具。希望这会帮助你。更多参考如何备份实时服务器?

Rsync是在服务器之间同步数据的好命令。


0

有2种可用的解决方案,您无需(不再)依赖丢失的位以及由于清单不完整或可能只是忽略了某些热点而丢失列表中的一项。

首先,如果将其移动到对底层硬件平台有更多控制权的平台上,则可以在服务器运行时拍摄所有文件的磁盘快照。例如,在AWS上,您可以对EBS磁盘进行快照,甚至仅在以后创建另一个快照时才支付差异。

其次,我建议使用诸如Ansible这样的配置管理系统来编写整个服务器的设置脚本。这会

  • 记录您在源代码管理中配置的所有内容

  • 允许您测试从备份或裸机重新创建服务器,以确保您的脚本是最新的

  • 允许您在较新的操作系统上重新运行脚本,通常只需进行很小的更改即可。


1
事实证明,您也可以在Linode上做快照。我要去看看Ansible!这是我最初想知道的附带主题,但类似的东西-我从未听说过[我的意思是,我听说过精美的Hainish书中的虚构装置]-听起来很棒!
桑德拉
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.