RAID yapısını seçerken ya da storage’ı dizayn ederken kesinlikle uzakta durmamanızı tavsiye ederim. Bu işlemler direkt olarak veritabanı performansına önemli ölçüde etki ediyor. Kurumunuzdaki sistem sorumlusu ya da storage sorumlusu sizin read ve write oranınızı ya da hangi uygulamanın daha çok IO yaptığını sizin kadar bilemez. Bu yüzden disk isterken ona bazı parametreler vermeniz gerekir. Bu parametreleri verebilmek için RAID yapısını ve storage’ın arka planda nasıl çalıştığını biliyor olmanız gerekir. Bu konuları bir DBA’in bilmesi gerektiği kadarıyla ele alalım. Bu makaleyi okumadan önce “SQL Server Sunucuların Kullandığı SAN Altyapısı ve Uygulama Sunucusundan Gelen Bir Query’nin Hikayesi” ve “Veritabanı Sunucunuzun Yaptığı IOPS ve Throughput’u Data Collector Kullanarak Bulmak” isimli makalelerimi okumanızı tavsiye ederim.
RAID(Redundant Array of Independent Disk Drives):
Kısaca, disklerin daha performanslı ve/veya daha güvenli(veri kaybına karşı) çalışmasını sağlayan teknolojidir. Çeşitli RAID türleri vardır. Bazılarında performans daha üst seviyelerdeyken veri kaybetme olasılığı daha fazla, bazılarında veri kaybetme olasılığı azken performans daha alt seviyelerdedir. Bazılarında ise hem performans yüksek hem veri kaybı ihtimali daha azdır. Tabi kullanılan disk adedi ve bununla doğru orantılı olarak maliyette bu türlere göre değişecektir. Şimdi en çok kullanılan RAID türlerine değinelim.
RAID 0: Performans açısından çok hızlıdır ama veri kaybetme olasılığı fazladır. En az iki disk ile yapılabilir. Veri yazılırken bölünerek disklere aynı anda yazılır ve okunurken bu bölünmüş parçalar farklı disklerden aynı anda okunur. Bu yapıyı oluşturabilmek için ekstra disk kullanmak gerekmez. Örneğin 2 TB veri için 1 er TB iki disk yeterli olacaktır. 2 TB’lık veriyi 1 er TB halinde 2 diske yazacaktır. Mission Critical sistemlerde kullanılmaz. Veri kaybının önemli olmadığı ve performansın önemli olduğu sistemlerde kullanılabilir. Aşağıdaki resimde RAID 0 yapısını görebilirsiniz.
RAID 1: Performans açısından yavaştır ama veri kaybetme olasılığı daha azdır. En az iki disk ile yapılabilir. Verileri kopya halinde 2 diske yazar. Bu yüzden hem performans azalır hem de ekstradan disk kullanmak gerekir. Örneğin 2 TB veri için 2 şer TB 2 adet diske ihtiyaç duyulacaktır. Performans olarak yavaş olduğu için mission critical sistemlerde çok tercih edilmez. İşletim sisteminin kurulacağı disk için bu yapıyı kullanabilirsiniz. Aşağıdaki resimde RAID 1 yapısını görebilirsiniz.
RAID 10: En az 4 disk ile yapılabilir. Adından da anlaşılacağı gibi RAID 0 ve RAID 1 ‘in bir karışımıdır. İki adet RAID 1 grubunun RAID 0 şeklinde birleştirilmesi ile oluşur. RAID 0’ın performansını ve RAID 1 ‘in veri güvenliğini bir arada sunar. Disk maliyeti RAID 1 deki gibidir. 4 TB’lık bir diske 2 TB’lık bir veri yazılabilir. Eğer kurumunuzda disk ile ilgili bir kısıtlama yoksa veritabanlarınız için bu RAID yapısını kullanmanızı tavsiye ederim. Aşağıdaki resimde RAID 10 da nasıl yazıldığını görebilirsiniz.
RAID 5: En az 3 disk ile yapılabilir. RAID 0’ da olduğu gibi verileri eşit olarak disklere yayar. Fakat veriler disklere yazılırken disklerden her hangi biri arızalandığı durumda sistemin veri kaybı olmadan çalışabilmesi için bozulan diskteki verileri geri getirmek için parite adı verilen bir algoritma da disklere yazılır. Aşağıdaki resimde RAID 5 teki verilerin ve paritenin disklere nasıl yazıldığını görebilirsiniz.
3 disk kullanılarak RAID 5 konfigurasyonu yaptığınız takdirde 1 disk arızasına karşı sistem koruma altında olacaktır. Peki performans ve veri güvenliği bakımından RAID 5’in konumu nedir?
Performans anlamında RAID 0 daki gibi bir read performansı elde edilir. Çünkü verileri eşit bir şekilde disklere paylaştırıyor. Ama write konusunda RAID 0 daki gibi bir performans elde etmek mümkün değil. Çünkü burada devreye ekstra olarak parite hesabı giriyor. 3 disk kullanılırsa 2 disk kapasitesini, 5 disk kullanılırsa 4 diski kapasitesini aktif olarak veri için kullanabiliyoruz.
Görüldüğü gibi RAID 5’te read performansı çok iyiyken, write performansı kötüdür. Eğer sisteminizde %80’lere varan bir read oranınız varsa ve kurumunuz disk maliyetinden kaçınıyorsa veritabanlarınız için RAID 5 kullanabilirsiniz.
RAID 6: RAID 5’in biraz daha güvenli halidir. 2 disk kaybına karşı korumalıdır. En az 4 diskle yapılır. Ben genelde 6+2 ya da 8+2’yi tercih ediyorum.
Örneğin 3+2 yaparsanız aşağıdaki gibi veriyi 3’e bölecek ve 2 şer tane de parity bilgisi koyacaktır. Yazma hızı RAID 5’e göre daha yavaş ama veri kaybına karşı daha güvenli bir RAID seviyesidir. 8+2 yaptığınızda veriyi 8 eşit parçaya böleceği için performans anlamında da iyi bir seviyeye geliyor.
Yukarıdaki RAID seviyelerini göz önüne alarak hangi uygulama için nasıl bir RAID yapısı isteyeceğinize karar verebilirsiniz. Bunun için uygulamalarınızın yaptığı IOPS ‘u dikkate almalısınız. Çok write yapmayan diskler için RAID 10 yapısını kullanarak gereksiz yere maliyeti 2 katına çıkarmaya gerek olmadığını düşünüyorum. Hangi uygulamanın(uygulamaların disklerinin ayrı olduğunu düşünerek bunu söylüyorum. Eğer bir diskte farklı iki uygulama varsa bu iki uygulamanın toplamda yaptığı IOPS’u bulabilirsiniz.) ne kadar IOPS yaptığını ölçerek bu uygulama için nasıl bir RAID yapısına ihtiyacınız olduğuna karar verebilirsiniz.
Storage: Storage kısmında pooling kavramı vardır. Birden fazla diski aynı havuza alarak daha sonra bu havuzdan sunucuda kullanmak üzere drive’lar tanımlayabilirsiniz. Birbirinden farklı türde diskleri bir araya getirerek bir pool oluşturabilirsiniz. Mesela 10 adet SSD, 20 adet SAS ve 50 Adet NearLine diski bir araya getirerek bir pool oluşturabilirsiniz. Disk adedi arttıkça alınabilecek maksimum IOPS miktarıda artacaktır. Bu şekilde farklı uygulamalara farklı pool’lar tanımlayarak uygulamalarınızın yaptığı IO’yu birbirinden izole edebilirsiniz. Tabi bu şekilde bütün uygulamalar için farklı pool’lar tanımlamakta mantıksız olacaktır. Çünkü bu şekilde yaptığınızda kullanılmayan ya da az kullanılan uygulamalar için gereksiz yere IO kapasitesi ayırmış olursunuz. Örneğin 10 adet SSD ve 20 adet SAS diski bir pool’a koyduğumuzu düşünelim. Bu 30 diskin toplamda bize sağlayabileceği maksimum IOPS miktarını(bu miktarı storage sorumlunuzdan ya da storage’ı aldığınız firmadan öğrenebilirsiniz), bu pool’dan tanımladığımız her drive paylaşacaktır. Hiç kullanılmayan ama büyüklüğü fazla olan bir veritabanı için böyle özel bir havuz oluşturduğumuz takdirde bu pool’dan alınabilecek IOPS miktarı boşa gitmiş olacaktır. Uygulamaların ihtiyacı olan IOPS miktarı dikkate alınarak, bu IOPS’u sağlayabilecek pool’lar oluşturmak ve bu uygulamara sağlanacak diskleri bu pool’dan vermek en profesyonel davranış olacaktır. “Veritabanı Sunucunuzun Yaptığı IOPS ve Throughput’u Data Collector Kullanarak Bulmak” isimli makalemi okumanızı tavsiye ederim.
Tabi birde tiering dive bir kavram varki, çok kullanılan drive’ları otomarik olarak SSD ye, az kullanılan drive’ları otomatik ve online olarak SAS ya da Nearline disklere aktarabiliyor. Eğer storage altyapınızda böyle bir imkanınız varsa işinizi çok kolaylaştıracaktır. Tiering işlemi hangi verinin sıcak veri(sürekli erişilen), hangi verinin soğuk veri(erişim gerçekleştirilmeyen) olduğu ile ilgili istatistik toplar ve daha sonra bu istatistikleri kullanarak arka planda verileri SSD-SAS-NEARLINE katmanları arasında taşır. Hangi zaman dilimlerinde istatistik toplayacağı ve hangi zaman dilimlerinde veriyi bu katmanlar arasında taşıyacağını siz belirleyebiliyorsunuz. Storage uzmanınıza mesai saatleri içersinde istatistik toplamasını, gece de online aktarım(SSD-SAS-NEARLINE katmanları arasında) yapmasını sağlayacak şekilde schedule etmesini söylemelisiniz.