Backup do KVM qcow2 VPS em execução

9

Eu quero um método robusto de fazer backup do KVM VPS do arquivo qcow2, enquanto estiver executando. Depois de pesquisar por um longo tempo, descobri que podemos usar o rsync para backup ao vivo. Eu usei o seguinte comando para rsync:

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

Funcionou corretamente. Mas receio que possa corromper a imagem do backup qcow2 se o backup for realizado enquanto o VPS está sendo alterado devido a operações de gravação e exclusão (como a instalação de um novo software ou atualização).

Portanto, fazer backup do instantâneo do VPS ao vivo parece uma opção mais interessante.

Eu usei os seguintes comandos para fazer backup do VPS em execução:

1.Criar instantâneo:

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

2.Converta o instantâneo no formato de imagem bruta (.img):

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

Para restaurar o VPS:

3. converter imagem bruta na imagem qcow2:

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

Então podemos iniciar o VPS por virsh create base.xmlcomando.

Embora esse método também funcione perfeitamente, ainda não tenho certeza se esse é o método adequado para fazer backup da execução do VPS. Encontrei boa documentação sobre os comandos qemu-img aqui e aqui . Mas eles não mencionaram nada sobre a conversão de instantâneo de VPS ao vivo em imagem bruta.

Qual método é mais adequado para backup VPS ao vivo? A conversão de instantâneos em imagens não processadas é segura?

Se eu pudesse obter uma documentação detalhada e agradável sobre como os arquivos de instantâneo e base se comportam em determinadas condições, isso será muito útil.

Talvez também possamos converter a imagem base do qcow2 em um arquivo de backup bruto, em vez de converter o instantâneo. Portanto, o fluxo de comando será:
1. Crie um instantâneo
2. Converta o qcow2 base em imagem bruta de backup
3. Confirme as alterações do instantâneo na imagem base
4. Exclua o instantâneo

Eu tentei isso e funcionou bem em pequenos VPS de 5GB. Mas existe alguma possibilidade de erro ou corrupção do VPS quando o tamanho do VPS é enorme?

Desde já, obrigado...

Bosco D'mello
fonte
2
Essa é uma das razões pelas quais eu gosto de ter minhas máquinas virtuais residindo em volumes lógicos. Eles têm suporte a snapshots inerentes.
Halfgaar

Respostas:

12

A única coisa que está faltando é desativar o sistema de arquivos convidado antes de tirar o instantâneo, para garantir que ele seja consistente. Isso pode ser feito virsh domfsfreezese você estiver usando libvirtd.

Por exemplo, a ordem das operações é:

# 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

Observe bem que isso requer a qemu-guest-agentinstalação e a execução na VM. Dependendo das opções de distribuição e instalação, este pode ou não ser o caso.

O qemu-guest-agenttambém é extensível; você pode adicionar scripts a ele para suportar software específico. Por exemplo, inclui um exemplo de script para colocar o MySQL em um estado consistente.

Michael Hampton
fonte
A única coisa que esta resposta está faltando é a remoção instantâneo após o backup :)
dyasny
2
@ BoscoD'mello A menos que você tenha discos rígidos muito ruins, deve ser menor que uma fração de segundo. Não vale a pena se preocupar.
Michael Hampton
1
Infelizmente, o instantâneo não funcionou para mim. Ao tentar virsh domfsfreeze $VM_NAME, recebo permissão negada no meu sistema de arquivos convidado. Meus sistemas de arquivos convidados são criptografados, não tenho certeza se isso importa.
um codificador
2
@ Edward_178118 Depende se sua carga de trabalho pode ser suspensa por uma fração de segundo.
Michael Hampton
2
@ Edward_178118 Operações de rede com latência extremamente baixa, talvez? Nunca encontrei nada que fosse um problema.
Michael Hampton
1

Há uma outra abordagem que envolve a criação de instantâneos temporários durante o backup e a confirmação posterior.

# 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

Para mais informações, consulte: https://wiki.libvirt.org/page/Live-disk-backup-with-active-blockcommit

Thuffir
fonte
1
Se você precisar do seu disco de backup novamente mais tarde, proveniente de uma VM em execução, como você restauraria? Você não precisa do conteúdo da memória RAM também para restaurar?
Adrian Zaugg