Proxmox VE için Otomatik Snapshot Alınması

yazar:

kategori:

Proxmox VE, 3.4 sürümünden beridir, ZFS desteği ile birlikte geliyor. ZFS, copy-on-write bir dosya sistemi olarak, snapshot konusundaki özellikleri ile öne çıkıyor:

  • Snapshotlar sistem yeniden başlatıldığında kalıcıdır.
  • 264 adette kadar snaphot alınabilir.
  • Snapshotlar ayrı bir yedekleme alanı kullanmaz. Snapshotlar, disk alanını doğrudan oluşturuldukları dosya sistemi veya birim ile aynı depolama havuzundan tüketir.
  • Özyinelemeli snapshotlar, tek bir atomik işlem gibi hızlı bir şekilde oluşturulur. Snapshotlar birlikte (hepsi aynı anda) oluşturulur veya hiç oluşturulmaz. Atomik snapshot işlemlerinin avantajı, snapshot verilerinin, alt dosya sistemlerinde bile her zaman tutarlı bir zamanda alınmasıdır.

ZFS‘in snapshot yetenekleri, VM’de oluşabilecek kazaları veya geri dönüşleri kolaylaştırır. Bu bakımdan eğer Proxmox VE‘de ZFS kullanıyorsanız, otomatik snapshot almak, operasyonlarınızı kolaylaştıracaktır.

Unutmayın, snapshot bir yedek değildir! Eğer VM dışında bir probleminiz oluşursa: depolama, güvenlik duvarı, internet, hipervizör veya herhangi bir felaket karşı tedbir almak isterseniz, Proxmox Backup Server ile hem lokal hem de uzak yedek alabilirsiniz.

cv4pve-autosnap isimli araç ile aşağıdaki adımlar ile otomatik snapshot almayı ayarlayacağız.

Proxmox VE’de Kullanıcı Oluşturulması

cv4pve-autosnap, Proxmox VE‘ye bağlanmak için Proxmox VE API’sini kullanıyor. Bunun için de bir kullanıcı oluşturup, bu kullanıcıya yetki vermemiz gerekiyor.

Datacenter -> Permissions -> Users -> Add adımından kullanıcıyı aşağıdaki gibi ekliyoruz:

Password değeri için karmaşık bir parola belirlemenizi tavsiye ederiz. Biz bu belgemiz için parola olarak, oap0RLXx6qVKfrSM değerini kullanacağız.

Proxmox VE’de Rol Oluşturulması

Datacenter -> Permissions -> Roles -> Create adımıyla cv4pve-autosnap isimli bir rol oluşturup, Privileges kısmından Datastore.Audit, Pool.Allocate, VM.Audit, VM.Snapshot yetkilerini seçiyoruz.

Proxmox VE’de Rol Ataması Yapılması

Datacenter -> Permissions kısmından, oluşturduğumuz cv4pve-autosnap için, cv4pve-autosnap rolünü atıyoruz:

cv4pve-autosnap Kurulumu

Proxmox VE kümesindeki herhangi bir hipervizöre SSH ile bağlanıp aşağıdaki komutları sırasıyla çalıştırıyoruz:

# apt install -y unzip
# wget https://github.com/Corsinvest/cv4pve-autosnap/releases/download/v1.14.8/cv4pve-autosnap-linux-x64.zip
# unzip cv4pve-autosnap-linux-x64.zip
# chmod +x cv4pve-autosnap
# mv cv4pve-autosnap /usr/local/bin/
# mkdir /etc/cv4pve-autosnap

Sırası ile aşağıdaki üç dosyayı, /etc/cv4pve-autosnap klasörü içerisine oluşturuyoruz:

/etc/cv4pve-autosnap/clean.parm:

--host=localhost
--username=cv4pve-autosnap@pve
--password=oap0RLXx6qVKfrSM
--vmid=all
--timestamp-format=yyMMdd_HHmm
clean
--label=hourly
--keep=0

Burada, keep=0 değeri ile bütün alınmış otomatik snapshotlar silmiş olacağız.

/etc/cv4pve-autosnap/snap.parm:

--host=localhost
--username=cv4pve-autosnap@pve
--password=oap0RLXx6qVKfrSM
--vmid=all
--timestamp-format=yyMMdd_HHmm
--max-perc-storage=80
snap
--label=hourly
--keep=16

Eğer belirli VM’ler için snapshot almak isterseniz, vmid parametresinde VM’lerin listesini virgül ile sıralayıp verebilirsiniz: vmid=100,101,102 gibi.

Eğer bütün VM’leri yedek alıp, belirli VM’leri hariç tutmak isterseniz: vmid=all,-100,-101 gibi.

keep değeri, eski snapshotların otomatik silinmesini sağlar. Buradaki ayarlarda, son 16 adet snapshot saklanıyor olacak.

/etc/cv4pve-autosnap/status.parm:

--host=localhost
--username=cv4pve-autosnap@pve
--password=oap0RLXx6qVKfrSM
--vmid=all
status

Üstteki dosyalar sayesinde, komutlar için parametreleri kaydetmiş oluyoruz:

Snapshot almak için:

# cv4pve-autosnap @/etc/cv4pve-autosnap/snap.parm
ACTION Snap
PVE Version:      8.1.3
VMs:              all
Label:            hourly
Keep:             16
State:            False
Only running:     False
Timeout:          30 sec.
Timestamp format: yyMMdd_HHmm
Max % Storage :   80%
                  Storage      Type     Valid   Used %    Disk Size  Disk Usage
        pve11/local-nvme1   zfspool        Ok       4.6     1.76 TB    82.77 GB
          pve11/local-xfs       dir        Ok         6   476.71 GB     28.6 GB
          pve11/local-zfs   zfspool        Ok         0   861.02 GB       96 KB
----- VM 5001 qemu stopped -----
Skip VM is template
----- VM 7001 qemu running -----
Create snapshot: autohourly231224_1600
VM execution 00:00:03.7197946
----- VM 7002 qemu running -----
Create snapshot: autohourly231224_1600
VM execution 00:00:03.6531510
----- VM 9194 qemu running -----
VM 9194 consider enabling QEMU agent see https://pve.proxmox.com/wiki/Qemu-guest-agent
Create snapshot: autohourly231224_1601
VM execution 00:00:00.5684604
Total execution 00:00:08.2037206

Alınan snapshotları, Proxmox VE arayüzünden görebilirsiniz:

Snapshot’ları listelemek için:

# cv4pve-autosnap @/etc/cv4pve-autosnap/status.parm
+-------+------+-------------------+-----------+-----------------------+-----------------+-----------+
| NODE  | VM   | TIME              | PARENT    | NAME                  | DESCRIPTION     | VM STATUS |
+-------+------+-------------------+-----------+-----------------------+-----------------+-----------+
| pve11 | 7001 | 23/12/24 13:00:53 | no-parent | autohourly231224_1600 | cv4pve-autosnap |           |
| pve11 | 7002 | 23/12/24 13:00:57 | no-parent | autohourly231224_1600 | cv4pve-autosnap |           |
| pve11 | 9194 | 23/12/24 13:01:01 | no-parent | autohourly231224_1601 | cv4pve-autosnap |           |
+-------+------+-------------------+-----------+-----------------------+-----------------+-----------+

Snapshotların tamamını temizlemek için:

# cv4pve-autosnap @/etc/cv4pve-autosnap/clean.parm
ACTION Clean
VMs:              all
Label:            hourly
Keep:             0
Timeout:          30 sec.
Timestamp format: yyMMdd_HHmm
Skip VM is template
----- VM 7001 qemu -----
Remove snapshot: autohourly231224_1600
----- VM 7002 qemu -----
Remove snapshot: autohourly231224_1600
----- VM 9194 qemu -----
Remove snapshot: autohourly231224_1601

Eğer belirli bir VM’in snapshotlarını silmek istersek, örneğin 7001 ID’li VM’i, aşağıdaki komutu çalıştırabiliriz:

cv4pve-autosnap --host=localhost --username=cv4pve-autosnap@pve --password=oap0RLXx6qVKfrSM --vmid=7001 --timestamp-format=yyMMdd_HHmm clean --label=hourly --keep=0

Eğer bütün bu işlemler sizin için uygunsa, her 3 saatte bir otomatik snapshot almak için crontab -e komutuyla, aşağıdaki satırı crontab’a ekleyebilirsiniz. Biz saatleri listeleyerek ekledik, fakat */3 de kullanılabilir:

0 1,4,7,10,13,16,19,22 * * * /usr/local/bin/cv4pve-autosnap @/etc/cv4pve-autosnap/snap.parm

Aşağıdaki komutla, label=hourly için aldığımız snapshotları dosya sisteminde de görebiliriz:

# zfs list -t all | grep hourly
local-nvme1/vm-7001-disk-0@autohourly231224_1615  3.20M      -  2.76G  -
local-nvme1/vm-7002-disk-0@autohourly231224_1615  2.95M      -  2.39G  -
local-nvme1/vm-9194-disk-0@autohourly231224_1615   880K      -  1.50G  -

Sadece belirli bir VM diski için snapshotların ne kadar yer kapladığını aşağıdaki komutla bakabiliriz:

# zfs get usedbysnapshots local-nvme1/vm-9194-disk-0
NAME                        PROPERTY         VALUE     SOURCE
local-nvme1/vm-9194-disk-0  usedbysnapshots  1.13M     -

proxmox-autosnap isimli araç da benzer bir işlev görmek ile birlikte, sadece yüklü olduğu hipervizördeki VM’ler için otomatik snapshot alabiliyor. Bu bakımdan, bu aracın bütün Proxmox VE’deki hipervizörlere kurulması gerekmekte. Bu yüzden cv4pve-autosnap isimli aracı tercih etmiş olduk.


Yorumlar

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir