如何选择有效的备份策略

介绍

备份对于云服务器非常重要,无论您是运行一个单一的项目,其所有数据都存储在单一的服务器上,还是直接从Git部署到被扭曲和破碎的 VM,同时保持最少的一组日志,您都应该计划一个失败场景。

在本指南中,您将探索提供备份和数据冗余的不同方法. 由于不同的使用案例需要不同的解决方案,本文将无法为您提供一个单一的答案,但您将了解不同场景中重要的是什么,以及哪些实现最适合您的操作。

在本指南的第一部分中,您将查看几个备份解决方案,并审查每个解决方案的相对优点,以便您可以选择适合您的环境的方法。

Part 1 - 解雇和备份之间的区别是什么?

术语 redundant 和** backup** 的定义往往是重叠的,在许多情况下,是混淆的. 这是两个不同的概念,它们是相关的,但不同的。

◎解雇

数据冗余是指在系统出问题时有即时_失败_. 一个故障表示,如果一组数据(或一个主机)无法提供,另一个完美的拷贝立即被交换到制作中取而代之. 这导致几乎没有可视的停机时间,应用程序或网站可以继续服务请求,好像什么都没发生. 在此期间,系统管理员(在此情况下为您)有机会解决问题并恢复系统完全运行状态.

然而,浪费解决方案通常也不是备份解决方案。浪费存储不一定提供对影响整个机器或系统的故障的保护。例如,如果您配置了镜像 RAID(如 RAID 1),您的数据将是浪费的,因为如果一个驱动器失败,另一个仍然可用。

借助如 MySQL Group Replication,每个操作通常都会在数据的每个副本上执行。这包括恶意或意外的操作。 根据定义,备份解决方案也应该允许您从以前的位置恢复数据。

备份

一般来说,您需要为您的重要数据保持功能备份. 根据你的情况,这可能意味着支持应用程序或用户数据,或整个网站或机器。 备份背后的想法是,在系统,机器或数据丢失的情况下,可以恢复,重新部署,或以其他方式访问您的数据. 从备份恢复可能需要停机时间,但它可以指从一天前开始到从零开始的区别. 顾名思义,任何你承受不起的损失都应该得到支持.

在方法方面,有相当多不同的备份级别. 必要时可以对这些问题进行分层,以说明不同类型的问题。 例如,您可以在修改之前备份一个配置文件,以便在出现问题时可以恢复旧设置。 这是您正在积极监测的小变化的理想。 然而,如果出现磁盘故障或任何更复杂的情况,这种设置将会失败. 您还应当拥有远程位置的常规自动备份.

备份本身并不提供自动故障转换,这意味着您的故障可能不会花费您任何数据(假设您的备份是100%最新),但它们可能会花费您工作时间。

Part 2 — 文件级别备份

最熟悉的备份形式之一是文件级备份,此类备份使用常规文件系统级复制工具将文件转移到另一个位置或设备。

如何使用 cp 命令

在理论上,你可以用cp命令备份一个Linux机器,例如你的云服务器,这将文件从一个本地位置复制到另一个本地计算机上,你可以安装一个可移除的驱动器,然后将文件复制到它:

1mount /dev/sdc /mnt/my-backup
2cp -a /etc/* /mnt/my-backup
3umount /dev/sdc

此示例将可移除的磁盘sdc作为/mnt/my-backup,然后将/etc目录复制到磁盘上,然后将磁盘卸载,可以存储在其他地方。

如何使用 Rsync

Rsync 是一个强大的工具,为在许多不同的环境中复制文件和目录提供了广泛的选项,具有内置的计数验证和其他功能。

1mount /dev/sdc /mnt/my-backup
2rsync -azvP /etc/* /mnt/my-backup
3umount /dev/sdc

-azvP 是典型的 Rsync 选项组合,作为每个选项的分解:

  • a'使)。 值得注意的是,-r ' 选项告诉Rsync要重复到子目录中来复制嵌入的文件和文件夹。 这一选项在许多其他复制业务中是常见的,例如 " cp " 和 " scp " 。
  • 如有可能,`z'在转移过程中压缩数据。 这对于缓慢连接上的任何传输都是有用的,特别是在传输非常有效压缩的数据时,如日志和其他文本.
  • `v' 允许动词模式,这样您就可以在移位进行时读取更多细节。
  • `P ' 告诉Rsync保留不完全移交的任何文件的部分副本,以便以后可以恢复移交。 .

您可以查看其它 rsync 选项在其 人页面

当然,在云环境中,你通常不会每次都将文件安装和复制到安装的磁盘上。Rsync也可以通过提供SSH式语法在网络上进行远程备份。这将在任何可以SSH的主机上工作,只要Rsync在两端都安装。因为Rsync被认为是Linux的核心工具,这几乎总是是一个安全的假设,即使你在Mac或Windows机上本地工作。

1rsync -azvP /etc/* username@remote_host:/backup/

这将将本地机器的/etc目录备份到位于/backup位置的remote_host目录中。

您也可以查看有关 [如何使用 Rsync 同步本地和远程目录] 的更多信息(https://www.digitalocean.com/community/articles/how-to-use-rsync-to-sync-local-and-remote-directories-on-a-vps)。

如何使用其他备份工具

虽然cp'和rsync'是有用和无所不在的,但它们本身并不是完全的解决办法。 要使用 Rsync 实现备份自动化, 您需要创建自己的自动程序, 备份时间表, 日志旋转等等 。 虽然这可能适合一些不想要利用外部服务的非常小的部署,或拥有专用资源为各种目的维持非常颗粒形的脚本的非常大部署,但许多用户可能希望投资提供专门的备份.

Bacula

Bacula 是一个复杂的灵活的解决方案,在客户端 - 服务器模型上工作. Bacula 是由客户端,备份位置和管理器(构建实际备份的组件)的单独概念设计的。

这允许极其细微和灵活的配置. 您可以备份多个客户端到一个存储设备,一个客户端到多个存储设备,并通过添加节点或调整其细节来修改备份方案。

(二)双重性

Duplicity 是另一个开源备份工具,它默认使用 GPG 加密来传输。

使用 GPG 加密来备份文件的明显好处在于数据不会以简单的文本存储,只有 GPG 密钥的所有者才能解密数据,从而提供一定程度的安全性,以抵消数据存储在多个位置时所需的额外安全措施。

对于那些不定期使用GPG的人来说,另一个不显而易见的好处是,每个交易都必须被验证以完全准确。GPG就像Rsync一样,强制进行哈希检查,以确保传输过程中没有数据丢失。

第三部分:区块级备份

稍微少一些常见,但文件级备份的重要替代品是块级备份. 这种备份风格也被称为"成像",因为它可用于复制并恢复整个设备. 块级备份允许您在比文件更深的级别复制. 虽然基于文件的备份可能会将文件1,文件2,文件3复制到备份位置,但基于块的备份系统会复制这些文件所居住的整个"块". 另一种解释相同概念的方法是说块级备份复制信息被一比特. 他们不知道可能跨越这些位点的文件.

区块级备份的一个优点是,它们通常更快,而基于文件的备份通常会为每个单独的文件启动新的传输,基于区块的备份会传输区块,这意味着需要启动更少的非连续传输才能完成复制。

使用 dd 执行区块级备份

执行区块级备份的最常见方法是使用)时也经常使用。

要使用「dd」,您需要指定输入位置和输出位置,如下:

1dd if=/path/of/original/device of=/path/to/place/backup

在此情況下,「if=」論數指定了 input 裝置或位置.「of=」論數指定了** output** 檔案或位置.請注意不要混淆這些,否則您可能會錯誤刪除整個磁碟。

例如,要备份包含您的文档的分区,该分区位于 /dev/sda3,您可以通过向 .img 文件提供输出路径来创建该目录的图像:

1dd if=/dev/sda3 of=~/documents.img

第4部分 - 版本备份

备份数据的主要动机之一是能够在不必要的更改或删除的情况下恢复文件的以前版本. 虽然迄今为止提到的所有备份机制都可以实现这一点,但您也可以实施更细微的解决方案。

例如,一个手动的方式来实现这一点是创建一个文件的备份,然后将其编辑为nano:

1cp file1 file1.bak
2nano file1

例如,你可以把它放在你的 ~/.bashrc 文件中,这样每次你从你的 bash (即 $) 壳中执行 nano,它就会自动创建一个备份,标记为年份 (%y),月份 (%m),日期 (%d`),等等:

1nano() { cp $1 .${1}.`date +%y-%m-%d_%H.%M.%S`.bak; /usr/bin/nano $1; }

这将工作到你用nano手动编辑文件的程度,但范围有限,并且可以快速填充磁盘,你可以看到它如何最终比手动复制你要编辑的文件更糟。

一个解决这个设计中的许多问题的替代方案是使用Git作为版本控制系统,虽然它主要是专注于简单的文本版本,通常是源代码,一行一行,你可以使用Git来跟踪几乎任何类型的文件。 要了解更多,你可以查看(https://www.digitalocean.com/community/articles/how-to-use-git-effectively)。

第5部分:服务器级别备份

大多数托管提供商也会提供自己的可选备份功能。DigtalOcean的备份功能会定期对已启用此服务的滴滴进行自动备份。您可以通过检查备份检查框来启用此功能。

DigitalOcean backups

这将定期备份您的整个云服务器图像,这意味着您可以从备份中重新部署,或将其用作新的滴滴的基础。

对于系统的一次性成像,您还可以创建快照。它们以与备份相似的方式工作,但不是自动化的。尽管在某些情况下可以拍摄运行系统的快照,但并不总是建议,取决于您如何写入您的文件系统:

DigitalOcean snapshots

您可以从 [容器和图像] 文档中了解更多关于 DigitalOcean 备份和快照(https://www.digitalocean.com/community/articles/digitalocean-backups-and-snapshots-explained) 。

主題:GitOps

最后,值得注意的是,在有些情况下,你不一定期望在每服务器的基础上实施备份。 例如,如果您的部署遵循GitOps的原理,您可以将您的许多单个云服务器视为可支配的,而是将像Git寄存器这样的远程数据源作为您数据的真实性的有效来源. 这种复杂而现代的部署在很多情况下可以更可扩展,更不容易被失败. 然而,您仍然想要执行一个备份策略,用于您自己存储数据,或者一个集中的日志服务器,每个这些一次性服务器可能都会向它发送信息. 考虑一下你们部署的哪些方面可能不需要支援,哪些方面需要支援.

结论

在本文中,您探讨了各种备份概念和解决方案。接下来,您可能想审查解决方案为(https://andsky.com/tech/tutorials/how-to-choose-a-redundancy-plan-to-assure-high-availability)。

Published At
Categories with 技术
comments powered by Disqus