我希望我能尽可能准确地expression我的问题。
我正在寻求一种方法,尽快为我的VM服务器备份,因为他们处理/生产的数据是有价值的。 我有一个KVM主机和至less2个访客:Web服务器(Apache / PHP)和数据库服务器(MySQL / Solr)。 我不太关心主持人,而是客人。 我不想让你深入到这个主题的KVM或虚拟化。 此线程应该适用于所有基于虚拟机的环境以及所有其他环境。 这个vm场景很好,因为它比较棘手,代表了我想象中最复杂的情况之一。 至less,我需要在这个基础上。
目前,我有一天内产生1-2次的in-vm备份和基于LVM的快照。 如果出现硬件故障(最近我遇到这种情况),我会错过最好的情况下的大量数据。
因此,一种方法可能是逐个应用程序/服务,并应用可用的最佳备份策略。 应该在每种情况下考虑。
另一个有趣的方式似乎是使用分布式文件系统。 这个想法是有一个文件系统,就像MySQL的二进制日志一样。 或者更一般的:它捕获文件系统上的所有写操作,并asynchronous地将其复制到另一台机器上。 根据networking和写入的数据量,这可能会以几秒或几分钟的时间间隔结束,不用说,它会错过所有滞留在caching中的操作。 所以我有一个虚拟机正在安装在虚拟主机上的分布式文件系统上。 每一个写操作都会被asynchronous地应用在一个(比如说)备份服务器上。 当现在出现硬件故障时,我可以切换到备份服务器(理论上)作为新的主服务器,或者简单地将文件复制回恢复的主服务器,以防宕机比数据丢失更容易接受。 效果应该是,虚拟机的行为就像是在几秒钟之前转换的那样。 但不是几个小时。 我不想在文件系统级别上寻求主 – 主复制,因为大多数应用程序,尤其是像MySQL这样的数据库服务器不支持这种复制。
所以我的问题是:是否有人已经对这种configuration有过一些经验,或者对这种备份数据的尝试有积极和消极的认识? 我对这些文件系统没有深入的了解。 尤其在可靠性和性能方面。
分布式文件系统不是备份,而是冗余。 它也会“备份”你的意外删除。
这就是说, DRBD 。
对您的情况最好的答案是集群存储,数据在块级别上被冗余存储。 有几种不同的方式来实现这一点,但我能想象的最好的(至less到你的运行时间规格)将是一个开放的堆栈集群。 Openstack将分配存储和计算,以便在发生硬件故障时,执行和存储都是多余和不断的。 换句话说,保持数据完整性和正常运行时间的最佳方法是确保应用程序不会首先崩溃。 正如yoonix指出,这不会保护您免受用户/逻辑错误,但开放堆栈包括磁盘映像/备份工具以及加载映像和引导需要几分钟,如果不是几秒钟。 amazon web services和Rackspace是OpenStack部署的例子。 http://www.openstack.org/
开始使用OpenStack的好地方是devstack(几乎可以用各种不同的部署模式来testing的部署脚本) http://devstack.org/
这种实现方式的缺点是缺乏硬件,这个系统在一个只有两台物理服务器或类似的小型办公室中并不是很明显(尽pipe刀片系统很好)
您是否考虑迁移到VMware平台并使用他们的解决scheme?
“Fault Tolerance”(使用vLockstep)使VM的第二个“备用”副本保持最新状态,并对主要版本的VM进行所有更改。 如果主版本发生故障,则系统立即故障切换到辅助虚拟机。 (很less或没有停机或影响)
“高可用性”保持备用虚拟机准备就绪,但备用虚拟机保持关机状态。 如果主虚拟机发生故障,系统会自动启动备用虚拟机。 (几分钟的停机时间)
这个东西效果很好,非常可靠。 但是…很贵。 如果您没有运行这些技术所需的许可的预算,这个build议根本无法帮到您。 希望它至less能给你一些更多的想法。