Doğru Storage Seçimi (26.10.2016)
Bir storage ihtiyacımız doğduğunda hangi donanım bizim için daha uygundur demek yerine benim nasıl bir donanıma ihtiyacım var demek daha doğrudur. Fakat bunu diyebilmek için birçok değerleri iyi bilmek ve bunları hesaplamak gerekmektedir. Bu makalede tüm bu değerlerin ne olduğundan ve nasıl hesaplanması gerektiğinden bahsediyor olacağım.
IOPS Nedir?
Açılımı Input/Output Operation per second olan IOPS aslında disk yapılarında performans ölçümü için kullanılan bir parametredir diyebiliriz. Ama disk markaların vermiş olduğu bu parametreler olabilecek en iyi koşullara göre hazırlanmış olduğundan gerçek dünya için tam bir değer sayılamazlar.
IOPS değerleri sizin işletim sisteminize, o an yazmakta veya okumakta olduğunuz oranlara, sıralı mı yoksa rastgele mi yazma okuma yaptığınıza, erişim süresine (latency), raid levelına ve raid yapısından doğan penaltı değerlerine kadar değişen birçok faktör bulunmaktadır.
O yüzden bir kurulum esnasından storage veya sunucu üzerinde disk seçimi yapmadan önce yardımcı bir program kullanmak en iyisidir(Iometer, IOzone, FIO). Tabi bu programlarda çıkan IOPS değerleri sizin sunucuda oluşturmuş olduğunuz IOPS değerleri olacağından bir storage’a geçiş veya yeni bir sunucuda disk seçimi yapılacaksa burada kullanacağınız değerlere raid penaltı değerlerini de ekleyip tekrar bir IOPS değeri çıkartmanız en doğrusu olacaktır. Bunun için her vendorun mutlaka bir IOPS tool’u vardır onlardan yararlanabilirsiniz ya da biz nasıl hesaplarız diye merak ediyorsanız makalenin ilerleyen bölümlerinde detaylı bir şekilde anlatacağım.
İlk defa kurulum yapılacak ise daha önceden sizin yapınıza benzer bir yapı örnek alarak seçim yapılmasında yarar vardır.
Block
Veri transferinde veri akışının kullanımını kolaylaştırmak için verinin belli bölümlere ayrılması işlemine block denir. Disk yapılarında bilgileri aktarmak için verileri gerek işletim sistemi düzeyinde gerek storage tarafında sabit uzunluklarda bloklara ayırma işlemine ise block size denir.
Disk Tipleri
SATA
Serial ATA (SATA) diskler Paralel ATA (PATA) disk sürücülerin yeni halidir. Disk sürücü mekanizmaları benzer fakat arayüzü çok farklı iki mekanizmadır.
Ortalama IOPS değerleri ise 40 ile 90 arasında değişkenlik gösterebilir.
NL-SAS
SATA disklerin SAS bağlantısı ile tasarlanmış haline NL-SAS diye adlandırıyoruz.
Ortalama IOPS değerleri ise 70 ile 110 arasında değişkenlik gösterebiliyor.
SAS (Serial Attached SCSI)
Paralel SCSI yerine gelen bir disk yapısıdır ve verileri paralel yazma yerine seri olarak yazan bir teknolojidir. İki tip disk yapısı vardır; 10,000 RPM ve 15,000 RPM
Ortalama IOPS değerleri 10k için 120 ile 140 arası, 15k için 160 ile 180 arasındadır.
SSD
NAND flash tabanlı bir depolama çözümü olan SSD bir disk dönmesi gibi problemleri olmadığından ve veri erişim esnasında daha az latency oluşturduğundan artık birçok uygulama için tercih haline gelmeye başladı.
Ortalama IOPS değerleri bağlantı tipine göre çok fazla değişkenlik gösterebiliyor; 400 ile başlayıp Fusion-io ioDrive2 kullanıldığında 9,608,000 gibi değerlere ulaşılabiliyor.
RAID Levellarının performans ve RAID penaltı değerleri
RAID 0 Striping
Gelişmiş bir performans sunan fakat hata toleransı bulunmayan bir disk dizisidir. Aslında bir gerçek bir RAID olmamasına rağmen RAID ile çok fazla benzer özellik gösterdiğinden RAID levelları arasında sayılıyor.
Mininum : 2 Disk
Maksimum : Raid kontrollerine göre değişkenlik gösterebiliyor.
Boyut : Toplam disk sayısı kadar
Yedeklilik : 0
Penaltı Değeri : Aslında 0 ama değişkenler hesaplanırken 1 olarak kullanıyoruz.
RAID 1 Mirroring
Bir diskin bire bir diğer diske de yazma(aynalama) metodudur. Elimizde iki diskede aynı veriyi yazdığımızdan ötürü burada bir performans kaybımız bulunmakta. Kısacası veri yazıldığı zaman bir değer kaybederiz işte bu kaybettiğimiz değere raid penaltı deriz. Burada 2 diske aynı anda yazılma yapıldığından kaybımız 2’dir.
Mininum : 2 Disk
Maksimum : 2 Disk
Boyut : Toplam disk sayısının yarısı kadar
Yedeklilik : 1 Disk
Penaltı Değeri : 2
RAID 5 Stripe with parity
Veri güvenliğini sağlarken performansta sunan bir teknoloji olup en az 3 disk ile oluşması gerekmektedir. Veriler yazılmaya başlanırken ilk adımda kaç adet disk ile oluşturulmuşsa; disklere veri yazılırken sonunca diske de bu verilerin algoritması yani parity değeri yazılır. İkinci adımda en son yazılan parity değeri okunur ve diske veri yazılırken, bu verilerin parity değeri en son yazılmış olan parity değerinin bulunmadığı sırada ki diske yazar ve işlem bitene kadar bu döngü tekrar eder. Bu yapıdan daha önce denenmiş olan RAID 3 ve RAID 4’teki tek disk parity olarak kullanma mantığına sahipti. Fakat bu sistem parityi yazarken daha iyi performans vermesine rağmen parity dışında bir disk bozulduğunda algoritmaları hesaplayıp sürekli eksik veriyi tamamlamaya çalıştığı için daha çabuk disklerin bozulmasına ve daha çok veri kaybedilmesine sebep vermiştir. Bundan dolayı farklı disklere parity değeri yazılmaktadırlar. Bu da ister istemez ilk başta bir performans kaybına sebep vermektedir. 3 adet yazma ve yazma sırasında 1’de okuma yapıldığından buradaki raid penaltı değerimiz 4’tür.
Mininum : 3 Disk
Maksimum : Raid kontrollerine göre değişkenlik gösterebiliyor.
Boyut : Toplam disk sayısının 1 eksiği disk kadar
Yedeklilik : 1 Disk
Penaltı Değeri : 4
RAID 6 Stripe with double parity
RAID 5’e ek olarak bir tane daha parity değeri ekliyor ve böylece 2 disk yedekliliğine kadar çıkıyor. Fakat bu seferde hem yazma hem de okuma işlemi 1 tane daha artmış oluyor. Toplamda 4 yazma ve yazma sırasında 2 adette okuma yapıldığından raid penaltı değeri 6 olarak çıkıyor.
Mininum : 4 Disk
Maksimum : Raid kontrollerine göre değişkenlik gösterebiliyor.
Boyut : Toplam disk sayısının 2 eksiği disk kadar
Yedeklilik : 2 Disk
Penaltı Değeri : 6
RAID 10
En az iki tane RAID 1’in RAID 0 ile birleştirilmiş halidir. Veri yazılırken ilk başta RAID 0 gibi hareket edip ikinci kısımda ise RAID 1 gibi hareket ediyorlar. Burada penaltı hesaplanırken RAID’lerin penaltı değerlerinin çarpımlarından oluşuyor yani burada da penaltı bu yüzden ikidir diyoruz.
Mininum : 2 Disk
Maksimum : Raid kontrollerine göre değişkenlik gösterebiliyor.
Boyut : Toplam disk sayısının yarısı kadar
Yedeklilik : 1 Disk
Penaltı Değeri : 2
RAID 50
En az iki tane RAID 5’in RAID 0 ile birleştirilmiş halidir. Veri yazılırken ilk başta RAID 0 gibi hareket edip ikinci kısımda ise RAID 5 gibi hareket ediyorlar. Burada penaltı hesaplanırken RAID’lerin penaltı değerlerinin çarpımlarından oluşuyor yani burada da penaltı bu yüzden dörttür diyoruz.
Mininum : 6 Disk
Maksimum : Raid kontrollerine göre değişkenlik gösterebiliyor.
Boyut : Toplam Raid 5 sayısı x (bir raid yapısı içindeki disk sayısı – 1)
Yedeklilik : 1 Disk
Penaltı Değeri : 4
RAID 60
En az iki tane RAID 6’in RAID 0 ile birleştirilmiş halidir. Veri yazılırken ilk başta RAID 0 gibi hareket edip ikinci kısımda ise RAID 6 gibi hareket ediyorlar. Burada penaltı hesaplanırken RAID’lerin penaltı değerlerinin çarpımlarından oluşuyor yani burada da penaltı bu yüzden altıdır diyoruz.
Mininum : 8 Disk
Maksimum : Raid kontrollerine göre değişkenlik gösterebiliyor.
Boyut : Toplam Raid 6 sayısı x (bir raid yapısı içindeki disk sayısı – 2)
Yedeklilik : 2 Disk
Penaltı Değeri : 6
Gerçek IOPS Hesaplama
Makalenin girişinde IOPS’tan ve bu IOPS değerlerini bulmak için bir yardımcı program kullanmamız gerektiğinden bahsetmiştik. Kullanmış olduğunuz herhangi bir analiz programıyla sistemim ihtiyacı olan IOPS ve Read/Write ratio değerlerini çıkarttıktan sonra sistemin asıl ihtiyacı olan IOPS’u hesaplamak gerekir. Çünkü bu programlar sizin alt yapınızda ki Raid levelını ve bunlardan oluşan penaltıyı hesaplamaz.
RAID penaltı aslında disklere erişim süresi ve kullandığı modele göre yazma şekillerinden ötürü kaybetmiş olduğu değerlerdir ve bu değerler yazma kısmında kaybetmiş olarak düşünebilirsiniz. Raidlerine göre penaltılarını yukarıda belirtmiştik aşağıda kısaca özetlemiş bulunuyorum.
RAID 0 1
RAID 1 2
RAID 5 4
RAID 6 6
RAID 10 2
Bu penaltılar ile beraber bir IOPS hesapladığınızda aşağıdaki formül oluşur.
Gerçek IOPS = ((Toplam IOPS × % READ)+ (Toplam IOPS × % WRITE × RAID Penaltısı))
Örnek olarak bir Vmware sisteminiz olsun ve buranın analizini yaptıktan sonra ortaya 2000 gibi bir IOPS değeri ve % 40 oranında okuma % 60 oranında da yazma olsun ve Raid olarak Raid 10 seçmiş olalım.
Formulü işleme koyduğumuzda,
((2000x%40)+(2000x%60x2))= 800 +2400 = 3200 gibi bir rakam çıkar.
Bu çıkan değer ise bizim gerçek IOPS ihtiyacımızı göstermiş olur.
Bandwitdh
Verinin anlık veya toplamda kullanabileceği veri transfer limitini gösteren değere bandwitdh denir.
Storage tarafında kullandığımız bandwitdh boyutları ise 1 ve 10Gb; iSCSI ve NAS tarafında, 2, 4, 8 Gb; ise FC tarafında geçerlidir. Gelecek teknolojilerde ethernet çözümü 40Gb, FC de ise 16Gb olarak tasarlanmış durumda fakat şuan sadece switch düzeyinde kullanım aşamasındalar.
Bandwitdh ihtiyaç hesaplanması için şöyle bir formül bulunmakta;
Bandwitdh = IOPS x Block Size x 8
Bu formül ile ihtiyacınız olan bandwitdh ortaya çıkacaktır. Bir önceki örnekten devam edelim;
Burada çıkan gerçek IOPS ihtiyacımız 3200 idi ve Vmware kullanılmıştı. Vmware’in VMFS5 şeklinde formatlanmış yapısı 1MB Block Size olarak tasarlanmıştır. Formülü kullanacak olursak;
Bandwitdh = 3200 x 1 x 8 =25600 Mbit/sn. = 25Gbit/sn. Bu da en az 4 adet 8 Gbit’lik FC bağlantı, 3 adet 10 Gbit’lik iSCSI bağlantı ile sağlanabilir.
Storage Seçimi
Bu kısma kadar storage için etken oluşturan değerleri bir gözden geçirmiş olduk. Şimdi bu bilgileri temel alarak bir storage seçimine geçelim. Elimizde bir tek boyut hesabımız ve kaç disk kullanmamız gerektiği kaldı.
Yukarıda ki örnekten devam edelim
Seçebileceğimiz bağlantı modelini belirlemiş olduk aslında 4 adet 8Gbit’lik FC veya 3 Adet 10Gbit’lik bir iSCSI storage olmalı demiştik ve 3200 IOPS ihtiyacımız çıkmıştı.
Boyut olarak 5 TB’lık bir alana ihtiyacımız olsun.
Disk olarak 15k’lık SAS 600 GB’lık diskler kullanalım. Yapımızda RAID 10 kullandığımızda boyut için çıkan disk ihtiyacımız 18 olarak çıkıyor. 18 disk ile IOPS ihtiyacımız karşılayabilecek miyiz bir bakalım
Toplam IOPS = Disk IOPS x Disk Sayısı = 180 x 18 = 3240 olarak IOPS elde edebiliyoruz. Bu da IOPS ihtiyacımızı karşılamış oluyor.
Ortamda Clone ve Snaphot kullanımı da olacaksa Bunlar için de disk ihtiyacımızı belirleyelim.
Bunlar için bir IOPS ihtiyacımız bulunmadığından NL-SAS disklerde kullanabiliriz. Boyut olarak 5 TB’lık alan ihtiyacımız olduğundan Clone için de bu kadarlık bir alana ihtiyacımız var. Snapshot için ise var olan 5TB’lık alanın maksimum %20’sinin değişebileceğini düşünecek olursak 1 TB’lık alanda snapshot için ayıracak olursak toplam 6 TB’lık bir alana ihtiyacımız var. 1 TB’lık diskler ile RAID 5 kullanarak toplam 7 Disk içinde burası için ihtiyacımızı karşılamış bulunmaktayız.
Tabi ki disklerin sadece RAID ile değil storage tarafında da yedekliliğini de sağlamak için burada SAS diskler için en az iki diski global spare ve NL-SAS diskler içinde en az bir tane diski global spare olarak ayarlarsak toplam SAS için 20 Disk, NL-SAS için ise 8 Disk yeterli olacaktır.
Son olarak da yıllık büyüme hedeflerinizi belirleyip bunun içinde disk ihtiyacımızı eklediğimiz zaman kaç disk ihtiyacımız ortaya çıkacaktır. Bundan sonrası ise bir marka seçmek olacaktır. Burada karar tamamen sizin hangi markaya güveniyor veya hangisi sizin bütçenize uyuyor ise onu seçmeniz yeterli olacaktır.
SELÇUK SAVAŞAL
DANIŞMAN / KURUMSAL VERİ MERKEZİ VE SANALLAŞTIRMA BİRİMİ, KURUMSAL VERİ MERKEZİ VE SANALLAŞTIRMA BİRİMİ