RestAPI ile Ovirt(Open Virtualization Manager)’da Snapshot Tabanında Otomatik Backup/Restore Operasyonu

Konu ile ilgili daha önceden Python ile yazılmış online full backup script’ini kullanarak bu işlemi gerçekleştireceğiz.

https://github.com/wefixit-AT/oVirtBackup adresinden bu script’i indirebilirsiniz.

BACKUP

Tek yapmamız gereken bu tool’u kendi ortamımıza göre uyarlayıp, daha sonro crontab ile otomatik hale getirmek. Şimdi aşağıdaki adımlarla bu işlemin nasıl yapılacağına bir bakalım.

İlk olarak oVirt ortamına yedeklemi işlemini tetikleyeceğimiz(python script’inin çalıştıracağımız) bir makine kurup ayağa kaldırıyoruz. Ben CentOS bir makine kurdum. Ardından python çalıştırabileceğimiz paketleri kuruyoruz(ovirt-engine-sdk-python, gcc, python-devel, openssl-devel, libxml2, libxml2-devel, python36, python36-pip, ovirtsdk, curl-devel, pip3 vs. – Script’teki requirements.txt dosyasını okuyunuz.). Belirttiğim paketleri kurmadan çalıştırırsanız karşınıza çıkan uyarılarla gereken paketleri kurabilirsiniz ki bence öyle de yapabilirsiniz.

Ardından içerisindeki iki dosya bizim için önemli “backup.py” ve “config_example.cfg” dosyaları. “backup.py” dosyası bizim ortamımız için yapılandırılmış “config_example.cfg” dosyasına göre yedekleme işlemini çalıştıracaktır.

İş akışı sırasıyla aşağıdaki gibidir.

– Anlık görüntü oluştur

– Anlık görüntüden, yeni bir VM oluştur

– Anlık görüntüyü sil

– Önceki yedekleri sil (ayarlanmışsa)

– Anlık görüntüden oluşan VM’yi NFS paylaşımına Export et

– Anlık görüntüden oluşan VM’yi sil

Crontab çıktım aşağıdaki gibi olsun(yani her perşembe saat 23:00’de ilgili vm için yedeklemeyi başlat.)

> crontab -l

00 23 * * 4 /usr/bin/python /scripts/oVirtBackup-master/backup.py -c /scripts/oVirtBackup-master/config_vms.cfg -d

Şimdi en önemli kısım olan “config_example.cfg” dosyasında ki alanları inceleyip, kendi ortamımıza göre nasıl yapılandıracağız ona bakalım. Sadece ilgili değişkenleri ele alacağız.

  • vm_names: [“MysqlVM”]
  • vm_middle=_BACKUP
  • snapshot_description=Snapshot for backup script
  • server=https://ovirt-server.mydomain/ovirt-engine/api
  • username=admin@internal
  • password=adminkullanıcısınınparolası
  • export_domain=export_nfs #Bu alana Domain Function Export, Storage Type NFS yaptığınız Storage Domain’i yazmalısınız.
  • timeout=5000
  • cluster_name=Default
  • backup_keep_count=8 #Yedeklemelerin bu günler içinde ne kadar süreyle tutulması gerektiği belirtir. Ben otomatik olarak crontab’ta her haftanın perşembe gününde(4) yedeklemeyi tetiklediğim için ve geriye dönük 2 adet yedek saklamak istediğim için 7+1=8 olarak atadım.
  • dry_run=False
  • vm_name_max_length=60
  • use_short_suffix=False
  • storage_domain=data01 #Sunucunun, disk dosyasının barındığı Storage Domain’i yazmalısınız.
  • storage_space_threshold=0.1
  • logger_fmt=%(asctime)s: %(message)s
  • logger_file_path=/var/log/ovirt-vm-backup.log #Backup’lama esnasında oluşacak logların barındırılacağı yeri belirtmelisiniz.
  • persist_memorystate=False

Artık VM’leriniz Storage/Storage Domains/export_nfs altına crontab’ın tetiklemesiyle oVirtBackup script’i sayesinde otomatik olarak yedeklenecektir.

RESTORE

Storage/Storage Domains/export_nfs mevcut olan herhangi bir virtual machine seçili iken “Import” tıklayın. Akabinden aşağıdaki görselden de anlaşılacağı üzere OK tıklayıp, aktif ortama dahil edip restore işlemini tamamlamış olursunuz.

Linux KVM Backup and Restore

Aşağıdaki yönergeleri izleyerek KVM sanallarınızı yedekleyebilir ve yedekten geri dönebilirsiniz.

1. Backup

İlk önce makinelerimizi listeleyelim ve çalışır vaziyette olduğunu görelim.

> virsh list –all

Daha sonra yedekleyeceğimiz vm’i kapatalım.

> virsh shutdown Ubuntu18

Ardından makineleri tekrar listeleyelim ve kapalı olduğunu görelim.

> virsh list –all

Şimdi makineyi (XML dosyasını) aşağıdaki komut/yöntem ile yedekleyelim.

> virsh dumpxml Ubuntu18 > /MyBackup/Ubuntu18.xml

yada

default ta XML lerin tutulduğu “/etc/libvirt/qemu” dizinin altından ilgili XLM’i ilgili backup dizinine cp komutu ile kopyalayabilirsiniz.

Şimdi de disk dosyasını (qcow2) aşağıdaki komut/yöntem ile yedekleyelim.

qcow2 formatındaki disk dosyasını da /MyBackup altına kopyalayalım. Disk dosyalarının default ta tutulduğu yer “/var/lib/libvirt/images/” altındadır.

yada

> virsh domblklist Ubuntu18 komutu ile nerde olduğunu görebilirsiniz. İlgili yerden cp yada scp (remote) komutu ile backup klasörünüze kopyalayabilirsiniz.

> cp /var/lib/libvirt/images/Ubuntu18.qcow2 /MyBackup/Ubuntu18.qcow2

Listeleyip tüm yedeklerimizi görelim.

> ls -lash

NoT: Backup işlemini makineleri kapatmadan da yapabilirsiniz fakat oluşabilecek hatalara yada veri kaybına karşın, kapatıp yapmak sağlıklı olacaktır. Tabi illaki makinenin hizmet kesintisi olmaması gerekiyorsa, dediğim gibi vm açıkkende backup alabilirsiniz.

2. Restore

Şimdi yedekten geri dönme senryosunu uygulayalım. Bunun için XML’i silebilir yada undefine edebilirsiniz.

> virsh undefine Ubuntu18

yada

Sunucu özelliklerinin barındığı XML dosyası silinmiş olsun ve listelediğimizde makinenin gittiğini görebiliyoruz.

> virsh list –all

Şimdi senaryoyu gerçekleştirmek için disk (qcow2) dosyasını silelim.

> rm /var/lib/libvirt/images/Ubuntu18.qcow2

Ve senaryo uygulamasına başlayabiliriz. Hemen backup aldığımız yerden diskin (qcow2)’un olması gereken yere kopyalama işlemine başlayalım.

> cp /MyBackup/Ubuntu18.qcow2 /var/lib/libvirt/images/

Diskin kopyalama işlemi bittikten sonra makine özelliklerinin olduğu XML dosyasını aşağıdaki komut/yöntem ile kullanabilir hale getirelim.

> virsh define –file /MyBackup/Ubuntu18.xml

yada

Sunucu özelliklerinin barındığı XML dosyası bulunduğu dizine tekrar kopyalanmış olsun.

Ardından vm’i başlatarak işlemi tamamlayalım.

> virsh start Ubuntu18