Vmware VM Console Bağlantısını Limitleme

Kalabalık bir ekiple çalışıyorsanız, aynı anda birden fazla kişi aynı VM’in konsoluna ulaşıp işlem yapmaya çalışması veya yapılan işlemleri izlemesi olağan bir durumdur. Tabii bazı durumlarda sistem yöneticisi konsola yapılan bağlantı sayısını sınırlamak isteyebilir. Unutmayın açılan her konsol çok azda olsa Vmware üzerinde bir baskı yaratır. Aynı zaman da Vmware’in yayınladığı “Hardening Guide” içerisinde konsol sayısının limitlenmesi önerilir.

Not: Bu ayarın yapılabilmesi için VM’in kapalı olması gerekmektedir.

  • Vm’e sağ tıklayın ve “Edit Settings” seçeneğini seçin
  • Yukarıda ki tablardan “Options” seçeneğini seçin
  • Gelen listede “Advence” altında bulunan “General” seçeneğine tıkladığınızda sağ tarafta ki panelde “Configuration Parameters” belirecektir.makssnapshot-1
  • Buradan vmx değerlerini değiştirebilirsiniz. Değiştirmemiz gereken parametre ” RemoteDisplay.maxConnections “. Bu sayıyı bir veya istediğiniz sayı yapabilirsiniz.

Invoke-Command ile Parametre Kullanımı

En iyi sistem yöneticisi gündelik operasyonel görevlerini scripte eden sistem yöneticisidir.Doğal olarak güncelik işlerimizi scripte döküp mümkün olduğunca elle yapmaktan kaçınırız. Powershell sayesinde uzaktaki bir sunucuya bağlanıp istediğimiz komut veya scriptleri çalıştırabiliriz. Ben genelde yazmış olduğum scriptler veya runbook’lar içerisinde mümkün olduğu kadar “invoke-command”  kullanıyorum. Bu fonksiyon sayesinde uzak bir sunucuda tek bir komut veya birden fazla komutu çalıştırabilir ve çıktılarını daha sonra kullanmak için bir değişken içerisinde tutabilirim.

Bazı arkadaşlarım bana neden “Enter-Pssession” kullanmadığımı soruyor. Öncelikle Enter-PSSession kalıcı bir ihtiyaç duyuyorsanız ideal bir çözümdür. Bir kere uzak sunucuya bağlandığınızda session hep açık kalır. Bu hem iyi hem de kötüdür. Uzaktaki sunucuya hiç “remote desktop” yapmadan powershell ile bağlanıp yönetmenizi ve scriptler çalıştırabilirsiniz. Bir taraftan da kötüdür. Düşünsenize bir monitoring aracınız sürekli olarak sunucularda ki servislerinizi izliyor ve bir servis durduğu zaman ip adresini powershell scriptinize yollayıp otomatik bağlanmasını ve servisi başlatmasını istiyorsanız kalıbı bir bağlantı sağlanması veya her işlemden sonra bağlantıyı sonlandırmak için ek fonksiyonları çağırmak(Remove-PSSession) külfetli geliyor.

Invoke-Command ise bağlantıyı kurup çalışıp çıkış yaptığından dolayı benim daha çok tercih ettiğim bir fonksiyondur. Peki nasıl kullanılır?Mesela uzaktaki bir sunucuya bağlanıp registery kaydına bir şey ekleyen bir script hazırlayalım.

Başka bir yazımda bahsettiğim gibi “stored credential” kullanarak yeni bir session yaratabilirsiniz.Ya da aşağıda ki komutu kullanarak bir popup içerisinde username ve şifrenizi girebilirsiniz.

$cred = Get-Credential -Credential  <domain\username>

#Session yaratmak için önce credential’ları almamız gerekiyor. Stored credential veya yukarıda ki yöntemi kullanabilirsiniz.

[string]$reg1 = “Test”       
$session = New-Pssession –ComputerName <remoteServer> -Credential $cred
Invoke-Command –Session $session –ScriptBlock { New-ItemProperty -Path HKLM:\SOFTWARE\Test -Name Kritiklik -PropertyType String -Value args[0] } -Args $reg1

Burada önemli olan nokta –Args ile listelediğimiz değişkenleri uzaktaki sunucuda çağırmak istersek değişkenleri verdiğimiz sırayla numaralandırmalıyız. Örnek olarak

-Args $reg1 $reg2 $reg3
ScriptBlock içerisinde şu şekilde kullanılmalıdır
$args[0] $args[1] $args[2]

Invoke-command’u runbooklarınız içerisinde de kullanabilirsiniz.

Powershell ve PowerCLI İçerisinde Şifre Saklamak

Eğer orchestrator(system center veya vmware) kullanıyorsanız mutlaka bir çok işinizi otomatikleştirmek için script yazmanız gerekmiştir. Doğal olarak bir çok scriptin çalışması için uzakta ki bir sunucuya giriş yapması gerekmektedir ve bunun için gerekli bilgileri script içerisinde kullanmamız gerekiyor. Powershell ve PowerCLI şifrelerin saklanması ve tekrar tekrar kullanılması için yöntemler sunmaktadırlar.

Uyarı: Her iki yöntemde gerçek anlamda bir koruma sağlamamakta, şifrelerin saklandığı dosyaya erişebilirse şifrelerinizi .

Continue reading

IOPS ve Throughput Nedir?

Hiçbir son kullanıcı ne kadar teknoloji harikası olursa olsun yavaş, sürekli çöken ve bir işlemlerin yarısında kapanan yazılımlarla çalışmak istemezler. Doğal olarak bir sistem veya proje planlarken performans bizim için önemli bir etkendir. Sunucu ve servislerde oluşan dar boğazları incelediğiniz zaman büyük bir kısmının yetersiz kaynak atamasından dolayı oluştuğunu görürsünüz, hal böyleyken sorunun çözümü kolay gibi gözükmektedir. Memory yetmiyorsa Ram artırımı işlemci yetmiyorsa CPU artırımına gidilir. Sanallaştırma sayesinde minimum kesintiyle hatta çoğu durumda kesintiye bile ihtiyacımız olmadan kaynakları değiştirebiliriz ama durum her zaman böyle olmayabilir. Özellikle disk performansında oluşan sorunların çözümü bu kadar kolay olmuyor. Bunun için mimariyi oluştururken ilk seferde üzerinde çalışacak servisleri ve yükü doğru tahmin etmeli ve buna göre sistemler hazırlamalıyız.

Birçok sistem yöneticisi bir servisi veya sistemi devreye alırken disk’le ilgili ihtiyaçlarını düşünürken sadece kapasite öngörüsünde bulunurlar. Doğal olarak orta ve uzun vadede yük artıkça dar boğazlar oluşmaya ve performans kaybı gözlemlenir. Bunun yegane sebebi sistemin ihtiyaç duyacağı toplam IOPS ve Throughput doğru öngörülememesi veya hiç hesaba katılmamasıdır.

Peki nedir bu değerler ve ne işe yararlar. IOPS(Input/output operations per second) adından da anlaşılacağı gibi bir diskin saniyede yapabileceği maksimum yazma veya okuma sayısıdır. Throughput is belli bir zaman aralığında yapılan işi temsil eder storage için konuşursak 1 saniyede kaç MB yazdığı veya okuyabildiği değerdir. Genelde insanlar IOPS’a odaklanır ve Throughput’u önemsemez veya aynı şey olduğunu düşünür. Durum maalesef böyle değil ve size iki farklı senaryoyla durumu anlatmak istiyorum. İlk senaryoda kullanıcıların arşiv olarak kullandıkları bir dosya sunucusunun throughput’unu hesaplarken ikinci senaryoda aynı diskler ile bir yoğun yazma oranına sahip bir log arşivininkini hesaplayacağız.

Öncelikle  Throughput hesaplama formülümüz tek disk için şudur.

MB/s = IOPS * <KB per IO> / 1024

Burada ki “KB per IO” disk üzerindeki block size’larıdır.Her iki örnek içinde 128KB olarak aldım.

İlk önce dosya sunucumuzu ele alalım. Bu sunucunun toplam iş yükünün %80’i okuma, %20’si yazma olsun ve güvenlik sebebiyle de RAID-5 yapalım. 4 adet 175IOPS’a sahip disk takalım.

Öncelikle toplam IOPS’u hesaplamamız gerekiyor.

Toplam IOPS = 4 * 175

Raid yaptığımız için Raid’den kaynaklı bir “IO penalty” bulunmaktadır. Bunun sebebi Raid 0 haricinde tüm Raid yapılarında verinin birden fazla diske yazılmasıdır. Yazının sonunda “raid penalty” tablosunu bulabilirsiniz.Raid 5 için bu değer “4”.

Fonksiyonal IOPS’u hesaplarsak

Fonksiyonal IOPS = ((Toplam IOPS *yazma yüzdesi)/(Raid penalty ))+(Toplam IOPS*okuma yüzdesi)

Dosya sunucusunun fonksiyonal IOPS ve Throughput’u
Yazma için 35 IOPS ve Throughput’u yaklaşık olarak 4,5MB/s
Okumak içinse 560 IOPS ve Throughput’u yaklaşık olarak 70MB/s

Logları tuttuğumuz sunucu Raid-6 ile kurulmuş olsun. Geri kalan tüm özellikleri bire bir aynı olduğunu varsayalım. Raid-6’nın penalty değeri 6’dır. Bu durumda,

Yazma için yaklaşık IOPS 94 ve Throughput’u yaklaşık olarak 11,75 MB/s
Okumak içinse yaklaşık IOPS 140 ve Throughput’u yaklaşık olarak 17,5 MB/s

Gördüğünüz üzere aynı diskler farklı raid yapıları ve okuma ve yazma oranlarıyla tamamen farklı sonuçlar vermektedir. Tasarımınızı yaparken mutlaka ihtiyacınızı iyicene analiz edip karar verin. Peki kullanıcı sayınızı ve her kullanıcının yaklaşık olarak yaratacağı yükü biliyorsunuz diyelim. Bu durumda

Gerekli Disk Sayısı = ((Read IOPS) + (Write IOPS*Raid Penalty))/ Disk IOPS

Formülünü kullanarak ihtiyacınız olan disk sayısını bulabilirsiniz. Gereken minimum disk sayısını bilmek performansın yanında kapasite planlaması yaparken de size yardımcı olacaktır.

Yazımı bitirmeden önce küçük bir tiyo vermek istiyorum : Diskin block size’ını değiştirerek throughput’da artış sağlayabilirsiniz ama bu deduption oranınızı ciddi anlamda etkileyecektir.

raidpenalties

Maksimum Snapshot Sayısı

Snapshot’lar hakkında yazımı okuduysanız çok sayıda snapshot almanın performans üzerine etkisini okumuşsunuzdur. Bu sebepten dolayı bazı işgüzar veya bu konudan habersiz arkadaşların aşırı sayıda snapshot almanızı engellemek isteyebileceğinizi düşündüm ve bu yazıyı hazırladım.

Vmware’in ön tanımlı olarak snapshot sayısı 32’idir ama bu sayı isteğe bağlı olarak azaltılabilir veya çoğaltılabilir(neden?)

vSphere Client’ınızı kullanarak öncelikle vCenter veya host’unuza bağlanın.

Değişiklik yapmak istediğiniz Vm’in mutlaka kapalı durumda olması gerekmektedir bu sebepten dolayı kapalı duruma getiriniz.

Sağ tıklayıp edit settings->Options yaptığınız zaman aşağıda ki gibi bir ekranla karşılaşacaksınız.

makssnapshot-1

Bu ekran görüntüsünde göstermiş olduğum “Configuration Parameters’a” basarsanız. Vm’in vmx dosyasını düzenlemeniz için parametreler sıralanacaktır. Eğer gelen parametre listesinde neyin ne işe yaradığını bilmiyorsanız değerlerle oynamanızı tavsiye etmem. Listede snapshot.maxSnapshots = “x” şekilde bir satır varsa “x” yerine istediğiniz maksimum snapshot sayısını yazabilirsiniz. Eğer böyle bir satır yoksa “Add row’a” basarak ekleyebilirsiniz.