备份第7部分:结论


本说明完成了备份周期。 它将讨论专用服务器(或VPS)的逻辑组织结构,便于备份,并且还将提供从备份中快速还原服务器的选项,而在发生事故时不会造成任何停机。


源数据


专用服务器通常至少具有两个硬盘驱动器,这些硬盘驱动器用于组织第一级(镜像)的RAID阵列。 如果一个驱动器发生故障,这才能够继续服务器。 如果它是一台普通的专用服务器,则在SSD上可以有一个单独的具有主动缓存技术的硬件RAID控制器,因此除了普通的硬盘驱动器外,还可以连接一个或多个SSD。 有时会提供专用服务器,其中本地磁盘(结构上是小型磁盘-连接到SATA端口的USB闪存驱动器),甚至连接到特殊内部端口的普通小型(8-16GB)USB闪存驱动器中仅存在SATADOM,并且数据从存储系统中获取通过专用存储网络(以太网10G,FC等)连接,并且有直接从存储系统加载的专用服务器。 我不会考虑这些选项,因为在这种情况下,备份服务器的任务会顺利地交给服务于存储系统的专家处理,通常会有各种专有技术来创建状态快照,内置重复数据删除和本系列前面部分所讨论的系统管理员的其他乐趣。 专用服务器的磁盘阵列的容量可以达到数十TB,具体取决于连接到服务器的磁盘的数量和容量。 在VPS的情况下,卷的容量比较适中:通常不超过100GB(但还有更多),并且与同一个主机的最便宜的专用服务器相比,此类VPS的价格可能很昂贵。 VPS通常只有一个驱动器,因为它下面是存储设备(或超融合的设备)。 有时,VPS具有多个具有不同特性的磁盘,用于不同目的:


  • 小型系统-安装操作系统;
  • 大-用户数据的存储。

使用控制面板重新安装系统时,带有用户数据的磁盘不会被覆盖,但是系统会完全重新加载。 同样,对于VPS,主机可以提供一个按钮,以获取VPS(或磁盘)状态的快照,但是,如果您安装操作系统或忘记激活VPS内部所需的服务,则某些数据可能仍然会丢失。 除了按钮之外,通常还提供数据存储服务,通常非常有限。 通常,这是一个具有FTP或SFTP访问权限的帐户,有时与SSH一起使用,具有被截断的外壳程序(例如rbash),或者对通过authorized_keys运行命令的限制(通过ForcedCommand)。


专用服务器通过两个端口以1 Gbit / s的速度连接到网络,有时它可以是速度为10 Gbit / s的卡。 VPS通常具有一个网络接口。 多数情况下,数据中心并不限制数据中心内部网络的速度,而是限制Internet访问的速度。


这种专用服务器或VPS的典型负载是Web服务器,数据库,应用程序服务器。 有时可以安装各种其他支持服务,包括针对Web服务器或数据库的服务:搜索引擎,邮件系统等。


专门准备的服务器用作存储备份副本的空间,下面将对其进行详细说明。


逻辑磁盘组织


如果有一个RAID控制器,或者它是一个有一个磁盘的VPS,并且磁盘子系统也没有特别的偏好(例如,一个单独的数据库快速磁盘),则所有可用空间的划分如下:创建一个分区,在其顶部创建一组LVM卷,它将创建多个卷:2个相同大小的小卷,它们被用作根文件系统(它们通过更新交替更改以实现快速回滚,该想法是从Calculate Linux发行版中窥探到的),另一个是交换分区的,其余的是免费的 该空间被分成小卷,用作完整容器的根文件系统,虚拟机磁盘,/ home帐户的文件系统(每个帐户都有自己的文件系统),应用程序容器的文件系统。


重要说明:卷必须完全自给自足,即 不应相互依赖,也不应依赖于根文件系统。 对于虚拟机或容器,将自动观察到这一点。 如果这些是应用程序容器或主目录,则应考虑将Web服务器和其他服务的配置文件分开,以最大程度地消除卷之间的依赖关系。 例如,每个站点都以其自己的用户运行,该站点的配置文件位于用户的主目录中,在Web服务器设置中,该站点的配置文件不是通过/etc/nginx/conf.d/ .conf包含的,而是例如/ home / /configs/nginx/*.conf


如果有多个磁盘,则可以创建一个软件RAID阵列(如果有需要和机会,可以在SSD上配置其缓存),然后在上面根据上述规则组装LVM。 同样,在这种情况下,您可以使用ZFS或BtrFS,但是这里值得考虑几次:两者都需要更严肃的资源管理方法,此外,Linux内核没有ZFS。


不管使用哪种方案,总是值得预先估计将更改写入磁盘的大致速度,然后计算将保留用于创建图片的可用空间的大小。 例如,如果我们的服务器以每秒10 MB的速度写入数据,并且整个数据阵列的大小为10 TB,则同步时间最多为一天(22小时-该量将以1 gbit / s的速度通过网络传输)-值得保留800 GB 实际上,数量会更少;您可以安全地将其除以逻辑卷的数量。


备份存储服务器设备


用于存储备份的服务器之间的主要区别是大,便宜和相对较慢的磁盘。 由于现代HDD在一个磁盘中的容量已超过10 TB,因此必须使用带有校验和的文件系统或RAID,因为在阵列重建或文件系统还原(数天!)期间,第二个磁盘可能会因负载增加而发生故障。 在容量高达1TB的磁盘上,这并不是那么敏感。 为了简化描述,我假设将磁盘空间划分为两个大小大致相同的部分(例如,再次使用LVM):


  • 与用于存储用户数据的服务器相对应的卷(最后一次用于验证的备份将部署到这些卷);
  • 用作BorgBackup存储库的卷(用于备份的数据将直接在此处获取)。

操作原理是为BorgBackup存储库下的每个服务器创建单独的卷,战斗服务器中的数据将存储在该卷中。 存储库以仅添加模式运行,这消除了有意删除数据的可能性,并且由于重复数据删除和定期清除旧备份中的存储库(有年度副本,去年每月一次,最后一个月每周一次,最后一周每天一次,可能是特殊的)案例-最后一天每小时:总计24 + 7 + 4 + 12 +年度-每个服务器大约50份)。
在BorgBackup存储库中,未激活仅添加模式;相反,在以下计划的.ssh / authorized_keys中使用了ForcedCommand:


from=" ",command="/usr/local/bin/borg serve --append-only --restrict-to-path /home/servername/borgbackup/",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc AAAAA....... 

脚本包装器放置在borg顶部指定路径的顶部,该脚本包装器除了使用参数启动二进制文件外,还可以在删除数据后启动恢复备份的过程。 为此,包装程序脚本在相应存储库旁边创建一个标记文件。 在数据上传过程之后进行的最后一次备份将自动还原到相应的逻辑卷。


这种设计允许您定期清理不必要的备份,也不允许战斗服务器删除备份存储服务器上的任何内容。


备份程序


备份的发起者是专用服务器本身或VPS,因为这样的方案可以更好地控制该服务器的备份过程。 首先,获取活动根文件系统状态的快照,该快照将使用BorgBackup装入并上传到备份存储服务器。 完成数据捕获后,将卸载图像并将其删除。


如果有一个小型数据库(每个站点最多1 GB),则会进行数据库转储,该数据库转储保存在相应逻辑卷中,该逻辑卷是同一站点的其余数据所在的位置,但是无法通过Web服务器访问该转储。 如果数据库很大,则应配置“热”数据挖掘,例如,对于MySQL使用xtrabackup,或者在PostgreSQL中使用带有archive_command的WAL。 在这种情况下,数据库将与这些站点分开恢复。


如果使用了容器或虚拟机,则应配置qemu-guest-agent,CRIU或其他必要的技术。 在其他情况下,通常不需要其他设置-仅创建逻辑卷的快照,然后对其进行类似于根文件系统状态快照的处理。 拍摄数据后,照片被删除。


在备份存储服务器上完成进一步的工作:


  • 检查每个存储库中进行的最后一次备份。
  • 检查指示数据捕获过程已完成的标记文件,
  • 数据正在扩展到相应的本地卷,
  • 标记文件已删除

服务器恢复过程


如果主服务器死了,则会启动类似的专用服务器,该服务器是从某些标准映像加载的。 下载很可能会通过网络进行,但是执行服务器配置的数据中心技术人员可以立即将此标准映像复制到其中一个磁盘上。 下载在RAM中进行,然后恢复过程开始:


  • 通过iscsi \ nbd或包含死服务器根文件系统的逻辑卷的另一个类似协议,请求附加块设备; 由于根文件系统应该很小-此步骤应在几分钟内完成。 同时执行引导加载程序恢复;
  • 重新创建本地逻辑卷的结构,使用dm_clone内核模块从备份服务器连接逻辑卷:数据恢复开始,更改立即写入本地磁盘
  • 启动具有所有可用物理磁盘的容器-服务器已完全还原,但性能降低;
  • 数据同步完成后,断开备份服务器的逻辑卷,关闭容器,重新启动服务器。

重新引导后,服务器将拥有备份时的所有数据,并且还包括恢复过程中所做的所有更改。



我邀请您在评论中讨论建议的选项,谢谢您的关注!

Source: https://habr.com/ru/post/zh-CN472776/


All Articles