我希望我能尽可能准确地表达我的问题。
我正在寻找一种方法来尽快、尽可能频繁地备份我的 vm 服务器,因为它们处理/生成的数据很有价值。我有一个 KVM 主机和至少 2 个客户机:Web 服务器 (Apache/PHP) 和数据库服务器 (MySQL/Solr)。我不太关心主机,而是客户机。我不希望您深入研究这个主题的 KVM 或虚拟化。此线程应适用于所有基于 vm 的环境以及所有其他环境。vm 场景非常适合,因为它更棘手并且代表了我想象中最复杂的情况之一。至少,在此基础上我需要它。
目前,我有虚拟机内备份和基于 LVM 的快照,每天生成 1-2 次。如果发生硬件故障(我最近就遇到过这种情况),在最好的情况下,我会丢失一大堆数据。
因此,一种方法可能是逐一检查每个应用程序/服务,并应用最佳的备份策略。应根据具体情况进行考虑。
另一个有趣的方法似乎是使用分布式文件系统。这个想法是让文件系统的行为有点像 MySQL 的二进制日志。或者更一般地说:它捕获文件系统上的所有写入操作并将其异步复制到另一台机器。根据网络和写入的数据量,这可能会导致几秒或几分钟的延迟,而且不用说,它会错过缓存中保留的所有操作。所以我有一个虚拟机,它位于安装在虚拟机主机上的分布式文件系统上。每个写入操作都会异步应用于(比如说)备份服务器。现在,当出现硬件故障时,我可以切换到备份服务器(理论上)作为新的主服务器,或者简单地将文件复制回恢复的主服务器,以防万一,停机时间比数据丢失更容易接受。效果应该是虚拟机的行为就像它在几秒到几分钟前立即关闭一样。但不是几小时。我不寻求文件系统级别的主主复制,因为大多数应用程序都不支持这一点,尤其是像 MySQL 这样的数据库服务器!
所以我的问题是:是否有人已经对此类配置有过一些经验,或者对这种备份数据的尝试有正面和负面的了解?我对这些文件系统没有深入的经验。特别是在可靠性和性能方面。
答案1
分布式文件系统不是备份,而是冗余。它还会“备份”你意外删除的内容。
话虽如此,DRBD。
答案2
针对您的情况,最好的解决方案是集群存储,即数据以冗余方式存储在块级别。有几种不同的方法可以实现这一点,但我能想到的最好的方法(至少对于您的正常运行时间规范而言)是开放堆栈集群。Openstack 将分配存储和计算,以便在发生硬件故障时,执行和存储都是冗余且不间断的。换句话说,维护数据完整性和正常运行时间的最佳方法是确保应用程序首先不会崩溃。正如 yoonix 指出的那样,这不会保护您免受用户/逻辑错误的影响,但开放堆栈还包括用于磁盘映像/备份的工具 - 加载映像和启动需要几分钟甚至几秒钟。Amazon Web Services 和 Rackspace 是开放堆栈部署的示例。 http://www.openstack.org/
开始使用 openstack 的一个好地方是 devstack(几乎是一个部署脚本,具有各种不同的部署模式可供测试) http://devstack.org/
这种实现的弱点是缺乏硬件,这种系统在只有两台物理服务器或类似设备的小型办公室中效果并不好(但适用于刀片系统)
答案3
您是否考虑过迁移到 VMware 平台并使用他们的解决方案?
“容错”(使用 vLockstep)可使任何虚拟机的第二个“备用”副本保持最新,并记录对虚拟机主版本所做的所有更改。如果主版本出现问题,系统会立即故障转移到辅助虚拟机。(几乎没有停机时间或影响)
“高可用性”使备用虚拟机保持准备状态,但备用虚拟机保持关闭状态。如果主虚拟机发生故障,系统会自动在备用虚拟机上启动。(停机几分钟)
这东西很好用,而且非常可靠。但是……它很贵。如果你没有足够的预算来购买运行这些技术所需的许可证,这个建议对你一点帮助都没有。希望它至少能让你对现有的工具有更多的了解。