ProxMox Sanallaştırma Platformu

Citrix Xenserver’dan vazgeçince tavsiye ve denemeler üzerine ProxMox PVE‘de karar kıldık. Kurulumu ve kullanımı kolay (tek bir web ara yüzünden herşeyi yapabiliyorsunuz); Hem KVM ile tam sanallaştırma, hem de  CV (Container Virtualization; Linux’a özel hızlı ama fazla esnek olmayan bir yapı… detaylar için openvz.org )
Kurulum: Sitesinden ISO dosyasını indirip, CD’ye yakıp bir kaç TByte diski, 16GB falan belleği olan bir makinayı bununla açınız. Gerisi kolay… (diske kendini, bir Debian türevi olan kendi işletim sistemiyle birlikte kuracaktır.
Kullanım: Firefox veya Chrome ile https://sunucunuz:8006 adresine gidip root/root_şifresi ile web yönetim paneline girin. Gerisi kolay… Web yönetiminde sanal makinalarınızın konsollarına erişebilmek için Java gerekecektir. Ancak OpenJDK ile çalışmıyor! İstemcilere mutlaka ORACLE-Java yüklenmesi gerekiyor.
Debain türevi istemcide OpenJDK’yı kaldırmak ve yerine Oracle Java  [78] kurmak icin:

 # apt-get purge openjdk*
 # add-apt-repository ppa:webupd8team/java
 # apt-get install oracle-java[78]-installer
 # apt-get updateupdate-java-alternatives -s java-[78]-oracle

İlk akla gelen sorular:

Sanal makinaların diskleri nerede?  /var/lib/vz/images/ altında, makina tanıtım kodu (numarası) ile aynı olan dizin altında…
Sanal makinaların ayarları nerede? /etc/pve/nodes/PROXMOX-SUNUCUSU/qemu-server/*.conf …
Bu ayar dosyalarını vi ile editleyebilir miyim? Ne yaptığınızı biliyorsanız, evet!
Otomatik VM yedekleme var mı? Var! ProxMox’a bir NFS mount noktası gösterdiğinizde (bizde heybe3.bcc.bilkent.edu.tr:/proxmox_vm_backups on /mnt/pve/Backup_Storage) ( ProxMox yönetim panelinde “Datacenter –> Storage –> Add –> NFS Share –> Server = Nfs Server –> Export = Export adı –> “Content = Backups” ) artık otomatik yedekleme için kullanılacak NFS sunucusu ve paylaşılan dizin belirlenmiş olur. Ardından “Datacenter” –> “Backup” –> seçimi ardından otomatik yedeklemesi yapılacak makinaları ve yedekleme gün-saatlerini seçebilirsiniz.  Geriye dönük kaç günlük yedeklerin tutulacağını ise “Datacenter” –> Storage ->> “Backup_Storage” –> çift klik –> “Max Backups” ile tanımlayabilirsiniz.

proxmox_backup

Fiziksel Linux Makinaları ProxMox’a Taşıma

Yöntem-1 (Taşınacak makina uzunca süre kapalı kalacaktır)

ProxMox ortamında diski fiziksel makinanın diskinden 300-500 MB daha büyük olan bir sanal makina yaratın.

Bu sanal makinaya bir Live-CD takın (bu CD’nin ISO dosyası daha önce ProxMox sunucusunda “local storage”a upload edilmiş olmalıdır. Sol menüden “Storage List” -> “local” -> “Upload”). Sanal bir makinaya CD takmak için: Sol menüden ilgili makinayı tıkla -> “Hardware” -> CD/DVD Drive çift tıkla -> “Use CD/DVD disk image” -> ISO Image dosyasını seç.

Sanal makinayı CD/DVD’den boot et. Gerekirse sanal makina için “Options” altında “Boot order” bilgisini değiştir.

Sanal makinanın IP ayarlarını yapın:

# ifconfig eth0 139.179.39.119 netmask 255.255.255.0 broadcast 139.179.39.255
# route add default gw 139.179.39.1           gibi

Fiziksel makinayı kapatıp bir Live-Linux CD/USB kullanarak açın ve uygun IP ayarlarını yapın:

# ifconfig eth0 139.179.125.120 netmask 255.255.255.0 broadcast 139.179.125.255
# route add default gw 139.179.125.1       gibi

Fiziksel makinanın diskini, fiziksel makinada vereceğiniz dd komutuyla sanal makinanın diskine kopyalayın (100 Mbit/sn bir bağlantıda saatler sürebilir) (/dev/sda mı  yoksa /dev/hda mı kullanılacağını her iki makinada çalıştıracağınız “fdisk -l” komutlarıyla görebilirsiniz. Büyük olasılıkla “/dev/sda” olacaktır.

# dd if=/dev/sda | ssh root@139.179.39.119 dd of=/dev/sda

Kopyalama bittiğinde sanal makinayı kapatıp, CD’yı çıkarıp ( sol menüden makinayi tıklayıp -> Hardware -> “CD/DVD Drive” çift tıklayıp -> “Do not use any media”  ya da “Options” altında “Boot order” değiştirerek) makinanın diskten açmasını sağlayınız. Disk kopyalama sırasında IP adresiyle ilgili ayarlar da kopyalanmış olacağından bu yeni sanal makinanın konsolunu kullanarak IP adresi ve diğer TCP/IP parametrelerini olması gerektiği şekilde değiştirmeyi unutmayınız.

Yöntem-2 (Taşınacak makina bir-iki dakika servis dışı kalabilir)

ProxMox ortamında diski fiziksel makinanın diskinden 300-500 MB daha büyük olan bir sanal makina yaratın.

Bu sanal makinaya, sanallaştırılacak makina ile tıpa-tıp aynı Linux distrosunu yükleyin.

Sanallaştırılacak makinaya, yoksa rsync paketini yükleyin. ( apt-get install rsync )

Sanallaştırılacak makinada “rsync” servisini açın ( /etc/default/rsync –> RSYNC_ENABLE=true )

Sanallaştırılacak makinada /etc/rsyncd.conf dosyasını aşağıdaki örneğe göre yaratın ya da günceleyin: (139.179.39.0/24 IP adres bloğunu sanal makinanızın yer aldığı IP bloğu ile değiştirmeyi unutmayın)

[all]
exclude = /etc/network/interfaces /boot /etc/grub / dev /proc /sys /run /mnt /lost+found /media
read only = yes
numeric ids = yes
uid = 0
gid = 0
hosts allow = 139.179.39.0/24

Yeni sanal makinada aşağıdaki komutu çalıştırın (139.179.125.120: sanallaştıtılacak makinanın IP adresi):

rsync -av 139.179.125.120::all  /

rsync tamamlandığında, sanallaştırılacak makinada apache, mysql gibi servisleri durdurup rsync komutu tekrarlayın.

Hemen ardından yeni sanal makinayı restart edin. Sorun yoksa DNS ayarlarında gerekli değişiklikleri yapıp sanallaştırılan makina için tanımlı IP adreslerini yeni makinaya göre değiştirin. Fiziksel makinayı kapatıp tüm servislerin yeni sanal makina tarafından verildiğine emin olun.

Fiziksel Windows Makinaları ProxMox’a Taşıma

(Taşınacak makina kapalı kalmaz.)

Bu yöntem, sanallaştırılacak Windows makinanın disklerinin IDE, ATA, SATA olmasına göre başarılı olmayabiliyor. Şu anda hangi durumda başarılı; hangi durumda başarısız olduğunu anlayamadım. Başarısız olma durumunda sanal makina açılacakmış gibi başlayıp sürekli reboot ediyor. Recovery mode da flan açılmıyor. Literatürde sözu edilen embedide.reg registry ayar eklentileri de bende işe yaramadı. Bir Windows-7 makinayı bu yöntemle başarıyla aktardım ama bir XP makinayı aktaramadım.

ProxMox ortamında diski fiziksel Windows makinanın diskinden 300-500 MB daha büyük olan bir sanal makina yaratın.

Windows makinaya SelfImage-121 yazılımını kurun.

ProxMox sunucusunda az önce yarattığınız sanal makinanın sanal diskinin adını öğreniniz. Bunun için ProxMox ekranında sol tarafta makinayı seçip “Hardware” tab’i altında “Hard Disk” olarak listelenen satırda “local:115/vm-115-disk-1.qcow2,format=qcow2,size=50G” gibi bir satır göreceksiniz. Bu satırdan size lazım olan karakter dizisi “115/vm-115-disk-1.qcow2” kısmıdır. Bu dizin/dosya adını not edip ProxMox sunucunuzda açacağınız bir root konsolundan aşağıdaki komutu giriniz:

qemu-nbd  -t  /var/lib/vz/images/115/vm-115-disk-1.qcow2  -p  1024

Sanallaştıtılacak WinPC’de selfimage programını başlatıp, “Input” bölümünde “Harddisk (Entire disk)” seçip “Output” bölümünde “NBD” (Network Block Device) seçiniz  ve “Port” olarak “1024” giriniz. “Host” olarak ProxMox sunucunuzun adını ya da IP adresini giriniz.

selfimage

Ardından “Start” tıklayıp beklemeye başlayınız. Diskinizin büyüklüğüne ve ağ hızınıza bağlı olarak uzun saatler beklemek durumunda kalabilirsiniz.

SelfImage işini bitirdiğinde ProxMox sunucu konsolunda ^C ile qemu-nbd komutunu sonlandırıp sanal makinanızı çalıştırın. Ben bu işlemi Windows-7 bir fiziksel makina ile denediğimde sanal Windows-7 makina açıldığında bir dizi chkdsk işleminden sonra başarıyla açıldı.

WordPress vs. Web sitelerini korumak için…

Çok çeşitli içerik yönetim yazılımı var! (WordPress, Joomla, vs. vs.) Bunların da yüzlerce, belki binlerce eklentileri (plug-in) var.  Bunların hepsinin güvenli bir şekilde kullanılabileceğine inanmak sadece aşırı iyimserlik olur. Hatta, içlerinde arka kapı (back-door) yerleştirilmiş olanların bile olduğu söyleniyor-düşünülüyor-biliniyor .
Bu tip hazır paketlerin – ve daha önemlisi eklentilerinin en zayıf tarafı aralarında ziyaretçilerin siteye dosya yüklemelerine izin veren uygulamalar olmasıdır. Bu uygulama ve-veya eklentileri kullanırken çok çok dikkatli olunması gerekmekte; web dosyaları hiyerarşisi içine dosya yüklenmesine ve yüklenen dosyalara doğrudan URL ile (http://site.com/ gallery/resim.png gibi) erişim sağlayan eklentiler kesinlikle kullanılmamalıdır.
Gene de, ziyaretçilerin bir web sitesine yanlızca salt-oku erişimlerine izin vermek; yöneticilerin ise ancak belli IP adreslerinden siteye oku-yaz erişebilmelerini sağlamak güvenlik duvarını kalınlaştıracaktır.
Bunu yapabilmek için benim kullandığım yöntem özetle şu:

  • sunucuda web dizini, ikinci bir salt-oku dizine bağlanır (“mount” edilir)
  • apache web sunucusu standart 80 portu yanısıra  8080 portunu da dinler.
  • apache’de iki sanal sunucu tanımlıdır. Bunlardan biri web kök dizini olarak normal web kök dizinini, diğeri ise salt-oku bağlanmış web kök dizinini sunar. 80 portuna gelen istekler salt-oku dizini sunan sanal web sunucusu tarafından karşılanır; 8080 portuna gelen istekler ise oku-yaz olarak bağlanmış dizini sunan sanal web sunucu tarafından karşılanır.
  • iptables ile önceden belirlenmiş yönetim IP adres bloklarından gelen istekler 8080 portuna yönlendirilir. Diğer yerlerden gelen istekler 80 portunda bırakılır.

Bu çalışma koşullarını sağlayan konfigürasyon dosyalarına örnekler:
Sanal Sunucu Tanımları:

/etc/apache2/ports.conf

...
 Listen 139.179.39.104:8
 Listen 139.179.39.104:808
 NameVirtualHost 139.179.39.104:80
 NameVirtualHost 139.179.39.104:8080
...

/etc/rc.local

# iptables -t nat -A PREROUTING -s 139.179.0.0/16  \
           -p tcp --dport 80 -j DNAT --to 139.179.39.113:8080
# iptables -A INPUT ! -s 139.179.0.0/16 -p tcp --dport 8080 -j DROP
# mount --bind /var/www /var/wwwpublic
# mount -o remount,ro --bind /var/www /var/wwwpublic

/etc/apache2/sites-enabled/000-default

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/wwwpublic
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/wwwpublic/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
        . . .
</VirtualHost>

/etc/apache2/sites-enabled/private

<VirtualHost *:8080>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
        . . .
</VirtualHost>

Xen Sanal makina platformu hakkında

Citrix Xenserver platformunu kullanımındaki zorluklar nedeniyle terkettik! Şu meşhur uuid karmaşası ve GUI yönetimi için bir Windows makina gerektirmesini en önde gelen etkenler olarak sıralayabilirim. Tabi bir de yok edilen makinaların disklerinin hala ortalıkta kalması ve bunların hangi sanal diskler olduğunu bulmanın zorluğu da cabası…
BCC’deki ilk “production” Xen servisi hakkında dokümantasyondur.
xenserver

xencua

Platformun temeli xencua (xencua.bilkent.edu.tr: 139.179.39.2) sunucusu yatmaktadır. Bu makinada Citrix Xenserver yazılımı kullanılmaktadır. Kurulum Citrix sitesinden indirilen ISO’dan kurulumuş olup üzerinde Security Enhanced CentOS çalışmaktadır. Yönetim zorlukları nedeniyle SELinux etkinsizleştirilmiştir.

Sistem odasında yer alan bu makina 4 core AMD bir makinadır. 16 GB bellek ve  500GB + 3 TB 2 diski vardır. 500GB’lık disk sistem diski olarak 3 TB disk ise LVM disk havuzu olarak kullanılmaktadır.

xenserver ayarlarında bir değişiklik (xenserver eklenmesi vs.) gerekirse makinaya root olarak login olduktan sonra xsconsole komutuyla config yazılımı çalıştırılabilir.

Bu makinaya CentOS paketi yüklemek gerekirse “yum –enablerepo=base install xinetd rsync” benzeri bir komutla yüklenebilir.

xencenter

xenserver sunucusunun GUI ile yönetilmesini sağlayan yazılımın (xencenter) kurulu olduğu Windows bir makinadır (xencenter.bilkent.edu.tr: 139.179.16.53). xencenter, Xenserver yönetiminde yapılabilecek her iş için bir araç sunabilmekte; kolay kullanılır bir yazılımdır. Tek kötü tarafı bir Windows makinaya gereksinim oluşturması ve Wine tarafından desteklenmediği için bir lisans harcatmaktadır. Bu makina 139.179.14.152 üzerinde VBox altında çalışan sanal bir makina olup; RDP protokoluu destekleyen herhangi bir yazılımla erişilebilir. Linux için Debian paketlerinde yer alan Remotedesktop Client (Gnome frontend for rdesktop) tavsiye edilir. RDP kullanıcı adı ve şifresi Seyit bey’deki dosyada “xencua” başlığı altında saklanmaktadır.

Xencenter yazılımınının bir başka makinaya kurulması gerekirse, http://xencua.bilkent.edu.tr adresinden indirilebilir.

xvp

xvp.bilkent.edu.tr (139.179.39.107), üzerinde xencua’nin sınırlı da olsa web üzerinden yönetilmesini sağlayan yazılımın çalıştığı sanal bir makinadır.

xvpweb ile web üzerinden sanal makinalar üzerinde yapılabilecek işler şunlardır:

  • Sanal makinaları açıp kapatmak
  • Sanal makinaların konsoluna ya da masaüstüne erişmek (Oracle-SUN Java kurulu bir makinadan kullanmak kaydıyla; OpenJava kurulu makinalardan kullanılamaz)
  • Sanal makinaları kopyalamak, silmek (yok etmek)
  • Snapshot almak, silmek

Sanal makina yaratma, ISO’dan kurma, parametrelerini değiştirme gibi işlemler xencenter ile yapılmalıdır. xvpweb’in tek amacı, RDP olanağı olmadığı zamanlar web üzerinden bazı temel işleri yapılabilinmesini sağlamaktır.

xvp.bilkent.edu.tr sanal makinası xencua üzerindedir. xvpweb yazılımının http://www.xvpsource.org sitesinden “virtual Appliance” olarak indirilip modifiye edilmiş, bir kaç ek işlev eklenmiş hali çalışmaktadır. Erişim şifreleri  Seyit bey’deki dosyada “xencua” başlığı altında saklanmaktadır. İşletim sistemi CentOS 5.9’dur.

xvp ayarlarında bir değişiklik (xenserver eklenmesi vs.) gerekirse /usr/sbin/xvpappliance komutuyla config yazılımı çalıştırılabilir.

Bu makinaya CentOS paketi yüklemek gerekirse “yum –enablerepo=base install xinetd rsync” benzeri bir komutla yüklenebilir.

xeniso

xenserver ve xencenter, sanal makina kurulumunda kullanılacak ISO CD görüntülerinin bir NFS sunucu üstünde tutulmasını gerektirmektedir. Bu ISO dosyalar çok önemli olmadığı için ISO servisi için gereken NFS sunucu da xencua üzerinde bir sanal makina olarak çalışmaktadır.

xenISO kütüphanesine yeni bir ISO eklenmesi gerektiğinde xeniso.bilkent.edu.tr makinasında /opt/ISOfiles dizinine kopyalanması yeterlidir. (Şifreler Seyit bey’de).

heybe2

BCC’nin büyük disk SmartOS sunucularından birisidir (heybe2.bcc.bilkent.edu.tr) ve bu makinada xencua’dan root yetkileriyle mount edilip kullanılabilecek xencua_vm_backups isimli bir nfs export bulunmaktadır. xencua’da çalışan cron scriptleri, xencua’da tanımlı sanal makinaları bu disk alanına periyodik olarak yedekler. Adında “-NOBUP” dizisi geçen sanal makinalar  yedeklenmez.

backup

BCC’nin genel yedekleme makinasıdır (backup.bcc.bilkent.edu.tr). backup makinasındaki incremental-rsync scripti ile xencua makinasının sistem diski periyodik olarak yedeklenir.