VM 快照可靠性?

VM 快照可靠性?

关于快照备份的快速问题。我在家里有一个业余项目,其中我有一个连接到虚拟机上的 postgresdb 的 webapp。我想要一种简单的备份方法,所以我编写了一个脚本,该脚本会停止 postgres 服务,对虚拟机进行快照,然后重新启动该服务。我知道 webapp 在此期间无法工作,这是意料之中的,但仍然有以下问题:

1)除了安装某种代理来管理数据库备份之外,这是一种可靠地备份系统的合理方法吗?

2)使用这种方法时我应该注意什么问题?

编辑:我有软件,可以拍摄快照并将其存储到设备上,存储过去的几个快照,并且我已经验证快照返回到不同的 vCenter 环境中。

答案1

正如 ChrisInEdmonton 指出的那样,您正在做的是快照,而不是备份。

备份意味着某种辅助存储。这可以是软盘或 USB 拇指驱动器、第二个硬盘驱动器(通常是外部硬盘)、磁带,以及其他任何东西。备份是经常存储在与正在备份的数据物理上不同的位置,以防止“共模”故障(单一根本原因影响多个设备的故障,例如电涌同时损坏原始设备和备份设备)。

此外,您的方案还存在一个潜在的严重问题。

您正在为正在运行的虚拟机拍摄快照。根据所涉及的操作系统和实用程序软件(在虚拟机内),这根本不能保证产生内部一致的图像。

基本上,您所做的就如同停止物理主机上的数据库服务器、强制关闭主机电源、移除硬盘驱动器,然后将其称为备份。我认为我们可以同意这不是一个好的备份方案。

停止数据库服务器软件是一个很好的第一步,但它根本不能保证所有操作系统级缓存都已刷新到持久存储(从虚拟机内部运行的操作系统的角度来看)。

PostgreSQL 附带pg_dump实用程序,它将数据库转储到 SQL 脚本中,该脚本可以反馈到 PostgreSQL 中以重建数据库。(请务必检查手册页,以便您获得所有相关选项的正确性,并且与所有备份一样,对其进行测试!)这很方便,但是不一定 100% 一致根据您的需要,这可能就足够了。

或者,你可以停止 PostgreSQL 服务器(这可确保没有正在进行的事务)并将其数据文件复制到由不同的PostgreSQL 实例。启动两个实例,然后针对第二个实例运行 pg_dump。转储完成后,停止第二个实例。这更复杂,但实际上可以保证你得到内部一致的转储无需依赖 PostgreSQL 数据文件格式保持不变。如果数据库很大,则应该可以在 PostgreSQL 仍在运行时复制大多数文件,然后在停止 PostgreSQL 后运行 rsync 之类的程序来传输增量,以减少停机时间。

虚拟机的其余部分可以使用正常方式备份,不管它是虚拟机还是其他。如果您将所有易失性数据保存在单独的虚拟磁盘上,那么甚至可以将大部分系统配置为只读文件系统安装,这意味着即使在虚拟机运行时也可以从虚拟机外部执行虚拟磁盘映像文件的简单复制并获得合理的结果。

相关内容