Cuma, Nisan 23, 2010

Multi-threaded gzip

yedekleme sistemleri ne kadar gelişmiş olursa olsun, benim için hiç bir şey tar/gzip ikilisi ile harici bir diske alınan yedek kadar iç rahatlatıcı olamaz :)

fakat yedeklenmesi gereken yüz binlerce dosya ve yüzlerce GB veriniz varsa, sahip olduğunuz işlemcilerin veya coreların tümünden faydalanamıyor olmak gerçekten çok fazla zaman kaybı ve can sıkıntısına sebep olabilir. çünkü gzip Multi-threaded çoklu işlem/ci desteğine sahip değil (en azından solaris 5.9 durum böyle).

4 işlemciye sahip bir sun sunucu üzerinde yaklaşık 600GB boyutunda ve binlerce dosyadan oluşan bir alanın yedeğini almak neredeyse yarım gün sürüyordu. bu işlem boyunca sistem sahip olduğu 4 işlemciden sadece birisini kullanıyor, ben bitmesi için dört gözle beklerken diğer 3 işlemci tembel tembel yatıyordu.

sıkıştırma işlemlerinde, sistemin sahip olduğu bütün işlemcilerden en fazla faydayı nasıl sağlarım sorusunu araştırırken gördüğüm en kullanıbilir iki yöntemi sizlerle de paylaşmak istedim.

1) farklı terminaller üzerinden paralel işlemler başlatmak: eğer, gzip ile arşivliyeceğiniz dosyalar; herbir işlem için bölebileceğiniz klasörler üzerindeyse veya dosyalar find ile gruplanabilir şekildeyse bu yöntemden faydalanabilirsiniz.

bu yöntemde, sahip olduğunuz işlemci adedince farklı terminaller açıp her birinden farklı alanların arşivleme işlemini başlatıyorsunuz. fakat benim gibi dağınık şekilde onbinlerce dosyanız varsa bunları belli bir mantık çerçevesinde bölüp farklı terminaller üzerinden arşivlemek pekde mümkün olamıyor.

2) kaynak dosyalarını http://zlib.net/pigz/ adresinde bulabileceğiniz pigz programı.

sıkıştırma - açma ve hatta parametler bakımından tamamen gzip ile uyumlu olan bu program gzip in multi-processor / multi-core destekli versiyonu.

kullanmak için tek yapmanız gerek sisteminize uygun versiyonunu yuklemek veya sisteminizde kaynağından derlemek ve gzip yerine pigz i kullanmak.

ben sunfreeware.com adresinden sistemime uygun olan "pigz-2.1.5-sol9-sparc-local.gz" dosyasını indirdim ve gunzip ile dosyayı açtıktan sonra
pkgadd -d pigz-2.1.5-sol9-sparc-local komutu sistemime yükledim.

daha önce yaklaşık yarım gün sürdüğünden bahsettiğim işlemi aşağıdaki şekilde pigz ile başlattım ve oratlama 7 saatde yedekleme işlemi tamamlandı.

tar cvXf /yedek/exlude.list - /dfiles |/usr/local/bin/pigz -4 -c > /tmp/dfiles_`date '+%Y%m%d'`.tar.gz

işlem sonucunda oluşan dosya gunzip ile sorunsuz şeklilde açıldı. yanlız, gunzip da tıpkı gzip gibi çoklu işlemci desteğine sahip değil. birden fazla işlemci ile açma işlemi yapabilmek için paketle birlikte gelen unpigz komutunu kullanabilirsiniz.

Pazartesi, Nisan 12, 2010

xenserver da centos-base deposu ve yum un etkinleştirilmesi

herşeyden önce şunu hatırlatmak isterim ki; xenserver sanallaştırma için özelleştirilmiş - amaçlanmıştır. bu sunucu uzerinde doğrudan başka bir hizmet sunmayı amaçlamak mantıklı bir tasarruf olmayacaktır.

buna rağmen kısmen merak kısmen ise kaderin cilvesi doğrultusunda bu sunucuyu amacı dışında kullanmak ve ek bazı yazılımları yuklemek gerekebiliyor ;) bunu nasıl yapacağımıza bakalım.

xenserver konsoluna bağlanın
tercih ettiğiniz editör ile "/etc/yum.repos.d/CentOS-Base.repo" dosyaını açın ve

[base] başlığı altındaki
enabled=0 değerini
enabled=1 olarak değiştirin, kaydedin.

artık centos-base deposındaki uygulamaları yum ile yükleyebilirsiniz.



[root@vserver ~]# yum install mc
Loading "fastestmirror" plugin
Determining fastest mirrors
* citrix: updates.vmd.citrix.com
* base: mirror.vit.com.tr
citrix 100% |=========================| 951 B 00:00
primary.xml.gz 100% |=========================| 243 B 00:00
base 100% |=========================| 2.1 kB 00:00
primary.sqlite.bz2 100% |=========================| 1.6 MB 00:02
Excluding Packages from CentOS-5 - Base
Finished
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package mc.i386 1:4.6.1a-35.el5 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
mc i386 1:4.6.1a-35.el5 base 2.1 M

Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)

Total download size: 2.1 M
Is this ok [y/N]: y
Downloading Packages:
(1/1): mc-4.6.1a-35.el5.i 100% |=========================| 2.1 MB 00:03
warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID e8562897
Importing GPG key 0xE8562897 "CentOS-5 Key (CentOS 5 Official Signing Key) Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: mc ######################### [1/1]

Installed: mc.i386 1:4.6.1a-35.el5
Complete!

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.

Linux Support CDsini xenserver kurulumu bittikten sonra ISO dosyasından yüklemek

XenServer üzerinde sıkça kullandığım cdlerin image dosyaları için bir "CIFS ISO library" tanımladım ve support cdsini de buraya taşıdım.

Sizler iso ktüphanesi oluşturmak istemiyorsanız indirdiğiniz iso dosyasını winscp ile xenserver a transfer edebilir veya wget ile xenserver a indirebilirsiniz.

ssh ile konsola bağlandım ve ardından sırasıyla;

mount komutu ile iso kütüphanesinin bağlantı adresine baktım
//172.16.1.251/samba.bim.Yedekler on /var/run/sr-mount/672c638a-af49-2539-9ddd-fbad61652f27 type cifs (rw,mand)


iso dosyasını başlamak için mnt altında bir klasor olusturdum
mkdir /mnt/iso


mount komutu ile iso dosyasını /mnt/iso klasörüne bağladım
mount -o loop /var/run/sr-mount/672c638a-af49-2539-9ddd-fbad61652f27/iso_files/XenServer-5.5.0-Update2-linux-cd.iso /mnt/iso/


bağlantı noktasına giderek CDnin içeriğini listeledim

[root@vserver ~]# cd /mnt/iso/
[root@vserver iso]# ls -al
total 248
dr-xr-xr-x 4 root root 2048 Jan 12 21:58 .
drwxr-xr-x 3 root root 4096 Apr 12 12:20 ..
dr-xr-xr-x 2 root root 2048 Jan 12 21:24 client_install
-r--r--r-- 1 root root 26759 Jan 12 21:19 EULA
-r-xr-xr-x 1 root root 1817 Jan 12 21:58 install.sh
-r--r--r-- 1 root root 213207 Jan 12 21:19 LICENSES
dr-xr-xr-x 2 root root 2048 Jan 12 21:58 packages.linux
-r--r--r-- 1 root root 27 Jan 12 21:58 REVISION


CD nin içerisindeyken ./install.sh komutu ile yüklemeyi başlattım ve çok kısa bir süre sonra yükleme işlemi tamamlandı
[root@vserver iso]# ./install.sh
Warning: If you are in a pool, you must install this pack on all servers.
Starting installation of Linux Pack...

Verifying templates-debian...
Installing templates-debian...

Restarting XAPI...
Stopping xapi: .. [ OK ]
Starting xapi: .....start-of-day complete. [ OK ]
Linux pack installation complete.
[root@vserver iso]#