Qemu 提供了一种增量的backup机制,其实现的核心思想是写时复制,这里的写表示的是guest的写操作。其工作原理是backup的工作线程会根据qemu中维护的block dirty bitmap 将新写入的数据块写到备份的存储设备当中,如果在备份的过程中block dirty bitmap中对应的某个数据块被guest写入,qemu会优先将该数据块复制到备份存储设备中,然后在VM的虚拟磁盘镜像中该数据块对应的位置写入新的数据,这样可以保证备份的数据都是备份动作触发之前的数据,符合备份的语义,其工作流程如下:
在实际的生产环境当中,上面的这种工作机制带来了一些问题。通常来说,出于成本方面的考虑,用作备份存储的设备相对来说都会慢一些,因此在上面的工作机制下,guest 的写入操作可能会被慢速的备份设备拖累,主要问题表现在1. guest IO延时增加;2. 在备份存储设备发生故障的时候guest hang死。备份做为一种运维手段,是不应该影响到guest 的性能或者扩大故障面的,那么该如何解决上述的2个问题呢?以下是我们的解决方案:
针对问题1 通过在