Sao lưu chạy KVM qcow2 VPS


9

Tôi muốn một phương pháp mạnh mẽ để sao lưu VPS KVM của tệp qcow2, trong khi chạy. Sau khi tìm kiếm trong một thời gian dài, tôi thấy rằng chúng ta có thể sử dụng rsync để sao lưu trực tiếp. Tôi đã sử dụng lệnh sau cho rsync:

rsync -avh /vms/base.qcow2 /backup/backup.qcow2

Nó hoạt động đúng. Nhưng tôi e rằng nó có thể làm hỏng hình ảnh sao lưu qcow2 nếu sao lưu được thực hiện trong khi VPS đang bị thay đổi do thao tác ghi và xóa (Giống như cài đặt phần mềm mới hoặc cập nhật).

Do đó, sao lưu từ snapshot của VPS trực tiếp có vẻ tùy chọn thú vị hơn.

Tôi đã sử dụng các lệnh sau để sao lưu VPS đang chạy:

1.Tạo ảnh chụp nhanh:

qemu-img create -f qcow2 -b base.qcow2 snapshot.qcow2

2. Chuyển đổi ảnh chụp nhanh ở định dạng ảnh thô (.img):

qemu-img convert -O raw snapshot.qcow2 /backup/backup.img

Để khôi phục VPS:

3. Chuyển đổi hình ảnh thô trong hình ảnh qcow2:

qemu-img convert -O qcow2 /backup/backup.img base.qcow2

Sau đó chúng ta có thể bắt đầu VPS bằng virsh create base.xmllệnh.

Mặc dù phương pháp này cũng hoạt động hoàn hảo nhưng tôi vẫn không chắc đây có phải là phương pháp thích hợp để sao lưu việc chạy VPS hay không. Tôi tìm thấy tài liệu hay về các lệnh qemu-img ở đâyđây . Nhưng họ đã không đề cập bất cứ điều gì về việc chuyển đổi ảnh chụp nhanh của VPS trực tiếp bằng hình ảnh thô.

Phương pháp nào phù hợp hơn để sao lưu VPS trực tiếp? Chuyển đổi ảnh chụp nhanh trong ảnh thô có an toàn không?

Nếu tôi có thể nhận được tài liệu chi tiết đẹp về cách các tệp chụp nhanh và cơ sở hoạt động trong một số điều kiện nhất định sẽ rất hữu ích.

Có lẽ chúng ta cũng có thể chuyển đổi hình ảnh qcow2 cơ sở thành tệp sao lưu thô thay vì chuyển đổi ảnh chụp nhanh. Vì vậy, dòng lệnh sẽ là:
1. Tạo ảnh chụp nhanh
2. Chuyển đổi cơ sở qcow2 thành ảnh thô sao lưu
3. Cam kết thay đổi ảnh chụp nhanh thành ảnh cơ sở
4. Xóa ảnh chụp nhanh

Tôi đã thử điều này và nó hoạt động tốt trên VPS nhỏ 5GB. Nhưng có khả năng xảy ra lỗi hoặc hỏng VPS khi kích thước VPS rất lớn không?

Cảm ơn trước...


2
Đó là một trong những lý do tôi thích có các máy ảo của mình nằm trên khối lượng logic. Họ có hỗ trợ chụp nhanh vốn có.
Halfgaar

Câu trả lời:


12

Điều duy nhất bạn còn thiếu là tắt hệ thống tệp khách trước khi chụp ảnh nhanh, để đảm bảo rằng nó phù hợp. Điều này có thể được thực hiện với virsh domfsfreezenếu bạn đang sử dụng libvirtd.

Ví dụ: thứ tự của các hoạt động là:

# Freeze guest filesystems
virsh domfsfreeze $VM_NAME

# Create snapshot
qemu-img create -f qcow2 -b $VM_NAME.qcow2 snapshot.qcow2

# Thaw guest filesystems
virsh domfsthaw $VM_NAME

# Take backup from snapshot
qemu-img convert -O raw snapshot.qcow2 /backup/backup.img

Lưu ý rằng điều này đòi hỏi phải qemu-guest-agentđược cài đặt và chạy trong VM. Tùy thuộc vào sự lựa chọn phân phối và cài đặt, điều này có thể hoặc không thể là trường hợp.

Các qemu-guest-agentcũng được mở rộng; bạn có thể thêm tập lệnh vào nó để hỗ trợ phần mềm cụ thể. Chẳng hạn, nó bao gồm một tập lệnh mẫu để đưa MySQL vào trạng thái nhất quán.


Điều duy nhất câu trả lời này bị thiếu là xóa ảnh chụp nhanh sau khi sao lưu :)
dyasny 18/08/2015

2
@ BoscoD'mello Trừ khi bạn có ổ cứng rất tệ, nó sẽ ít hơn một phần của giây. Nó không đáng lo ngại.
Michael Hampton

1
Than ôi, ảnh chụp không làm việc cho tôi. Khi cố gắng virsh domfsfreeze $VM_NAME, tôi bị từ chối trên hệ thống tập tin khách của mình. Hệ thống tập tin khách của tôi được mã hóa, không chắc chắn rằng vấn đề.
một lập trình viên

2
@ Edward_178118 Nó phụ thuộc vào việc khối lượng công việc của bạn có thể bị đình chỉ trong một phần của giây không.
Michael Hampton

2
@ Edward_178118 Hoạt động mạng có độ trễ cực thấp, có lẽ? Tôi chưa bao giờ gặp phải bất cứ điều gì có vấn đề.
Michael Hampton

1

Có một cách tiếp cận khác liên quan đến việc tạo ảnh chụp nhanh tạm thời trong quá trình sao lưu và cam kết chúng trở lại sau đó.

# Create a temporary backup snapshot which records changes during backup
virsh snapshot-create-as vm backup-tmp --disk-only --atomic --quiesce --no-metadata --diskspec sda,file=/tmp/sda_temp.qcow2
# Now the main image is frozen and the changes are going into /tmp/sda_temp.qcow2

# Do your backup here
...

# Now we commit back data from temp snapshot into the main image
virsh blockcommit vm sda --active --pivot
# Remove the temporary snapshot file
rm /tmp/sda_temp.qcow2

Để biết thêm thông tin, hãy xem: https://wiki.libvirt.org/page/Live-disk-backup-with-active-blockcommit


1
Nếu bạn cần đĩa sao lưu lại sau này, xuất phát từ một vm đang chạy, bạn sẽ khôi phục như thế nào? Bạn không cần nội dung ram quá để khôi phục?
Adrian Zaugg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.