10 Şubat 2018 Cumartesi

Vmware Workstation İçinde Vmware ESXi Lab #3


Bir önceki yazıda hostları ekleyip vCenter'ı sanal makina oluşturulabilir duruma getirmiş ama sanal makina oluşturmamıştım. Sanal makinalarla çalışmaya başlamadan önce altyapıyı düzgün ve etkin çalışır duruma getirmek için yapılması gereken işler var. Birinci olarak iSCSI'yle paylaşımlı bir disk eklenmeli. Sonra FT (Fault Tolerance) ve diğer ağların ayarlanması gerekiyor. Sonra sanal makinaları kurup vCenter'daki bazı özellikleri göstereceğim.

Bölümlerin konu başlıkları şöyle:
1. Bölüm: ESXi Hostların ve Windows Şablonunun Kurulumu
2. Bölüm: DC ve vCenter Kurulumu. Datacenter, Cluster ve Host Eklemek
3. Bölüm: Disk ve Ağların Eklenmesi. Sanal makinalar, Migration, Fault Tolerance

Disklerin Bağlanması ve Ayarlanması
vCenter makinası kurulurken NAT'a bağlı bir ağ kartı eklemiştim. Bu adımda internet gerekecek. Bu yüzden kartın bağlı olup olmadığını kontrol edip (Virt. machine settings -> Network Adapter 3 (NAT) -> Device Status) değilse "Connected"i işaretleyip bağlayın. Ve elbette fiziksel makinanın internete çıktığına emin olun.

Öncelikle vCenter makinasına Chrome kurdum (Mozilla da olur). İlk yazıda söz ettiğim ESXi web arayüzüne girmek için adres satırına https://esxi5-01.lab.local/ yazdım. Sertifika hatasını Advanced -> Proceed to ... 'ya basıp geçtim. ESXi hostta bulunan bir sayfa açıldı. Buradaki bağlantılardan vSphere istemcisi veya vCenter indirilebilir (vmware'in sayfasından) ve bağlı disklerin (datastore) içeriğine bakılabilir. İlk sanal makinayı oluşturduktan sonra bu konuya döneceğim.

Her iki ESXi hostun paylaşımlı bir disk görmesi gerek. Sanal makinayı başka bir hosta taşırken hedef host, sanal makinanın disk dosyalarını (vmdk), donanım özelliklerini tutan vmx dosyasını ve swap dosyasını göremiyorsa makinayı taşıyamaz. "Migration" özelliğini kullanmak için paylaşımlı disklerin taşıma yapılacak makinalarca görülmesi gerekir. Vmware, paylaşımlı disk olarak NFS, iSCSI ve Fibrechannel (FC) SAN'i destekler. NFS, üretim ortamlarında kullanmak için yavaş kalır. FC, yüksek performanslı bir çözümdür ama altyapı yatırımı gerektirir. Labda ele almak için FC emülasyonu yapan bir program bilmiyorum. iSCSI, mevcut ethernet altyapısı üzerinden (tercihen 10G) FC'ymiş gibi disk paylaşımına olanak sağlar ve fakirin FC'si olarak bilinir. Labda, iSCSI yazılımıyla diskler kolayca paylaştırılır. VMware Workstation'a yeni bir sanal makina eklememek için depolama sunucusu olarak vCenter makinasını ve iSCSI yazılımı olarak Starwind Virtual SAN'i kullandım. Bu yazılım, https://www.starwindsoftware.com/starwind-virtual-san adresinden indirilebilir. Yazılımın olumsuz yönü, indirmek için bir eposta adresi girilmesini istemesi. Bu epostayla, kurulum dosyalarını indirmek için bir bağlantı ve deneme lisansı gönderiliyor.

10 GB Thick provision disk
Dosyayı vcenter makinasına indirdim. Eğer kazara fiziksel makinaya indirdiyseniz; sanal makinayla fiziksel makina arası dosya paylaşımı için yöntemler var ama vcenter makinası internete bağlı olduğundan wetransfer kullanmak bence en pratiği.

vcenter makinasını kurarken iSCSI için bir arabirim ekleyip buna IP vermiştim. Bu adımda iSCSI'yle sunmak üzere bir disk ekleyeceğim. Makalede disk 10 GB "thick provision" olarak belirtilmiş. Eğer fiziksel makinanın diskinde yer sıkıntısı varsa "thin" olabilir ama labda sanal makina yavaş kurulacaktır. Yer sıkıntısı yoksa 10 GB ile sınırlı kalmadan disk eklenebilir.


Disk eklemek için sanal makinanın özelliklerinden; Add -> Hard Disk (Next) -> SCSI (Next) -> "Create a new virtual disk" (Next) adımlarını izledim. Seçtiğim ayarlar yukarıda görülüyor. Bu ekrandan sonra Next ve Finish'e basınca vmdk dosyayı diskte oluşturmaya başlayacak. 10 GB'lik bir dosya oluşturmak bir dakika kadar sürebilir. Eklenen yeni disk yanda "Preallocated" olarak görünüyor. Tamama basınca disk eklenecek. Bunun için makinayı kapatmaya gerek yok.

Starwind kurulumundan önce yapılması gereken birşey daha var: .Net Core runtime dosyalarının kurulumu. https://www.microsoft.com/net/downloads/windows adresinden "x64 Installer (.exe)"ye ait Runtime kurulumunu seçip (dotnet-runtime-2.0.4-win-x64.exe) kurdum. Starwind'ı kurmadan önce lisans anahtarını zip dosyasından çıkarttım. Kurulum dosyasının adı starwind-v8.exe. Bunu çalıştırınca standart bir windows uygulama kurulumu gerçekleşiyor (Next -> Anlaşmayı kabul et -> Kurulum dizinini seç -> bir takım Next'ler daha -> Finish). Lisans anahtarı adımında "Thank you, I do have a key already"i seçip anahtarı gösterdim. Kurulumun bundan sonrası biraz karışık. Sihirbaz önce bir dll'le ilgili uyarı verdi. Uyarıya tamam dedim ve kurulum devam etti. "Installing Microsoft .NET Core" adımında bir süre bekledi ve kurulamadığında dair hata verdi, "Back" ve tekrar "Next"e bastığımda ikinci denememde kuruldu. Diğer yandan başka bir kurulumda yalnız dll uyarısını verdi ama sorunsuz kuruldu. Kurulum sırasında NAT arabiriminde bazı hareketler vardı. Anladığım kadarıyla internetten bazı dosyaları indirmeye çalışıyor ama yavaşlıktan birinci denemede zaman aşımına uğruyor. İkinci denemede muhtemelen DNS cache'den dolayı bağlantı hızlanınca tekrar zaman aşımına uğramıyor. Kurulumu bitirip Starwind'ın yönetim konsolunu açtım.

Program açılırken "Storage pool is not configured!" uyarısıyla açılıyor. Bunu 'Yes' diyip geçtim. Ana ekranda 127.0.0.1 sunucusuna sağ tıklayıp "Remove Server"a bastım. Sonra yukarıdan "Add Server"a basıp 10.10.3.1 IP'li bir sunucu ekledim (yanda). Üstüne çift tıklayıp sunucuya bağlandım. Sunucuya bağlanınca bununla ilgili ayarlar görülüyor.

Starwind'de yeni target eklemek
Sağdaki "Add Target" bağlantısına bastım. "Target Alias" olarak "starwind" verdim (sağda). Target'a birden çok sunucunun bağlanabilmesi için (ESXi hostlar) "Allow multiple concurrent iSCSI connections" seçeneği işaretli olmalı. Next ve Create'a basıp bir "target" oluşturdum. Target, iSCSI terminolojisindeki sunucu olarak düşünülebilir.

Solda "starwind" target'ı aktifken sağda "Devices"ın yanında bulunan "Add Device" bağlantısına bastım. "Hard Disk Device" ve sonra "Physical Disk" seçtim. Çıkan pencerede "Device Address" bölümünde 2,0,1,0 olarak görünen ikinci diski seçmek gerekiyor. Next -> Next -> Create diyince 10 GB'lik bir disk 'target'a eklenmiş olacak. Makalede iSCSI olarak fiziksel disk verilmemiş. İkinci disk bölümlendirilip içindeki bir imaj dosyası verilmiş. Ben kendi yöntemimi daha pratik buluyorum.


vCenter'a dönüp, ESXi5-01 hostuna bastım (sağda 1). Sağ tarafta Configuration'ı seçtim (2). Hardware altında "Storage Adapters"a bastım (3) ve listede boş bir yere sağ tıklayıp "Add Software iSCSI Adapter" dedim (4).




Çıkan uyarıya tamam dedikten sonra bir "iSCSI Software Adapter" oluştu (genelde vmhba33). Buna sağ tıklayıp "Properties"e basınca gelen pencerede (aşağıda) "Dynamic Discovery"i seçtim (1) ve "Add"e bastım (2). iSCSI server olarak 10.10.3.1 (3) girip tamama (4) ve sonra "Close"a bastım (5).

vSphere'de depolama sunucusunun eklenmesi

iSCSI taraması
"Close"a basınca yandaki mesaj kutusu çıkacak. Buna hayır dedim çünkü henüz iSCSI için hangi kartları kullanacağını ayarlamadım. Sonra aynı işlemleri ESXi5-02'de tekrarladım ve ilk hosta geri döndüm. Şimdi iSCSI için kullanılacak ağ kartlarını ayarlamam gerek.



Önce hostun "Configuration" sekmesine (yukarıda 1) gidip "Networking"i seçtim (2). "Add Networking"e basıp (3) "VMkernel"i seçtim (4) ve Next'e bastım. ESXi hostlardaki vmnic2 ve vmnic3 iSCSI için ayrılmıştı, bu nedenle her ikisini de seçtim (sağda). Bunu yapmakla her iki kartı birleştirerek kullanıyorum. 


Next'e basıp "Network Label"a iSCSI1 verdim (yukarıda). Tekrar "Next"e bastım.



Bu Vmkernel arabirimine 10.10.3.11 IP'sini ve 255.255.255.0 ağ maskesini atadım (yukarıda). Tamama bastığımda vSwitch1 içerisinde iSCSI1 portu oluştu. Aynı adımları uygulayıp bir VMkernel daha ekledim ama ağ kartı olarak daha önce vSwitch1'de grupladığım vmnic'leri kullandım. Bu yüzden ikinci adımda "Use vSwitch1"i seçtim. "Network Label" iSCSI2, IP: 10.10.3.12 ve ağ maskesi 255.255.255.0 atadım. Bu tamamlandığında sağ üstteki gibi görünmeli. Bundan sonraki adımda kartların önceliklerini ayarlamak için vSwitch1'in yanındaki "Properties"e bastım (sağ üst).


İlk çıkan pencerede iSCSI1'e çift tıkladım (sağda 1). Açılan pencerede "NIC Teaming" sekmesine gidip (2) "Override switch failover order"ı işaretledim (3). Sonra vmnic3'ü seçip (4) "Move Down"a basarak "Unused Adapters" bölümüne indirdim (5) ve tamama bastım. Aynısını iSCSI2 için de tekrarladım ama bu kez vmnic3'ü değil vmnic2'yi "Unused Adapters" bölümüne gönderdim (solda). Kapata basıp çıktım.


"Configuration" sekmesinde "Storage Adapters"a geri dönüp vmhba33'e sağ tıkladım ve "Properties"i seçtim. "Network Configuration" sekmesinde (sağda 1) "Add"e basıp (2) çıkan pencerede iSCSI1'i seçtim (3) ve tamama bastım (4). Sonra aynı şekilde "Add"a basıp iSCSI2'yi de ekledim, kapata bastım. "iSCSI taraması" altbaşlıklı görseldeki mesaj kutusu çıktı. Artık kartlar eklendiğinden evete bastım. vCenter makinasında oluşturulan target bulundu. Bu adımda target bulunamıyorsa ESXi'nin firewall'undan iSCSI portlarını açmak gerekebilir (bende gerekmedi). "Configuration" sekmesinin alt bölümündeki "Software" listesinden "Security Profile"a (aşağıda 1) basınca, servislerin ve firewall kurallarının yönetildiği ekran gelir. Portları açmak için firewall bölümünde "Properties"e basıp, listede "Software iSCSI Client"ı (2) seçmek ve tamama basmak yeterli. Bu tüm hostlarda yapılmalı.

Firewall'dan iSCSI portlarının açılması

Paylaşılan diski görmek için "vmhba33"e basınca, altta "Details"in altında (bölümlerin boyutlarını biraz kaydırmak gerekebilir) 10 GB'lik bir VMware iSCSI disk görülüyor ve host bu diski iki path'den görüyor. Bu şu demek; path'lerden biri vmnic2'den diğeri vmnic3'ten geliyor.


Aynı anda Starwind yönetim konsoluna gittiğimde ('system tray'deki mavi ikona çift tıklayınca açılan) bu target'a oturum açan initiator'lar* da göründü.


* Initator: iSCSI terminolojisinde istemciye ve iqn ile başlayan tanımlara verilen isimdir. iSCSI dünyasındaki MAC adresi gibi düşünülebilir. FC dünyasında buna karşılık WWN/WWP'lerden oluşan WWID'ler bulunur (sırasıyla world wide node (name), world wide port (name), world wide ID).

VMkernel arabirimlerinin eklenmesi ve kartların önceliklendirilmesini ikinci ESXi host için de tekrarlamak gerekiyor. Özet prosedür:
- ESXi05-02 -> Configuration -> Networking -> Add VMkernel (iki kere)
Not: İkinci hostta iSCSI1 için 10.10.3.21/255.255.255.0 ve iSCSI2 için 10.10.3.22/255.255.255.0 kullanılacak.
- vSwitch1 Properties -> (iSCSI1 -> NIC Teaming -> vmnic3 unused) + (iSCSI2 -> NIC Teaming -> vmnic2 unused)
- Storage Adapters -> vmhba33 Properties -> Network Conf. -> Add iSCSI1 + Add iSCSI2

Starwind yönetim konsolunda "target"ı gören iki "initiator" daha gelmiş olmalı.



Makinaları diski görecek şekilde ayarladım ama "datastore" olarak vCenter'a eklemedim. Bunun için herhangi bir hostun "Configuration" sekmesine geçtim. "Hardware" altında "Storage"a basıp önce "Rescan All"a bastım (yukarıda). Bu senaryoda "Rescan all" gerekli değil çünkü kartlar eklenince tarama yapıldı ve disk bulundu. Ben alışkanlık olarak bu işlemi her disk eklemeden önce yapıyorum. Sonra "Add Storage..."a bastım (yanda 1). Disk ekleme sihirbazı gayet kolay. Birden fazla disk eklenmeyecekse yalnızca diske bir ad vererek tamamlanıyor. "Next"e bastıktan sonra "Disk/LUN"u seçtim, tarama sonucu bulunan diskler listelendi. Zaten tek disk var, onu seçtim. Sonraki adımda disk formatını VMFS-5 olarak bıraktım. Diske "sharedstorage" adını verdim, "Maximum available space"i seçili bıraktım ve Next'e basıp sihirbazı tamamladım.


ESXi hostların her ikisi de "Storage" bölümünde "sharedstorage" diskini görüyor olmalı (yukarıda). Böylelikle disk konusu tamamlandı.


vMotion, Fault Tolerance ve VM Ağlarının Eklenmesi
Önceki yazıda ESXi hostları vCenter'a eklerken bir tanesinde sorun yaşadığım için ağ kartlarından birini bond dışında bırakmıştım. Bu bölümde, yapılacak işlemin iki host için farklılık gösterdiği yerleri vurgulayacağım.


vSwitch0 Properties
Birinci hostta durum yukarıdaki gibiydi. Görseldeki "vSwitch0"ın "Properties"ine bastım. "VM Network"ü seçip "Remove"a bastım ve çıkan "emin misiniz?" mesajına evet dedim. Malum, en başta vmnic0 veya vmnic1'i "VM Network" için ayırmamıştım. Aynı pencerede "Add"e bastım, "Connection Type" olarak "VMkernel" seçtim. Bu ağ için "Network Label"a vMotion verdim ve "Use this port group for vMotion"ı işaretledim (aşağıda).




Bu ağda kullanılacak IP ve ağ maskesi ilk makina için 10.10.5.1/255.255.255.0 olacak.

vMotion ağı eklendikten sonra "vSwitch0 Properties" penceresini kapatmadım (aynı adlı görsel). Önce vMotion'ı çift tıkladım, açılan pencerede "NIC Teaming" sekmesine gelip "Override switch failover order:"ı işaretledim. vMotion ağında vmnic1'i aktif, vmnic0'ı "standby" olarak ayarladım (aşağıda). Sonra "Security" sekmesine gidip "Promiscuous Mode"u ve "Forged Transmits"i işaretledim ve her ikisini de "Accept"e çektim.


Tamama basıp "vSwitch0 Properties"e döndüm. Bu sefer "Management Network"e çift tıkladım. "vMotion" ağı eklendikten sonra artık "Management Network"ün özelliklerinde "vMotion" özelliğinin "Enabled" olmaması gerekir. Bunu kontrol ettikten sonra "NIC Teaming" sekmesine geçtim, "Override switch failover order:" işaretledim (daha önceden işaretli olabilir). "Management" için vmnic0'ı aktif, vmnic1'i standby olarak ayarladım ('unused' değil). "Security" sekmesinde "Promiscuous Mode"u ve "Forged Transmits"i burada da işaretleyip her ikisini "Accept"e çektim. Tekrar tamama bastım.

esxi5-02 hostundaki durum


İkinci hostta durum yukarıdaki gibiydi çünkü önceki yazıda bağlantı sorunu nedeniyle vmnic1'i bond'dan çıkarmıştım. vSwitch0'ın "Properties"ine bastım ve "Management Network"e çift tıkladım. Burada diğer hostta yapılandan farklı olarak önce "Security" sekmesine gidip "Promiscuous Mode"u ve "Forged Transmits"i açtım, her ikisini de "Accept"e çektim ve tamama bastım. "vSwitch0 Properties" penceresinde önce "Network Adapters" (sağ üstte 1) sekmesinde "Add"a (2) basıp vmnic1'i ekledim (3), sonraki adımda (4) vmnic1'i "Standby"a indirdim ve tamama bastım. Bir hata mesajı verdiyse de vmnic1 eklendi. Tekrar "Ports" sekmesine geçtim. "VM Network"ü sildim (Remove düğmesine bastım). "Management Network"e çift tıkladım, açılan pencerede "NIC Teaming" sekmesine geçtim. vmnic0'ı aktif, vmnic1'i standby olarak ayarladım ve tamama bastım. Sonra ilk hostta yaptığım gibi "Add"e basıp vMotion için bir VMkernel bağlantısı ekledim. Bu arabirimin IP'si ve ağ maskesi 10.10.5.2/255.255.255.0 olmalı. vMotion'ın özelliklerinden "Security" ve "NIC Teaming" sekmelerindeki ayarları diğer ESXi host ile aynı olacak şekilde değiştirdim.


Peki Neden Promisc Mode ve Forged Transmits Açıldı?
Bu önemli bir konu, bu nedenle bunu özellikle ayrı bir başlıkta ele almak gerek. Blogu yazarken bir yandan bu sorunu araştırıyordum. Benimle birebir aynı durumda (Nested ESXi) aynı sorunu yaşayan birinin gönderisini buldum: https://community.spiceworks.com/topic/524798-host-disconnecting-from-vcenter-while-migrating-kernal-port-to-new-switch

Gönderideki bence en önemli ifade, ESXi'nin sanallaştırılmasının kesinlikle tavsiye edilmediği ve sanallaştırılıyorsa kesinlikle üretim ortamında kullanılmaması gerektiği yanıtı. Soruyu soranın kendine verdiği yanıtta (üçüncü) konuyla ilgili başka bir blog yazısının bağlantısını paylaşmış:

Yazıda vmware'in kullandığı network switch altyapısının fiziksel switch'ler gibi çalışmadığına değinilmiş. Bu son derece mantıklı; fiziksel switch, portlardan gelen "frame"lerin kaynak MAC adreslerini ilgili portun MAC adres tablosuna yazar. Yani, o porta o MAC adresine sahip cihazın bağlı olduğunu "öğrenir". Switch'e bir frame geldiğinde, hedef MAC adresine bakılır. Hedef MAC adresi switch'in MAC adres tablosunda varsa söz konusu frame, o (öğrenilen) porttan gönderilir. Ancak sanal ortamda bu gereksizdir. MAC adreslerini sanal makinalara VMware atadığından, zaten veritabanında bütün MAC'lerin hangi vSwitch'e gitmesi gerektiğini bilir. Sanallaştırılmış bir ESXi host, fiziksel bir switch'e bağlı olmadığını bilemez. Bu yüzden promisc modda çalışmazsa diğer sanal makinaların MAC'lerini bilemez ve drop eder. 

Bu yazıdaki bağlantılardan atlayarak aşağıdaki kaynaklara ulaştım:
Yukarıdaki kaynakta sanallaştırılmış ve promisc modda çalışan bir ESXi'nin fiziksel ESXi'lerin oluğu bir ortamda ağ performansını olumsuz etkilediği anlatılıyor. 


Ara başlığı kapatıp network konusuna geri döneyim. 

ESXi hostları kurduğum ilk yazıda, vmnic0 ile vmnic1'i (vmnic1 yönetim ağına bağlı olmadığı halde) birlikte seçmemin nedenini anlatacağımı söylemiştim. İlk başta tek vmnic'le kurduğum ikinci host şu anda "Summary" sekmesinde şu uyarıyı alıyor: "This host currently has no management network redundancy". Yani vCenter, ESXi hostların yönetim trafiğini en az iki noktadan gönderebilmek istiyor ki biri kesildiğinde host hala yönetilebiliyor olsun. Yönetim trafiği için fiziksel makinada Vmnet2 ağını oluşturmuştuk. Elbette ki burada tek bir switch olduğundan yedeklilikten (redundancy) bahsedilemez. Ancak hem vmnic0'ı hem vmnic1'i aynı switch'te birleştirip birini aktif diğerini "standby" olarak ayarlamakla bir bakıma vCenter kandırılmış oluyor. 


Bu ayar yapıldığı halde uyarı alan bir host varsa "Maintenance mod"a alıp geri döndürünce düzelmesi gerekir. Host, sağ tıklayınca gelen menüde "Enter Maintenance Mode"a basılarak bu moda alınır. "Maintenance mode", ESXi'nin üzerinde çalıştığı makinada çalışma yapılacağı zaman kullanılır. Bu moda girince, hosttaki sanal makinalar kümedeki diğer hostlara taşınır. Sonrasında makina sorunsuz kapatılabilir veya yeniden başlatılabilir. Ben yeniden başlatmadan "maintenance mode"a alıp geri döndürdüm ve yönetim arayüzüyle ilgili aldığım uyarı kayboldu. 



Hostun "Configuration" sekmesinde "Networking"e geri döndüm. Yeni bir vSwitch daha oluşturmak üzere "Add Networking"e bastım; "VMkernel"ı ve sonrasında vmnic4'ü seçtim. "Network Label" FT olmalı (sağda) ve "Use this port group for Fault Tolerance logging" işaretli olmalı. Bu arabirime birinci makinada 10.10.4.1/255.255.255.0 IP ve ağ maskesini verdim. Aynısını ikinci makinada tekrarlayıp IP'yi 10.10.4.2 olarak ayarladım. Bu arada FT için de "promisc mod" ve "forged transmits" açmak gerekiyor.


Tüm hostlarda, son bir vSwitch daha oluşturulmalı. "Add Networking"e basıp "Connection Types"da "Virtual Machine" seçtim. Bir tek vmnic5 kullanılmamıştı, onu seçtim. Bu ağın adının ne olduğu önemsiz. Hiç bir ayarı değiştirmeden sihirbazı tamamladım. Bu vSwitch'te de "promisc mod" ve "forged transmits"i açtım.


Bu ağ, sanal makinaların bağlanacağı ve aralarındaki trafiğin akacağı vSwitch. Normalde, üretim ortamında bundan birden fazla olacaktır çünkü farklı görevleri olan veya farklı kişilere ait makinaların hepsini tek bir ağa koymak güvenli olmaz. Ayrım iki farklı şekilde yapılabilir. (a) Farklı fiziksel switch'lerle veya (b) aynı switch'teki farklı VLAN'lerle. "Vmware network editor"le trunk portu olan switch oluşturamadığımdan (Ek okuma: trunk port ve access port nedir?) VLAN ID'yi boş bıraktım. Fiziksel makinamda bir tane daha Vmnet oluşturup, ESXi'lerde de bir ağ kartı daha ekler ve bu kartı yeni Vmnet'e bağlayarak fiziksel ayrım yapabilirdim (a). İkinci olasılık, trunk portum olsaydı aynı vSwitch üzerinde farklı VLAN ID ve adla bir arabirim eklersem bunu VLAN'lerle yapmış olurdum (b).

vCenter'in yönetim ağında yedeklilik olmadığında uyarı verdiğini söylemiştim. Eğer yönetim ağı sanal makinaların kullandığı ağdan fiziksel olarak farklıysa, yönetim ağındaki kesinti ESXi hosta ulaşılamamasına neden olur ama sanal makinalar çalışmaya devam eder ve erişilebilir durumdadırlar. Sanal makina ağında oluşacak bir kesinti o hosttaki sanal makinalara ulaşılamamasına neden olur ki üretim ortamında aslında daha ciddi sonuçları olacaktır. Bu nedenle yönetim ağından çok sanal makina ağında yedeklilik önemlidir.


LDAP Kullanıcısı Ekleme ve vCenter'da Yetkilendirme
vCenter makinası lab.local domaininde olduğu için vCenter sunucusu da lab.local domain'iniyle tümleşik çalışır. Yani herhangi bir ek ayar yapılmaksızın lab.local domain'indeki tüm kullanıcılar vCenter'da yetkilendirilebilir. Domain'de kullanıcı eklemek için DC makinasının konsoluna geçtim. Başlat menüsünde "All Programs -> Administrative Tools -> Active Directory Users and Computers"i açtım (kısayoldan Başlat -> Çalıştır -> dsa.msc). lab.local domain'ini açıp "Users"a bastım. Sağda varolan kullanıcılar ve gruplar listelenecek. Makina yeni kurulduğu için kullanıcıdan çok grup var. Boş bir yere sağ tıklayıp New -> User'i seçtim (sağ üstte). Yeni kullanıcı eklerken "First name" ve "Last name"in önemi yok. Bu alanlar daha çok açıklama için ama kullanıcılar bu ada göre listelendiğinden açıklayıcı adlar kullanmak gerekiyor. "User logon name" asıl kullanıcı adı olacak. Bunları doldurup Next'e bastım. Sonraki adımda bir şifre verdim ve "Password never expires"a bastım. Bu, "User must change..." ayarıyla çakıştığından bir hata mesajı görünecek ve o ayarın işareti kaldırılacak. Next ve sonra Finish'e basınca yeni kullanıcı oluşturuldu. Bu kullanıcı domain'deki bütün makinalara girebilir. İstenirse kullanıcıya sağ tıklayıp "Properties" açılır ve "Member Of" sekmesinde grup eklenerek yetkisi genişletilebilir. Şu anda buna ihtiyacım yok. Pencereyi kapatıp vCenter makinasına geri döndüm.


Kullanıcı, vCenter makinasına LAB\<kullanıcı_adı> olarak şifresiyle girebilir ama henüz vSphere'e yetkilendirilmedi. Web arayüzünden bağlanabilir ama değişiklik yapamaz. Kullanıcıyı yetkilendirmek için vSphere istemcisini yönetici hesabıyla açtım. İstemcinin üst satırında "Home -> Inventory -> Hosts and Clusters" (1) seçili olmalı. Aşağıda soldaki "vcenter.lab.local"e bastım (2) ve sağda "Permissions" sekmesine geçtim (3). Sağda boş bir yere (4) sağ tıklayıp "Add Permission"ı seçtim. Çıkan pencerede kullanıcı eklemek için "Add"e bastım (5) ve LAB domainini seçtim (6). Bu seçilince vCenter, DC ile konuşup kullanıcıları listeleyecek. Kullanıcıyı seçtim (7), "Add"e (8) ve sonra OK'e basınca kullanıcı eklendi. Sağ tarafta "Assigned Role" olarak "Administrator" verdim (10) ve tamama bastığımda kullanıcı artık bu vCenter'a bağlanmaya yetkilendirilmiş oldu. Ayrı bir istemci açıp bu kullanıcıyla bağlanabildim. Kullanıcının yönetici yetkisi olduğundan bundan sonraki bölümde anlatılacaklar bu kullanıcıyla yapılabilir ama ben yazıyı hazırlarken Administrator'u kullanmaya devam ettim.


Sanal Makina Kurulumu, Taşınması ve FT
Makaledeki örnekte bir XP makina kurulmuş ama XP'nin iso'su biraz büyük olduğundan ben CentOS 6.9 minimal tercih ettim. Kurulum için iki yol var, biri vCenter makinasının diskini büyüteceğinden kısaca söz edeceğim. CentOS 7.x serisi yalnızca x86_64 olduğundan makina taşırken sorun çıkarmaz ama FT'de sorun çıkaracaktır. CentOS netinstall dağıtımının kalıp dosyası daha küçük olduğu halde VM ağında internet olmayacağından kurulamayacaktır. Sanal makinada, damn small linux (DSL) gibi bir dağıtım kullanılabilir ancak sanal makinanın diski de olsun istiyorum.

Anlatacağım ama uygulamayacağım yöntem, kalıp dosyasını vCenter makinasına indirip sanal makinaya dosyayı doğrudan (konsoldan) veya datastore'lardan birine kopyalayıp datastore'dan göstermek. Bunu uygulamak pratik değil.


Dosyayı fiziksel makinama indirdim. Makina taşıma için x86_64 veya i386 olmasının önemi yok ama FT özelliği için sanal makina i386 olmalı. Ben bu örnekte x86_64 kurdum. Sonraki örnekte bunları silip başka makina kuracağım. Kalıp dosyasını 'VMware Workstation'dan vCenter makinasına taktım. Daha önce vSphere kurulumu için de yapılmıştı bu yüzden ayrıntısına girmiyorum. Birinci ESXi hosta sağ tıkladım ve "New Virtual Machine"i seçtim. "Configuration"da "Typical"ı seçili bıraktım. Sanal makinaya "Centos" adını verdim. Sonraki adımda makinanın hangi diskte kurulacağını soruyor. Burada "sharedstorage"ı seçtim. ESXi kurulurken, makinanın "datastore" olarak kullanabileceği ikinci diski olup olmadığını kontrol eder. Eğer başka disk yoksa diski ikiye böler ve ikinci bölümü "datastore" olarak formatlar. Listedeki iki "datastore" o şekilde oluşturulmuş yerel disklerde. Bir makina, diğerinin üzerindeki (paylaşımsız) diski göremez. Paylaşımlı diski bu yüzden eklemiştim. "Guest Operating System" Linux ve sürüm RedHat Enterprise Linux 6 (64-bit) olmalı. Sonraki adımda makinanın kaç ağ kartı olacağı seçiliyor. Olduğu gibi bırakıp geçtim. Disk olarak "Thin Provision" seçtim. Datastore toplamda 10 GB (bende 8.9 GB'ı boş) ve sanal disk 16 GB olduğundan "Thick Provision" seçilemez. Makinanın diskinin Thin seçildiği ve kurulacağı datastore'dan büyük olduğuna dair bir uyarı alınacak. Buna tamam diyip sihirbazı tamamladım ve sanal makina oluştu.

Sağ tuş menüsü


Sanal makinaya sağ tıklayıp "Edit Settings..." seçilerek özelliklerine göz atılabilir. Burada herhangi bir değişiklik yapmadım. Bunun yerine "Open Console" diyerek makinanın konsolunu açtım ve yeşil üçgene basıp makinayı başlattım (sağ üstte 1). Sonra sağ taraftaki CD simgesine basıp D: sürücüsünü sanal makinaya CD olarak tanıttım (2). Açılır açılmaz CD bulamadığından PXE boot'a geçti. VM (3) menüsünden Guest -> "Send Ctrl + Alt +Del" diyip makinayı yeniden başlattım ve "Install..."ı (ilk seçenek) seçtiğimde CentOS kurulumu başladı. İlk adımda "Skip"i seçtim. Altyapıyı denemek için basit bir sanal makina gerekli, fazla birşey kurmayacağım. Yalnızca klavyeyi ve saat dilimini seçtim, root şifresini verip başka birşeye dokunmadan kurulumu tamamladım. Kurulum bitince D: sürücüsüyle sanal makinanın bağlantısını kestim.

Deneme için ikinci bir sanal makina daha gerekli. 'Centos'a sağ tıklayıp Clone'u seçtim. Klonlanacak makinaya Centos2 adını verdim, sonraki adımda DC-Lab altında Prod kümesini seçtim. Makinayı "sharedstorage" diskine koydum ve klonlamayı başlattım, bitince de sanal makinayı açtım. Her iki makinanın konsolundan bağlandım ve "ifconfig -a" çıktısına baktım. Birincisinde eth0 ikincisinde eth1 var çünkü kurulum birincisinde yapıldı ve ikincisi klon olduğundan birincinin aynısını bir /etc/udev/rules.d/70-persistent-net.rules dosyası var. Bu dosya MAC-eth eşleştirmelerini tutar. Centos2'nin ağ kartına, klon alırken yeni bir MAC adresi atandı. İşletim sistemi açılışta eth0'a ait geçersiz bir kayıt gördü, bunun sökülmüş bir kart olduğunu düşünüp yeni MAC adresli karta eth1 adını verdi. Bu çok önemli değil. Sanal makinalarda aşağıdaki komutları çalıştırıp IP verdim:

Centos : ifconfig eth0 up 172.16.0.1 netmask 255.255.255.0
Centos2: ifconfig eth1 up 172.16.0.2 netmask 255.255.255.0

Artık herhangi bir makinadan diğeri ping'lenebiliyor (ping -c 3 172.16.0.1).



İpucu: vCenter makinası 1024x768'de çalışıyor ve tam ekran yapmak istemedim. Ama CentOS konsolu masaüstüne sığmadı (yukarıda). Bunu ekrana sığdırmak için /boot/grub/grub.conf dosyasını açtım. kernel'la başlayan satırın sonuna vmwgfx.enable_fbdev=0 video=640x480 ekleyip dosyayı kaydettim. Makinaları yeniden başlattığımda sonuç yandaki gibiydi.

IP'leri kalıcı vermediğimden makinalar açıldıktan sonra IP'lerini tekrar verdim. Yukarıdaki ekran görüntüsünde konsolun başlığına dikkat çekmek istiyorum. Centos "esxi5-01.lab.local"de Centos2 "esxi5-02.lab.local"de çalışıyor. IP'leri verdikten sonra Centos2'den Centos'u ping'lemeye başladım (ping 172.16.0.1). Diğer yandan Centos makinasının konsolunu kapatıp vSphere'e döndüm. Centos makinasına sağ tıklayıp "Migrate"i seçtim (sağ tuş menüsü altbaşlıklı görselde "Edit Settings"in altında). İlk adımda "Change Host"u seçip ikinci adımda Centos makinasının çalışmadığı hostu seçtim. "Compatibility: Validation succeeded" yazınca Next'e bastım, "High-priority"i seçili bırakarak sihirbazı tamamladığımda Centos makinası çalıştığı "esxi5-01.lab.local" makinasından "esxi5-02.lab.local" makinasına taşınmaya başladı.


Bu sırada Centos2'nin konsoluna döndüğümde ping'lerin uzun sürse de devam ettiğini, ciddi bir kayıp yaşanmadığını gördüm. Canlı taşıma (migration) özelliği ilk yazıda da bahsettiğim, vCenter'ın güzel özelliklerinden. Taşıma bitip konsolda CTRL+C ile ping'i kestiğimde en fazla 7891ms'lik ping yanıtı görünüyordu ve 500'e yakın paketten yalnızca üçü kaybolmuştu. Bu normalde kabul edilemeyecek bir süre ancak fiziksel makina donanım sınırlarında çalıştığından lab ortamı için normal sayılabilir. Taşıma üç dakika civarında sürdü. İlgi çekici diğer bir nokta da, bir önceki yazıda kümeyi oluştururken DRS özelliğini açmıştım. DRS'in açılımı Dynamic Resource Scheduler yani kaynakların olabildiğince dengeli kullanılmasını sağlayan bir servis. Makina taşındıktan otuz saniye sonra DRS makinayı boşta duran hosta geri taşıdı (yukarıda, recent tasks bölümünde). Bir makina açılırken DRS devreye girer ve kaynağı en uygun hostu seçer. Bir makina kapandığında DRS boşalan kaynağa başka makinaları taşıyıp yükü dengeler. DRS'le ilgili ayarlar için "cluster"a sağ tıklayıp çıkan menüde "Edit Settings"i seçmek gerekiyor. "Cluster Features"a basınca sağ taraftan DRS servisi açılıp kapatılabilir. "vSphere DRS"e basınca sağ taraftan DRS'in davranışı değiştirilebilir. Bu pencere açıkken bir sonraki bölüm için "vSphere HA"ya basıp "Admission Control" altında "Disable"ı seçtim ve tamama bastım. Bunun işlevini FT'den hemen sonra anlatacağım.

Bu deneyi yaptıktan sonra makinalar x86_64 olduklarından artık bunlara ihtiyacım kalmadı. Konsoldan poweroff komutunu verip makinaları ve konsollarını kapattım. Makinalara sağ tuşla tıkladım "Delete from disk"i seçip tamamen sildim.


Bu sefer CentOS 6.9'un 32 bitlik olanını [ CentOS-6.9-i386-minimal.iso ] indirdim ve vCenter makinasına taktım. 'Prod'a sağ tıklayıp "New Virtual Machine..."i ve kurulum için "Custom"ı seçtim (sağda). Sanal makinaya "Centos32" adını verdim. DRS açık olduğundan hostun da önemi yok, ESXi5-01 seçili kalabilir. Yine "sharedstorage"ı seçtim, sanal makina sürümünde v8 seçiliydi, olduğu gibi bıraktım. "Guest Operating System" olarak Linux ve sürümü "RedHat Enterprise Linux 6 (32-bit)" olmalı. Makinanın belleği 512 MB RAM (64 bit CentOS 512 MB RAM'de çalışamıyor) seçtim. Diske kadar diğer ayarlara dokunmadım. Bu makina için büyüklüğü 2 GB ve "Thick Provision Eager Zeroed" yeni bir disk oluşturup (aşağıda), sihirbazı tamamladım. Daha önceki ayarlarla aynı şekilde CentOS'u kurdum yalnız makina 512 MB RAM'li olduğundan kurulum metin ekranda gerçekleşti.


Kurulum sürerken ESXi web arayüzüne [ https://esxi5-02.lab.local ] girdim ve "Browse datastores in this host's inventory"e bastım. ESXi'ın kullanıcı adı ve şifresini girdim. Burada hosta bağlı olan tüm datastore'ları gösteriyor. Bir tane yerel datastore'u bu makina göremediğinden listede bulunmuyor. "sharedstorage"a basınca Centos32 sanal makinasının dizini, bunun içinde sanal disk dosyaları, swap dosyası vb. dosyalar görülebiliyor. ESXi web arayüzünün bir özelliği de bu.

Sanal makinada FT ayarlarının açılması
Kurulum bitip "Reboot" düğmesi çıkınca Ctrl+Alt+F2'ye basıp komut satırında poweroff yazdım. Makina kapanınca VM menüsünden (sağda) "Edit Settings..."e bastım. Makinanın ince ayarlarıyla oynamak için "Options" sekmesine (1) ve onun içinde "Advanced" altındaki "General"a (2) bastım. Ardından sağdaki "Configuration Parameters" (3) düğmesine bastım. Makinanın ayarları için bir pencere açılacak. Windows için registry neyse sanal makina için de burası o. "Add Row"a basıp (4) aşağıdaki ayarları girdim:

replay.allowBTOnly = true
replay.allowFT = true
replay.supported = true

Son girilen değer ekran görüntüsünde görünmüyor ama doğru yazıldıktan sonra önemli değil. Bunlar tamamlandıktan sonra her iki pencerede tamama (6 ve 7) basıp kapattım. Sanal makinaya sağ tuşla tıkladım "Fault Tolerance" altında "Turn On Fault Tolerance"a bastım ve çıkan soruya evet dedim. Makinanın simgesi koyu maviye döndü. Makinayı başlattım. 


Fault Tolerance (FT) Nedir? 
FT ile çalışan bir sanal makinanın genel görünümü
vCenter'da kesinlikle kapanmaması gereken çok önemli makinalar FT özelliğiyle yedeklenebilir. Bu durumda, sanal makina esas çalıştığı makina dışında ikinci bir makinada daha açılır ve esas makinadaki her şey log olarak ikinci makinaya gönderilir. Doğal olarak bunun için fazladan kaynak ayrılır ve diski Thick'e dönüşür. Bu nedenle makinayı çok küçük bir kaynakla kurdum. Buna rağmen FT'yi açabilmek için kümenin kaynak kullanımını denetlemesini de kaldırmak zorunda kaldım (admission control: disable). Maalesef bu özellik 64 bit CentOS için desteklenmediğinden (veya ben bulamadığımdan) 32 bit işletim sisteminde gösterebildim.

Yukarıdaki görselde sanal makinanın çalıştığı host esxi5-01 ama FT makinayı yedekliyor. "Secondary Location" yedek makinanın çalıştığı host. Yedek makina 39 ms geriden geliyor ve log'lar yedek makinaya 11 KBps ile aktarılıyor. Eğer esas makina üzerinde birşey yapıyor olsaydım aktarımlar artacak, öyle ki lab ortamı yavaş kaldığında, kopmalar olacaktı. Makina ilk açıldığında veya kopma olduğunda "Not protected" duruma düşer ve ikincil makina senkron olana kadar öyle kalır. Yukarıda iki makina senkron durumda. İkinci hostta çalışan sanal makinalara baktığımda (sol yukarıda) Centos32'nin burada ikincil olarak çalıştığını gördüm. Sanal makinanın (salt okunur) konsolunu açtım. FT'yi denemek için VMware workstation'da ESXi5-01'e sağ tıklayıp "Power" menüsünden "Reset"e bastım. Bunu yapar yapmaz Centos32 makinası "Not protected" altında da "Need Secondary VM" durumuna geldi. Makinanın konsolundan çalışma süresine baktığımda sanal makina reset'ten etkilenmediğini gördüm:


ESXi5-01 geri açıldığında sanal makina tekrar Protected duruma döndü. Eğer ortamda ikiden fazla host olsaydı ESXi5-01 açılmasından önce ikincil kopya üçüncü bir hostta tekrar oluşturulacaktı.


Buraya kadar yazdıklarım, referans aldığım makaledeki FT kısmını biraz genişletmem dışında çoğunlukla o makalede geçen konulardı. Bu yazı biraz uzun oldu, umarım takip etmek açısından zor olmamıştır. Bundan sonraki bölümde, buraya kadar anlattığım altyapıyı kendim linux'ta kuracak, makalede konu edilen "vCenter Virtual Appliance" konu başlığını içeriğinden bağımsız olarak kendim ele alacağım.

Hiç yorum yok:

Yorum Gönder