17/09/2018

OpenVZ

Öncelikle Virtualbox ta 100Gb diski olanb bir makina oluşturdum ve indirdiğim openvz 7 iso su ile next next gibisinden kurulum yaptım hemen hemen hiç bir ayar vermedim.
Eğitim video ları youtube da mevcut burası daha çok notlarımdan oluşmakta olacka.
İlk başta container oluşturarark başlıyoruz.

# prlctl create MyContainer2 --vmtype ct --ostemplate centos-7-x86_64

Böylece Linux centos7 olan bir container yaratıyoruz. Container durumunu kontrol etmek için

# prlctl list -a
UUID STATUS IP_ADDR T NAME
{a989a493-76c6-4aa8-ab82-fa2b8fb20d3e} stopped - CT 101
{7feeb855-2a49-4f8f-aebe-15aff512b1b6} running - CT MyContainer2

Bu örnekte ben daha önce 101 containerinıda yaratmıştım o nedenle 2 adet görünüyor. Status lerinde de biri stopped biri running görnüyor ancak normalde stopped olarak gelir ve çalıştırmak için

# prlctl start 101

deriz tabii tahmin edeceğiniz gibi durdurmak içinde "stop"deriz.
Availability konusunun en önemli noktalarından biride migration lardır. Yani göç etmeler. Mesela donanım veya lokasyon değişikliği yapıldığı zaman hizmet verdiğimiz müşterilerin sistemlerinin ya sürekli faal olması yada minimum zaman kaybı ile downtime yaşaması önemlidir. İşte bu nedenle containerlarımız göç ettirilebilirler.
Bu örnekte mevcut makinamın bir kopyasını oluştrdum farklı bir IP ile.

# prlctl migrate MyContainer2 192.168.0.120

böylece IPsi 192.168.0.120 olan sisteme mevcut sistemdeki Container gçötü. Tabii burda OpenVZ lerin versiyonları aynı ve root şifresi biliniyor.
Container içine girmek için ise

# prlctl enter MyContainer

Aslında bir backup çeşidi olmayan snapshot almak da çok başarılı bir kabiliyettir.

# prlctl snapshot 101
Creating the snapshot...
The snapshot with id {f1594818-8e0c-4d15-8e8a-36f0d7c31fbc} has been successfully created.

Bir contaner a ait mevcut snapshotları görmek için

# prlctl snapshot-list 101
PARENT_SNAPSHOT_ID SNAPSHOT_ID
*{f1594818-8e0c-4d15-8e8a-36f0d7c31fbc}

Snapshot aldıüımız konuma dönmek için ise

#prlctl snapshot-switch 101 --id {f1594818-8e0c-4d15-8e8a-36f0d7c31fbc}

Backup / Restore
En önemli konulardan biri backup ve restore veya backuptan tek bir dosya geri alabilmektir.
Ayrıca backup ile container aynı makinada olmamalı böylece Hardware arızalarında başka makinada backup ile sistemi geri getirmek mümkün olabilmelidir.
Ayrıca iki tip backup alınmaktadır. İlk backup full backup ve diğerleri incrimental backuplardır. Bazı sistemlerde haftada bir full backup da alıyor olabilir.
Backup yeri ve tipi gibi ayarlamaları incelemek gerekiyor.
Ancak temel anlamda backup işlemleri aşağıda ki gibidir.
Derken bunun sadece virtuozzo da mevcut olduğunu öğrendim.
Konu ile ilgili aşağıda ki linki buldum scripti biraz inceleyip uygulamabilir olup olmadığını deneyeceğim.
 
Öncelikle şu dosyaya aşağıda ki kodu ekliyoruz
/usr/local/bin/vzbackup

#!/bin/bash
if [ -z $1 -o -z $2 ]
then
echo "Usage: vzbackup CTID BACKUP-PATH"
exit 1
fi

CTID=$1
FOLDER=$2
BACKUPPATH=$FOLDER/$CTID-$(date +%F_%H_%M)
#create BACKUP-PATH
mkdir -p $BACKUPPATH
# Known snapshot ID
ID=$(uuidgen)
VE_PRIVATE=$(vzlist -H -o private $CTID)
# Take a snapshot without suspending a CT and saving its config
vzctl snapshot $CTID --id $ID
# Perform a backup using your favorite backup tool
# (cp is just an example)
cp -r $VE_PRIVATE/root.hdd/* $BACKUPPATH/
# Delete (merge) the snapshot
vzctl snapshot-delete $CTID --id $ID
# remove old backups
rm -rf $( find $FOLDER -type d -name "$CTID*" -exec ls -d1rt "{}" + | head -n-4 )
echo "BACKUP FINISHED."
 
Daha sonra

chmod 700 /usr/local/bin/vzbackup

Backup alabilmek için container ID si ve backup lokasyonu beirtmek gerekiyor

# /usr/local/bin/vzbackup 102 .

Yada belirleyeceğiniz NFS / Samba mount edilmiş olan harici bir disk.
Bu backuptan sistemi veya herhangi bir dosyayı kurtarmak için
yani bir container oluştruyoruz

# prlctl create 103 --vmtype ct --ostemplate centos-7-x86_64

Ve bu container a ait UUID yi öğrenmemiz gerekiyor

[root@localhost ~]# prlctl list -a
UUID STATUS IP_ADDR T NAME
{a989a493-76c6-4aa8-ab82-fa2b8fb20d3e} running - CT 101
{ecc09ef2-3a69-4cfd-8747-51a51c631faa} running - CT 102
{4b4f5e1a-f43e-4fe9-87a6-55b22d9930cf} running - CT 103
{7feeb855-2a49-4f8f-aebe-15aff512b1b6} running - CT MyContainer2

Backup oluştururken backupta oluşturulan dosyalar bir klasöre yerleştiriliyor.

#ls -lap
drwxr-xr-x 3 root root 4096 Sep 17 00:32 102-2018-09-17_00_31/

İşte bu klasörün içindekileri "/vz/private/{UUID}/root.hdd/" içine kppyalamamız gerekiyor.

# cd 102-2018-09-17_00_31/
# \cp -R * /vz/private/4b4f5e1a-f43e-4fe9-87a6-55b22d9930cf/root.hdd/

en başta ki "\" işareti her seferinde onay sormasın direk yapsın diye.
ve en sonra yeni containerimızı başlatıyoruz

# prlctl start 103

Tabii bu yöntemin sakıncaları
1. IP aynı olunca başlamaya bilir. Ben bunu denerken henüz Openvz networking öğrenmedim.
2. Tüm backuplar full backup bu nedenle Container boyutu problem olabilir.
Tabii Openvz kullanmamız nedeniyle Virtuozzo backup konusunu pas geçmeyeceğim ancak örneklendiremeyeceğim. (Youtube da ki video da da mevcut)
Bir container a ait mevcut backupları görmek için

prlctl backup-list MyContainer

ID Backup_ID Node Date Type Size
{a989a493-76c6-4aa8-ab82-fa2b8fb20d3e} {4b4f5e1a-f43e-4fe9-87a6-55b22d9930cf} MyContainer 2018-09-17 10:19:32 i 11566405
{a989a493-76c6-4aa8-ab82-fa2b8fb20d3e} {4b4f5e1a-f43e-4fe9-87a6-55b22d9930cf}.2 MyContainer 2018-09-17 11:12:35 f 356798701

Burada önemli olan konular :
1. "f" full backup demek ve "i" inremental backup demektir.
2. Backupların isimleridir örnekte "bold" yaptım.
backup ı silmek için

prlctl backup-delete -t {4b4f5e1a-f43e-4fe9-87a6-55b22d9930cf}.2

Herhangi bir backup i olduğu gibi restore etmek istersek.
Ancak unutmayın mevcut durumda ki herşey silinir.
Önce durdurmamız gerekiyor

# prlctl stop MyContainer
# prlctl restore -t {4b4f5e1a-f43e-4fe9-87a6-55b22d9930cf}.2 MyContainer

Böylece istediğimiz backup noktasında sistemimiz restore oluyor.
Ancak her zaman olduğu gibi geri dönmeyi edğil sadece bir kaç dosya veya klasörü geri getirmek isteriz.
Bu durumda backup'ın çalışan container a mount edilmesi gerekir.

# prlctl set MyContainer --backup-add {4b4f5e1a-f43e-4fe9-87a6-55b22d9930cf}.2

Şimdi sisteme backup ı bir disk olarak bağladık. (OpenVZ de ploop device)
Ancak hangi disk olduğunu bulmamız gerekiyor

# ploop list | grep {4b4f5e1a-f43e-4fe9-87a6-55b22d9930cf}

Burada dikkatli olmamız gereken konu backup isminin sonunda ki "." noktalı kısmı almadım.

ploop list | grep {4b4f5e1a-f43e-4fe9-87a6-55b22d9930cf}
ploop28261 /buse/{8417a267-0919-4c8f-a31d-68671358d6a8}_{4b4f5e1a-f43e-4fe9-87a6-55b22d9930cf}_private.tib/content

Artık ploop isminide beliyoruz. Bunu şimdi mount edelim

prlctl exec MyContainer mount /dev/ploop28261p1 /mnt

Artık prlctl enter MyContainer ile containera girip /mnt ye (veya mount ettiğimiz yere giderek) istediğimiz dosyayı kopyalayabiliriz.
Ancak kopyalama komutunu yazarken adreslere (relatif ve mutlak) iyi dikkat etmekte fayda var.
işimiz bitince mutlaka ama mutlaka mount ettiğimiz backup u ayırmalıyız.
Bunun için exit ile containerdan çıkıp.

# prlctl set MyContainer --backup-del {4b4f5e1a-f43e-4fe9-87a6-55b22d9930cf}.2

Backup restore detayları ve ek bilgiler ilgili dokümanda
http://download.parallels.com/doc/pcs/html/Parallels_Cloud_Server_Users_Guide/29994.htm
Mevcut CT'nin boyutunu degistirmek icin
Örnek CT number 12345 olsun
Öncelikle "/etc/vz/conf/12345.conf" dosyasından DISKSPACE ve DISKINODES değerlerine bakarız. Bunlar kilobyte cinsindendir.
daha sonra

# vzctl set 12345 --diskspace 40G --save

burada 40 Gbyte mevcut disk artı ne kadar artırmak istediğimiz toplam değerdir. Örneğin mevcut disk 30G ve eklemek istediğimiz 10G ise 40G olur.
Sonra kontrolu için

# vzctl exec 12345 df -h


Leave a Reply