Veri Depolamanın Temelleri Bölüm 1
Veri Depolama sistemleri, uygulamaların gelişimi sonucu çıkan ihtiyaçları karşılamak üzere zaman içinde gelişmişlerdir. Veri depolama sistemlerine olan ihtiyacı tamamen uygulama sahiplerinin ve kullanıcılarının istekleri tetiklemektedir. Bir BT yöneticisi sık sık uygulama sahiplerinin bu ihtiyaçlarına cevap vermek durumunda kalmaktadır. Asıl sorun bu durumda ne tür bir yapılandırmaya, hangi tür veri depolama cihazına, hangi bağlantı tipine, ihtiyaç duyulduğunu belirleyebilmek. Genelde sadece kaç terabyte, hangi RAID tipi ve hangi bağlantı tipi almalıyım diye bakılmaktadır. Bu yazıda veri depolama sistemlerine ait bazı temel bilgilere değinilecektir.
BT ortamlarında en temel bileşen bir sunucu, onun üzerinde çalışan işletim sistemi ve çalışan uygulamadır. Zaman içinde uygulamaların ve çoğunlukla sunucuların sayısı artar sonrasında ise yedekleme, yetkilendirme, güvenlik gibi altyapı servisleri ile karmaşık bir ortam haline gelir. Bir süre sonra sunucuların üzerinde kullanılan sabit disklerde yapılan RAID’ler (Redundant Array of Independent Disk) ve bunlardan elde edilen kapasite ile performans yeterli olmamaya başlar ve veri depolama macerası başlar. İşte bu noktada birbirinden farklı tiplerde ve bağlantı teknolojilerine sahip veri depolama cihazları ile tanışılır.
Veri depolama cihazları aslen üç türdedir. Giriş seviyesi (entry), orta ölçekli (midrange) ve üst uç (high-end). Veri depolama cihazlarının bu türleri ise kendi içlerinde dört farklı kategoriye ayrılmaktadır. DAS (Direct attached storage, direkt bağlı veri depolama cihazı), SAN (Storage area network, veri depolama ağı), NAS (Network attached storage , Ağ temelli veri depolama) ve CAS(Content addressed storage, içerik adreslemeli veri depolama).
Veri depolama cihazlarının türleri arasındaki ayrım aslen denetleyici (controller) sayısına göre yapılmaktadır. Eğer veri depolama cihazının üzerinde bir adet denetleyici varsa giriş seviyesi, iki adet denetleyici varsa orta ölçekli, iki ve daha fazla denetleyiciye sahip olabiliyorsa üst uc veri depolama sistemi olarak tanımlanır.
Bütün bu cihazların ortak özelliği temelde üzerinde sabit disklerin ve denetleyicilerin bulunması, aynen sunuculardaki RAID denetleyici kartı ve sabit diskler gibi, ayrıca bir takım akıllı fonksiyonları barındırmasıdır. Denetleyicilerin ortak özelliği ise üzerlerinde işlemci, önbellek, sunucu portu ve disklere erişim sağlayan disk portu olmasıdır.
Peki sunucuların üzerinde bulunan RAID denetleme kartı ve sabit disklerden nasıl bu noktaya gelindi ?
Başlarda artan güvenli kapasite ihtiyacı için sadece RAID teknolojisi kullanılmaktaydı ancak zaman içinde ortaya çıkan performans ihtiyacı için SCSI temelli diskler kullanılmaya başlandı. SCSI diskler 10.000 ve 15.000 devir hızları ile günümüzde kullanılmaktadırlar. Ancak yavas yavas 10.000 devir sabit disklerde kullanımdan kalkmaktadır. Günümüzde kullanılmakta olan bir birinden farklı tipteki sabit disklerin hepsinin ortak özelliği içerisinde bir elektrik motoru ile dönen bir veya birden fazla plaka ve bu plakalara temas eden bir veya birden fazla iğneli kafanın bulunması. Bu aynen bir plaktan müzik çalan pikap gibidir. Tek fark teknoloji geliştikçe sabit kalan hacme (2.5” veya 3.5”) daha fazla veri sığdırmak için daha fazla plakaları üst üste koyup kafa sayısı arttırılmaktadır. Dolayısıyla sabit diskler aslında seri haberleşme yapan cihazlardır. Yani sabit diskler bir seferde sadece bir işlem gerçekleştirebilirler.
Burada biraz daha ayrıntıya inmekte fayda vardır. Sabit diskler seri haberleşme yaptıkları için her operasyon için belli bir süre harcarlar buna servis süresi (service time) denir. Sabit diske yapılan okuma yazma istekleri bir “kuyruk” (queue) oluşturur. Bu kuyruktaki işler ya sabit diskin üzerindeki bellekte ya da denetleyici (RAID kartı veya veri depolama sistemi denetleyicisi) üzerinde tutulmaktadır. Bir disk okuma yazma operasyonunun cevap süresi (response time) ;
Cevap süresi = (kuyruk +1) x Servis süresi
formulu ile hesaplanır. Bunu bir örnekle anlatmak gerekirse, alışveriş merkezinde kasa kuyruğunda bekleyen kişileri düşünün. Kuyruktaki bir kişinin ödemesini yapıp mağazadan çıkması için o anda kasada bulunan kişi dahil (+1 kısmı) önündeki kişilerin her biri için kasada geçecek toplam süre kadar beklemesi gerekir. Genelde bu tip durumlarda mağaza müdürü yeni bir kasa açar ve kuyruk daha çabuk biter, aynı RAID’de yapıldığı gibi.
Sabit disklerin bir veriye erişmesi için geçen süreye “arama süresi” (seek time) denir. Eğer sabit disk sürekli veriyi ararsa servis süresi uzayacaktır, bu durumdada cevap süresi artacaktır. Günümüzde kullanılan sabit diskler için 6 (yavaş diskler) ile 20(hızlı diskler) arası kuyruk uzunluğu makul kabul edilmektedir. Bir sabit diskin birazdan bahsedeceğimiz ardışıl erişim için 1ms, rastgele erişim için 3-5 ms arası servis süresi vardır.
IDE, SAS, SCSI, SATA veya Fibre Kanal disklerin hepsinin ortak özelliği budur. Bunları temelde birbirinden ayıran ise devir hızları ile bağlantı(kontrol kartı) teknolojisidir. Aslında yukarıdaki isimler sabit disklerin bağlantı tipine göre verilmektedir. Fibre kelimesi halen Türkiye BT piyasasında bazen yanlış kullanılmaktadır ve Fiber ile karıştırılmaktadır. Okunması aynı olsada yazımları farklıdır.
SCSI teknolojisi 320 Mb/s, SATA-I/ATA 1.5 Gb/s, SATA-II ve SAS teknolojisi 3 Gb/s hızında, Fibre kanal 4 Gb/s hızında bağlantı teknolojisine sahiptir.4 Gb/s hızının teorik karşılığı 500 MB/s, pratik karşılığı ise 360 MB/s hızında veri aktarımına denk gelmektedir.
SAS ve Fibre kanal disklerin temeli SCSI disklere dayanmaktadır. Genelde 10.000 ve 15.000 devir sabit diskler olarak çalışmaktadırlar, tek farkları kontrol kartlarının SAS veya Fibre Kanal olarak ayrı olmasıdır. ATA/SATA-I/SATA-II diskler 7.200 ve 5.400 devir hızı kullanılmaktadır. FATA olarak bilinen diskler ise aslen içinde ATA/SATA-I/SATA-II disk bulundurup kontrol kartları Fibre kanal olarak tasarlanmıştır.
Başlarda artan disk kapasitelerini karşılamak üzere ihtiyaç duyulan bu sistemler günümüzde öncelikle performans ihtiyaçlarını karşılamak için ihtiyaç duyulur hale gelmişlerdir. Bunun sebebi ise her geçen gün uygulamaların performans ihtiyacının artması, uygulamaları kullananların isteklerinin artması, bu uygulamaları çalıştıran işlemcilerin çılgın bir hızla gelişmesi ve sabit disklerin bu gelişim karşısında ilkel kalmasıdır. Kısacası sabit diskler bir sistem üzerindeki en zayıf halkalardan biri olmuştur. Günümüzde sabit diskler 15.000 devir hızında takılmış durumdadırlar ve sabit disk üreticilerinin yol haritasına baktığımızda 20.000 veya 30.000 devir sabit diskler yerine 10.000 ve 15.000 devir hızında ama büyük kapasiteli sabit diskler üretilmeye devam etmektedir. Bunun en canlı örneği artık 450GB 15.000 devir sabit disklerin kullanılıyor olması. Bu tıkanıklığa çözüm olarak Kurumsal Katı Hal Diskler (Enterpise Solid State Disk, SSD)’ler hayatımıza girmiş bulunmaktadır.
Peki burdaki sıkıntı nedir ? Klasik bir 15.000 devir sabit diskin (kapasitesinden ve kontrol kartından bağımsız olarak) size verebileceği en üst performans saniyede 180 adet rasgele giriş/çıkış operasyonudur (IOPS, IO per second). Bu değer 10.000 devir diskte 130, ATA/SATA/FATA temelli teknolojide 70, SSD’lerde 5.000’dir. Yani bir işlemci saniyede 180 adet okuma ve yazma işlemini bir sabit diske gönderebilir, bu işlemler o sabit diskin cevap verme süresi limitleri (response time) dahilinde gerçekleştirilir. Bu 180 rakamının üstüne çıkılınca sabit disk cevap vermeyi kesmez sadece çok daha geç cevap vermeye başlar ve bu durumda uygulamada ve uygulama kullanıcısında yavaşlık farkedilmeye başlanır. Diğer taraftan işlemciler bunun çok daha fazla üzerinde bir performans sergilemektedir ve her geçen gün aradaki bu performans farkı artmaktadır. Nano saniyeler hızında işlem yapan bir işlemci milisaniyeler hızında işlem yapan sabit diski beklemek zorundadır. Basit çözümü ise işlemcinin sabit diske ihtiyacını ortadan kaldırmaktır yani herşeyi işlemcinin içinde veya mümkünse işlemci ile sabit disk arasında bir hız gösteren bellek içinde halletmektir. Uygulamaların kapasite ihtiyacı artışını ve sunucu sistemlerinin donanım gelişimini bir gözden geçirirsek bunun kısa zamanda mümkün olmadığını hemen farkedebiliriz.
Eğer bir uygulama 1800 IOPS performans gösteriyor ise bunu karşılayacak kadar sabit disk üzerinde çalışmaz ise (ister sunucu diski ister veri depolama sistemi) yavaşlık olacaktır. Bir uygulamanın ne kadar IOPS göstereceğinin ölçümü ise genelde her işletim sistemi üzerinde gelen standart performans ölçüm yazılım parçacıkları ile ölçülebilir. Bu Windows’da perfmon, UNIX ve Linux sistemlerde sar veya iostat’dır.
Bu performans ölçüm yazılımlarında bakılması gereken değerler ise ilk bakışta bir diske ait saniyede okuma adeti, saniyede yazma adeti, kuyruk uzunluğu, okuma için harcadığı süre ve yazma için harcadığı süre değerleridir. Bu sayede uygulamamızın o disk üzerinde ne kadar okuma ve ne kadar yazma yaptığını ve kuyrukda ne kadar disk operasyonunun beklediğini , okuma ve yazma işlemleri için ne kadar süre harcadığını (başka deyişle işlemci diski ne kadar süre bekliyor) belirleyebiliriz. Bu okuma yazma oranı bizim o disk alanı için kullanmamız gereken RAID tipini belirler.
RAID tipleri kendi arasında temel olarak stripe RAID (RAID0), parite RAID’ler ve mirror RAID’ler olarak ayrılmaktadır. RAID0 genelde kullanılmamaktadır çünkü herhangi bir koruma sunmamaktadır. Bilinen tüm RAID tipleri bu üç farklı RAID tipinden türetilmiştir. Mirror RAID’ler RAID1 ve RAID 1/0 (10, 0+1 veya 1+0 olarakda belirtilir), parite RAID’ler ise RAID3(veya RAID4), RAID5 ve RAID6 olarak sınıflandırılır. Mirror RAID’ler yazma, parite RAID’ler ise okuma operasyonlarında avantajlı durumdadırlar.
Bu farkın oluştuğu nokta aslında RAID mekanizmasında ortaya çıkmaktadır. Mirror RAID’lerde bir disk operasyonu gelen verinin XOR operasyonundan geçirilmesi ve bir veri bir parite olarak yazılmasından ibarettir. Parite RAID’lerde ise disk üzerinde bir veri ve bir parite okunur, önce bunlar XOR’lanır, çıkan sonuç ile yeni veri tekrar XOR’lanır, sonra yeni parite ve yeni veri yazılması ile sonuçlanır. Kısaca mirror RAID’lerde iki operasyon, parite RAID’lerde dört operasyon gerçekleşir. Buna RAID çarpanı (overhead, multiplier)’de denir.
Sunucu tarafından ölçülen IOPS değeri ile buna karşılık diskten elde etmemiz gereken IOPS değeri bir birinden farklıdır. Bunun çok basit bir formulasyonu bulunmaktadır ;
Mirror RAID Disk IOPS = Sunucu Okuma IOPS + 2 x Sunucu Yazma IOPS
Parite RAID Disk IOPS = Sunucu Okuma IOPS + 4 x Sunucu Yazma IOPS
aslında bu formulasyonda ihmal edilen bir bileşen vardır. Sunucunun veri depolama sisteminde yaptığı cache-hit (önbellekten veriyi bulma) oranı. Bu oran genelde rasgele erişim yapan sistemlerde %10-20 arasında değişmektedir). Bu bileşeni eklediğimizde formulasyon ;
Mirror RAID için,
RAID Disk IOPS = (1-%Cache-Hit)*Sunucu Okuma IOPS + 2 x Sunucu Yazma IOPS
Parite RAID için,
RAID Disk IOPS = (1-%Cache-Hit)*Sunucu Okuma IOPS + 4 x Sunucu Yazma IOPS
Örnek olarak sunucumuzda 1000 IOPS okuma, 3000 IOPS yazma yapıldığını varsayalım. Bu durumda okuma oranı, %25 olacaktır. Formulasyona koyduğumuzda ;
Mirror RAID Disk IOPS = 1000 + 2×3000 = 7000
Parite RAID Disk IOPS = 1000 + 4×3000 = 13000
çıkmaktadır. 15.000 devir sabit diskin 180 IOPS yaptığı gözönüne alınırsa,
Mirror RAID için gereken disk adeti = 7000 / 180 = 38.88 = 39
Parite RAID için gereken disk adeti = 13000 / 180 = 72.22 = 73
Kısaca 4000 IOPS yapan sunucumuz için ya 39 tane diski RAID1/0 (bu durumda ya 38 ya da 40 disk gerekmektedir), ya da 73 tane diski RAID 5 yapmak gerekmektedir.
Örnek olarak sunucumuzda 4500 IOPS okuma, 500 IOPS yazma yapıldığını varsayalım. Bu durumda okuma oranı, %90 olacaktır. Formulasyona koyduğumuzda;
Mirror RAID Disk IOPS = 4500 + 2×500 = 5500
Parite RAID Disk IOPS = 4500 + 4×500 = 6500
çıkmaktadır. 15.000 devir sabit diskin 180 IOPS yaptığı gözönüne alınırsa,
Mirror RAID için gereken disk adeti = 5500 / 180 = 30.55 = 31
Parite RAID için gereken disk adeti = 6500 / 180 = 36.11 = 36
Kısaca 5000 IOPS yapan sunucumuz için ya 31 tane diski RAID1/0 (bu durumda ya 30 ya da 32 disk gerekmektedir), ya da 36 tane diski RAID 5 yapmak gerekmektedir.
Bu sabit disk adetlerinin altında kalındığında uygulamamız çalışmaya devam eder ancak daha düşük response-time verecektir.
Yukarıdaki örnekler gözönüne alındığında yazma operasyonu ağırlıklı disk alanlarında mirror RAID, okuma ağırlıklı disk alanlarında parite RAID kullanmak doğru olacaktır.
Uygulama üreticilerinin tavsiyeleri incelendiğinde genelde tavsiye edilen erişim süreleri veritabanları için 20ms, index(log) dosyaları için 5ms’dir. Ancak bugün pek çok işletmenin veritabanlari 2-3 sn, index alanları 500-600 ms erişim süreleri ile çalışmaktadır. Bu durumda o işletmede alınan ilk yanlış aksiyon daha hızlı sunucu alınmasına gitmektir. Burada örnek olarak Exchange, SQL, Lotus Notes, Oracle, Sybase, DB2 gibi sistemleri gösterebiliriz, hepsinde veritabanı ve index yapısı bulunmaktadır.
Genelde veritabanları büyük bir excel dosyası içindeki worksheetler gibidir. Bir veritabanı operasyonu yapıldığında temelde yapılan şey binlerce hücre arasında bir verinin aranması ve sonrasında okuma, yazma, silme gibi işlemlerin yapılıp sonucun ya aynı hücreye yada farklı bir yerdeki hücreye yazılmasıdır. Sabit disk kafasıda aynen bu harekete paralel olarak plakalar üzerinde rastgele bir oraya bir buraya gidip gelecektir. Bu rastgele erişime bir örnektir. Örnek olarak bir yedekleme işlemi ise aslen büyük bir dosyanın yedeklenmesine başlanması ve ardışıl olarak o dosyanın yazılmasına sebep olmaktadır. Bu durumda da sabit disk kafası plakalar üzerinde bir operasyona başlayıp (örneğin yazma operasyonu) ardışıl olarak o iz üzerinde devam etmektedir.
RAID tipinin seçilmesinde başka bir etken ise uygulamanın veriye erişim profilidir. Yukarıda örnek verdiğimiz iki farklı erişimin aynı RAID grubundaki aynı sabit diske aynı anda gerçekleşmesi, o sabit diskte çok düşük performans alınmasına sebep olmaktadır. Sabit disk kafası eğer bu iki farklı yüke aynı anda maruz kalırsa rastgele erişen uygulama için plakalar üzerinde rasgele tarama yapmaya çalışırken, aynı zamanda ardışıl erişen uygulama için plaka üzerinde ardışıl tarama yapmaya çalışacaktır. Bu durumda sabit disk içinde inanılmaz derecede yüksek arama (seek) olacaktır. Sabit disk arama yapmaktan, veri aktarıma zaman bulamayacaktır.
Uygulamaların okuma/yazma oranına bakarken aynı zamanda rastgele/ardışıl erişim tipine bakmak gerekmektedir. Rastgele ve ardışıl erişim yapan disk alanlarının birbirinden farklı sabit disklerde RAID yapılması inanılmaz yüksek bir performans sağlayacaktır.
Bir diğer önemli nokta ise RAID tiplerinin birbirine oranla farklı bandgenişliği (MB/s değeri) avantajı sunmasıdır. Bunun sebebi ise mirror RAID’lerde okuma operasyonunun sabit disklerin veri kısmından yapılması yani sabit disklerin yarısının okuma operasyonuna dahil olmamasıdır. Parite RAID’lerde ise okuma operasyonu yine aynen sabit disklerin veri kısmından yapılması yani bir adet parite diski haric (RAID6’da 2 adet parite diski) tamamından paralel yapılmaktadır.
Dikkat edilmesi gereken diğer bir nokta ise işletim sistemlerinin kullandıkları disk alanları üzerine Master Boot Record,MBR (ana boot kaydı) bilgi yerleştirmesidir. Bu kayıt işletim sistemine göre değişmektedir ve yaygın olarak kullanılan Windows işletim sisteminde bu 63 sektör, 31.5 KB büyüklüğündedir. Eğer disk alanı üzerinde partition oluşturmadan önce düzgün bir ayarlama (alingment) yapılmazsa o diske yapılan her okuma yazma işlemi 31.5KB öteleme sonrasında işleme alınacak bu da disk üzerinde disk geçişi(disk crossing) yapılmasına sebep olacaktır. 4KB blok büyüklüğü ile formatlı disklerde bu %6, 8KB blok büyüklüğü ile formatlı disklerde bu %12 performans kaybına sebep olacaktır.
Buraya kadar anlatılan temeller aslında bir veri depolama sistemine ihtiyaç duyulmadan sunucu donanımı üzerinde de yapılabilecek planlamalara ışık tutmaktadır. Bunlar için ön koşul sunucu donanımı üzerinde aynı anda hem mirror RAID hemde parite RAID yapılabilmesi ve yeterli adette sabit diskin sunucu üzerine takılabilmesidir.
Unutmamak gerekirki BT ortamlarında “uygulama performansı” denilen şey,
– Yazılım Kodu
– Veritabanı altyapısı
– Network tıkanıklığı
– Sunucu bellek swap oranı
– Veritabanı önbellek operasyonu
– Dosya sistemi fragmentasyonu
– Veri erişim oranı
bileşimidir. Yukarıdaki yazıda anlatılanlar veri erişim oranı ile ilgilidir, tabiiki bunun için önce listede veri erişiminden önce gelenlerin düzeltilmesi gerekmektedir.
Fırat ÖZTÜRK
Eline sağlık, Bölüm2 gelir mi 🙂