libvirt:备份期间的客户机性能

libvirt:备份期间的客户机性能

下面是在主机中运行的我的备份脚本的简化版本:

# shutdown the guest to ensure its filesystem is in a stable state
virsh shutdown web --mode=acpi
sleep 20s # the real script uses a smarter method to wait for the guest shutdown to complete

# make a snapshot copy of the offline guest
lvcreate -n web-bsnap -L50GB -s /dev/vg0/web

# start the guest to minimize the offline time
virsh start web

# create the backup volume
lvcreate -n web-0 -L 193273528320B /dev/vg0

# make the backup by copying the offline snapshot
nice -n 19 dd if=/dev/vg0/web-bsnap of=/dev/vg0/web-0 bs=4K

# remove the snapshot
lvremove -f /dev/vg0/web-bsnap

备份需要 1 个多小时,但问题是,在此期间,客户机变得非常慢(有时也无法访问)。我不需要备份在 1 或 2 小时内结束,如果需要,它可以持续 10 个小时,但我希望它以最低优先级运行,这样它就不会干扰正常的客户机操作。该nice命令就是为此而存在的,但它似乎没有任何区别。

主机系统是 Debian GNU/Linux 8 amd64,Linux 内核来自 sid (4.7)。客户机也是如此。主机和客户机上的 jessie 内核 (3.16) 都存在同样的问题。

主机硬件对于通常的客户工作负载来说太大了,拥有 256GB RAM、6 核 Intel(R) Xeon(R) CPU E5-1650 v3 @ 3.50GHz 和 2TB RAID1 存储(企业级 SATA 磁盘),所有这些都是为单个客户机提供的,其网站平均每秒可处理 1 个网页。通常的服务器负载低于 1。

我该怎么做才能让备份不那么烦人?

答案1

事情是这样的 - nice 调整进程优先级。在 dd 的情况下 - 这主要是 IO 密集型,而不是 CPU 密集型,这就是为什么这种机制不适合您。
以下是我的做法

mkfs /dev/mapper/vg0-web-0
mkdir /mnt/websnap
mkdir /mnt/level0
mount /dev/mapper/vg0-web-0 /mnt/level0
mount /dev/mapper/vg0-web-bsnap /mnt/websnap
rsync -av --bwlimit=10000 /mnt/websnap/ /mnt/level0/

有了它,你将不再进行块复制(当你的卷未接近 100% 满时,这可能效率低下),而是基于文件的复制,此外你还可以使用 --bwlimit 来控制带宽

答案2

Dmitry Zayats 提出的解决方案非常有趣,但我最终采用了不同的解决方案,以保持脚本与客户分区无关:

dd if=/dev/vg0/web-bsnap of=/dev/vg0/web-0 bs=4K &

DDPID=$!

DDRUNNING=1
while [ $DDRUNNING -gt 0 ] ; do
  kill -STOP $DDPID
  sleep 3.875s
  kill -CONT $DDPID
  sleep 0.125s
  DDRUNNING=$(ps -p $DDPID | grep $DDPID | wc -l)
done

对于 180GB 的客户映像来说,这需要大约 20 个小时,但对我来说,这不会影响系统性能。

相关内容