Kvm-Virtualization
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,帶有來自 sid (4.7) 的 Linux 核心。客人也一樣。主機和來賓上的 jessie 核心(3.16)的問題是一樣的。
主機硬體對於通常的來賓工作負載來說是超大的,具有 256GB 的 RAM、Intel(R) Xeon(R) CPU E5-1650 v3 @ 3.50GHz,具有 6 個核心和企業 SATA 磁碟上的 2TB RAID1 儲存,所有這些都用於單個訪客的網站平均每秒提供 1 個網頁。通常的伺服器負載低於 1。
我可以做些什麼來減少備份的干擾?
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 個小時,但在我的情況下它不會影響系統性能。
事情是這樣的——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 控制您的頻寬