Pazartesi, Nisan 12, 2010

xenserver üzerinde software raid ile veri deposu (storage repositories) oluşturmak

basit sevideye donanıma sahip bir sunucudan maksimum faydayı sağlamak, disk erişim süresini olabildiğince düşürmek amacıyla RAID kullanmaya karar verdim.

Aslına bakarsanız vmware esxi den xenserver a geçmeye karar vermemde en büyük etken xenserver in software raid ve yedekleme çözümlerindeki esnek yapısı olmuştur.
itiraf etmeliyim ki ilk tanıştığımız zamanlarda gui den kaynaklı bir soğukluk yaşadıysam da, XEN komutları ve XenAPI ile haşır-neşir oldukça benim için geçerli çözümün xenserver olduğunu anladım.

sahip olduğum donanım intel in "fakeraid veya softraid" denen anakart destekli raid yapısını destekliyor ama yaptığım denemeler ve incelemeler sonucunda linux kernelinin sunduğu software raid in çok daha güvelinir ve hızlı olduğunu gördüm ve bunu kullanmaya karar verdim.

xenserver kurulum sırasında software raid desteği vermiyor fakat kurulum bittikten sonra konsol uzerinden raid i yapılandırmak ve xenserver a sr olarak bağlamak son derece kolay. bunun için aşağıdaki adımları izledim

not: raid den onceki ve sonraki disk erişim sürelerini olcmek size performans/seçtiğiniz raid seviyesinin uygunluğu hakkında bilgi verecektir. bunu en basit şekilde şöyle yapabilirsiniz.

hdparm -tT /dev/sdb -> sdb isimli (ikinci sata) diskin okuma hızına bakin ve not edin. bunu raid için kullanacağınız her bir disk için ayrıca tekrarlayabilirsiniz.

yazma hızını ölçmek için
time dd if=/dev/zero of=./testfile bs=65536 count=65536
komutunu kullanabilirsiniz. bu komut sisteminizde testfile isimli 4gb boyutunda bir dosya oluşturacak ve ne kadar zamanda yaptığı bilgisini verecektir.

raid yapısını oluşturduktan sonra aynı ölcümleri
/dev/md0 için yapabilirsiniz.




1) sahip olduğum donanım özellikler;
xeon 5500 serisi 1600mhz işlemci
6gb ram
1x 250gb hdd -> xenserver in kurulumu için kullandım
4x 500gb hdd -> raid için kullandım
1x 1tb hdd -> sunucu ve sanal sistemlere ait yedekler için kullandım




2) size en uygun raid tipini belirlemek;
raid için kullanacağım 4 diskim var ve bu diskler ile oluştura bileceğim raid yapılarını raid0, raid5,raid6 ve raid10 olarak belirledim

raid0 da disklerin hepsini tek bir disk olarak görüyor ve teoride okuma ve yazma hızını disk adedince hızlandırıyor. diğer seçenekler içerisinde en hızlı disk erişimini raid0 sunuyor fakat herhangi bir hata toleransı olmadığı için disklerden biri arızalandığında tüm verilerinizi kaybediyorsunuz.

sanal sistemlerdeki verilerin değişme sıklığı ve yedekleme işleminin sıklığı göz önüne alınarak sizin için bir seçenek olabilir. tabi olası bir disk arızasında yeniden yapılandırma için geçecek süreyi de unutmamak lazım.

raid5 toplam disk sayısı - 1 kadar kullanılabilir alan sunuyor. hata toleransı 1 disk arızası. okuma hızı yuksek fakat yazma hızı parity den dolayı düşük. rebuild süresi uzun ve sistem açısından yorucu. ayrıca işlemciyi paritysiz yapılara oranla daha fazla yoruyor. ben boyle bir yapı için uygun görmedim.

raid6 toplam disk sayısı - 2 kadar kullanılabilir alan sunuyor. hata toleransı 2 disk arızası. raid5 için geçerli olan olumsuzluklar (bu kelime benim sistemim için geçerli. donanım destekli ve 4ün üzerinde disk içeren bir yapıda tercihim raid6 olurdu) bunun içinde geçerli.

raid10 toplam disk sayısı / 2 kadar kullanılabilir alan sunuyor. hata toleransı 2 disk arızası. parity kullanmıyor. benim için bu güzel bir şey. basitçe raid0+1 olarak biliniyor. donanıma bağlı olarak değişse de teoride, 4 diskli bir yapıda okuma ve yazma hızını iki misli artırıyor.

yukarıda belirttiğim düşüncelerinin tümü sahip olduğunuz donanım ve disk sayısına bağlı olarak değişiklik gösterebilir. ihtiyaçlarınızı belirleyerek (disk alanı, performans, güvenlik) elinizdeki donanıma uygun seçimi yapabilirisniz.

benim için en mantıklısı raid10 olarak görünüyor.


3) xenserver kurulumu esnasında herhangi bir veri deposu (storage repositories) seçmeden kurulumu 250gb disk üzerine yaptım.

4) fdisk -l komutu ile mevcut disklerin yapısını listeledim. kurulumu yaptığım disk sda, 500gb lik 4 disk sdb,sdc,sdd,sde ve daha ileride yedekler için kullanacağım 1tb lik disk sdf şeklinde görünüyor.

raid için kullanılacak diskleri fdisk ile yapılandırdım

fdisk /dev/sdc
o ile yani bir disk yapısı oluşturdum
n ile yeni bir partition ekledim
p ile primary 1 ile birinci bölümü seçtim
enter ve enter ile ön tanımlı değerleri seçerek diskin tamamını kullandım.
t ile diskin tipini değiştirmek istediğimi ve
fd ile Linu Software tipinde olacağını belirttim.
w ileyaptığım işlemleri disk üzerine kaydederek çıktım



[root@vserver ~]# fdisk /dev/sdc

The number of cylinders for this disk is set to 60801.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): o
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.


The number of cylinders for this disk is set to 60801.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-60801, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-60801, default 60801):
Using default value 60801

Command (m for help): p

Disk /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdc1 1 60801 488384001 83 Linux

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): p

Disk /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdc1 1 60801 488384001 fd Linux raid autodetect

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@vserver ~]#



diğer üç disk içinde aynı işlemi yaptım.

5) /dev dizini içerisinde md0 ı göremediğim için oluşturdum
mknod /dev/md0 b 9 0


6) aşağıdaki komut ile raid10 dizesini oluşturturdum
mdadm --create /dev/md0 --level=raid10 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1


7) çıkabilecek sorunlara karşılık raid yapısını mdadm.conf dosyasına yazdırdım
mdadm --detail --scan > /etc/mdadm.conf


8) aşağıdaki komut ile md0 raid bağlantı noktasını xenserver a yeni bir sr olarak ekledim
xe sr-create type=lvm content-type=user shared=false device-config:device=/dev/md0 name-label=raiddiskim


9) bu işlemden sonra XenCenter da "raiddiskim" ismi ile yeni bir storage oluşması gerekir.

artık sananl makinalarınızı bu disk üzerinde oluşturabilirsiniz ;)

not: rebuild işlemi disklerin boyutu ve donanıma bağlı olaral biraz zaman alacaktır ve bu esnada disk erişim performansı düşü olacaktır. test etmek işlemin bitmesini bekleyin.
mdadm --detail /dev/md0 komutu ile süreci takip edebilirsiniz.

Hiç yorum yok: