qemu backup•qcow2 bitmaps done in virtuozzo: •new backup architecture (async io) •bitmaps...

33
QEMU Backup Maxim Nestratov, Virtuozzo Vladimir Sementsov-Ogievskiy, Virtuozzo

Upload: others

Post on 31-Dec-2020

16 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

QEMU BackupMaxim Nestratov, Virtuozzo

Vladimir Sementsov-Ogievskiy, Virtuozzo

Page 2: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

QEMU BackupVladimir Sementsov-Ogievskiy, Virtuozzo

Page 3: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

Full featured backup

Copyright © 2017 Virtuozzo. All Rights Reserved. 3

•Online backup• Fast• Not very invasive for the guest

• Incremental• Dirty bitmaps persistence and migration

•External backup API

Page 4: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

Incremental

Copyright © 2017 Virtuozzo. All Rights Reserved. 4

Page 5: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

Incremental

Copyright © 2017 Virtuozzo. All Rights Reserved. 5

Page 6: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

Incremental: persistent

Copyright © 2017 Virtuozzo. All Rights Reserved. 6

•Qcow2 bitmaps merged into 2.9• Several named bitmaps• Size equals image size• Sparse format

•Other formats are under discussion

Page 7: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

Incremental: migration

Copyright © 2017 Virtuozzo. All Rights Reserved. 7

Variants:

•Fist approach: meta bitmaps

•Current approach: postcopy

•Through storage (works for qcow2)

Page 8: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

Incremental: snapshots

Copyright © 2017 Virtuozzo. All Rights Reserved. 8

Internal snapshots

•Dirty bitmaps correspond to active state

•Switch to snapshot = the whole disk is dirty

External snapshots

•Everything is possible

Page 9: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

Performance: current work

Copyright © 2017 Virtuozzo. All Rights Reserved. 9

Backup = simple copy + COW (write notifiers)•Current approach:

• Sequential copying + sequential notifiers

•New arc:• Queues of requests• Several copying coroutines• Notifiers just increase priority of request• Earlier notifier release

Page 10: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

Performance: ideas and plans

Copyright © 2017 Virtuozzo. All Rights Reserved. 10

How to handle COW?

•Current: guest wait for backup

•Reverse delta: read COW area to local delta

Page 11: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

External backup API

Copyright © 2017 Virtuozzo. All Rights Reserved. 11

• Image fleecing scheme

• Incremental backup• NBD block-status extension• Additional API for dirty bitmap management

Page 12: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

External backup API: image fleecing

Copyright © 2017 Virtuozzo. All Rights Reserved. 12

Page 13: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

External backup API: NBD block-status

Copyright © 2017 Virtuozzo. All Rights Reserved. 13

•Current NBD: payload only for READ

•Extension: structured replies

•Extension: block-status• Negotiation phase: select metadata contexts• Transmission phase

• New command NBD_CMD_BLOCK_STATUS

• Reply chunk contains extent descriptors

Page 14: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

QEMU Backup summary

Copyright © 2017 Virtuozzo. All Rights Reserved. 14

Merged:

•Qcow2 bitmaps

Done in Virtuozzo:

•New backup architecture (async IO)

• Bitmaps migration

•NBD block-status extension

Near future:

• External backup API

Page 15: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

Libvirt Backup APIMaxim Nestratov, Virtuozzo

Page 16: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

Libvirt Backup API first proposal

Copyright © 2017 Virtuozzo. All Rights Reserved. 16

• "Push" backups (managed)

• "Pull" backups (external)

Page 17: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

Why not snapshots?

Copyright © 2017 Virtuozzo. All Rights Reserved. 17

•Different storage

• Incremental backups

•Multiple chains

•Agentless

Page 18: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

"Push" or "Managed" Backups

Copyright © 2017 Virtuozzo. All Rights Reserved. 18

•A new set of functions similar to snapshots•Create, List, Delete, Edit•Managed by libvirt•Local to host•Can be saved to any supported block device•NAT friendly•Based on “drive-backup” QMP command

Page 19: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

Copyright © 2017 Virtuozzo. All Rights Reserved. 19

Managed backup scheme

Page 20: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

Managed backup concerns

Copyright © 2017 Virtuozzo. All Rights Reserved. 20

•Hard to use in clusters

•Guest performance influence due to network throughput

•A lot of code to implement

•Access to backup storage

Page 21: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

"Pull" or "External" Backups

Copyright © 2017 Virtuozzo. All Rights Reserved. 21

•Mostly two functions: Start/Stop

•Exposes block device via NBD protocol

•Uses NBD protocol extension for incremental backups

•Based on blockdev-add/blockdev-del and blockdev-backup QMP commands

Page 22: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

External backups advantages

Copyright © 2017 Virtuozzo. All Rights Reserved. 22

•Tolerant to guest performance

•Controlled externally

•Cluster friendly

Page 23: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

External backups concerns

Copyright © 2017 Virtuozzo. All Rights Reserved. 23

•NAT unfriendly

•NBD dependent

Page 24: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

Copyright © 2017 Virtuozzo. All Rights Reserved. 24

External backup scheme

Page 25: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

Current intention

Copyright © 2017 Virtuozzo. All Rights Reserved. 25

•Let’s go with “external” scheme first

• It’s easier to implement

•Has more advantages in comparison with “push” backup scheme

Page 26: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

Libvirt API proposal

Copyright © 2017 Virtuozzo. All Rights Reserved. 26

virDomainBackupPtr virDomainBackupStart(virDomainPtr dom,

const char *xmlDesc,

unsigned int flags);

int virDomainBackupStop(virDomainPtr dom,

virDomainBackupPtr backup,

unsigned int flags);

int virDomainBackupList(virDomainPtr domain,

virDomainBackupPtr **backups,

unsigned int flags);

char* virDomainBackupGetXMLDesc(virDomainBackupPtr backup,

unsigned int flags);

Page 27: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

virDomainBackupStart

Copyright © 2017 Virtuozzo. All Rights Reserved. 27

<domainbackup>

<blockserver port="7000">

<listen type='address' address='1.2.3.4'/>

</blockserver>

<disk name='sda'>

<fleece file="/fleece_a"/>

</disk>

</domainbackup>

xml parameter looks like

Page 28: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

virDomainBackupStart continued

Copyright © 2017 Virtuozzo. All Rights Reserved. 28

<blockserver port="7000">

<listen type='address' address='1.2.3.4'/>

</blockserver>

Successful start will add the following section

flags - VIR_DOMAIN_BACKUP_START_QUIESCE

Page 29: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

virDomainBackupStart continued

Copyright © 2017 Virtuozzo. All Rights Reserved. 29

• Call “blockdev-add” for each disk in domain

• Gather all created devices into a transaction

• Start the transaction via “blockdev-backup”

Page 30: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

virDomainBackupStop

Copyright © 2017 Virtuozzo. All Rights Reserved. 30

• Successful stop will remove reference from NBD server

• Will stop server when reference count reaches zero

Page 31: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

virDomainBackupStop continued

Copyright © 2017 Virtuozzo. All Rights Reserved. 31

• Stop NBD server

• Cancel backup block job for each disk with “block-job-cancel” QMP command

• Delete backup devices created with “blockdev-add” via “blockdev-del”

• Delete all fleece files created

Page 32: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

Questions

Copyright © 2017 Virtuozzo. All Rights Reserved. 32

• Do we need to have a separate call to list backups?Or just report all information in domain xml.

• Do we need to start blockservers manually?

• Incremental backup interface.

• Restore: should we introduce a new set of functions or just reuse existing facilities.

• Should backup API be generic or QEMU specific.

Page 33: QEMU Backup•Qcow2 bitmaps Done in Virtuozzo: •New backup architecture (async IO) •Bitmaps migration •NBD block-status extension Near future: •External backup API Libvirt

Thank you. Questions?Maxim [email protected]

Vladimir [email protected]