EnderUnix Software Development Team






Yuksek Erisilebilir Sistemler
( High Availability )
 

 

Giris

13 Nisan 2002

 Bu makalede, IT departmaninizin cok yogun olarak ihtiyac duydugu kurulu sistemin 24x7x365 nasil ayakta durabilecegi anlatilacaktir.

 Gunumuzde internet'in is dunyasindaki onemi gercekten cok buyuktur. Artik herkes isini internetten goturmeye calismakta ve bunun en uygun yolunu aramaktadir. Sonuc olarak internetteki varliginiz buyuk bir onem kazanmaktadir ve bu varligin asla kesintiye ugramamasi gerekmektedir. Iste bu asamada CS (computer science)'in her zaman hayalini kurdugu fault-tolerant  sistemler buyuk onem kazanmaktadir. Internet uzerinde hizmet veren bir bankanin sistemlerini 1 dakika down olmasinin karsiligi 10.000$ 'la olculmektedir (Kaynak: www.openmagazine.net ). Ayrica 1995 te Oracle ve Datamation sirketleri tarafindan yapilan arastirmaya gore planli olmayan kesintiler yuzunden saat basina 85.000$ ile 300.000$ arasi para kaybi olmaktadir.

 Bir sistemin 7x24x365 ayakta durmasini saglamak icin gercekten cok buyuk paralar harcanmaktadir. Buyuk yazilim firmalari asla kesintiye ugramayan sistemleri gercellemek icin cok yogun calismakta buna uygun dosya sistemleri, yazilimlar ... yazmaktadir. Fakat bu yazilimlar genelde cok pahali olmaktadir. Ek olarak yuksek erisebilirlik icin cesitli donanimsal cozumde mevcuttur. Butun bunlara alternatif olarak acik kaynak kod dunyasinda bircok ucretsiz alternatif bulunmaktadir. Bunlar ucretli rakipleri kadar iyi performans vermektedir. Bazi ticari firmalar eskiden ucretli olarak sattigi HA (High Availability) yazilimlarini Linux uzerinde calisacak sekilde yeniden yazip ucretsiz dagitmaktadir ( Or: FailSafe http://oss.sgi.com/projects/failsafe ). Her ne kadar bu yazi Linux ana kaynak olarak yazilmis  ve ele alinan yazilim ( heartbeat http://linux-ha.org ) olsa da deneyimlerimin isiginda diger isletim sistemlerinde kullanilan HA yazilimlarindan da bahsedecegim. Bu isletim sistemlerine ornek olarak *BSD sistemler verilecektir.

 

 

Genel Notlar
Bu dokumanin en guncel hali; http://www.enderunix.org/docs/high_availability.html adresindedir.

Aksi belirtilmedigi takdirde bu kabil dokumanlarin haklari kendilerini yazan yazarlarda saklidir. Bu dokuman da, parca parca ya da tamamen herhangi bir sekilde, yazarinin izni dahilinde dagitilabilir.

Yazar, bu dokumani okuyanlarin ugrayacaklari herhangi bir zarardan oturu sorumluluk kabul etmez. Use at your own risk!

Burada kurulacak olan sistem iki Linux server, bunlar uzerinde calisan apache web server'i  ve HA'yi saglayacak olan heartbeat yazilimi olacaktir.

 

TODO:
1)Cesitli servislerin yuksek erisilebilirlikte nasil calisabileceginin  (Or: Squid, Mysql, Ipfilter ) anlatilmasi
 

Yuksek Erisebilirlik Nedir?
Yuksek Erisebilirlik bir servisin  7x24x365 ayakta olmasi demektir. Tek basina kurulacak hic bir makina (eger built-in HA ozelligi yoksa) bunu sunamaz. Onemli servislerimizin kostugu makinamizin ayakta durmasini engelleyecek bir cok olasilik mevcuttur. Bunlara SPOF (Single Point Of Failure) adi verilmektedir. Bunlara ornek vermek gerekirse:
 
 1) Isletim sisteminin cokmesi
 2) Uzerinde calisan yazilimin gocmesi
 3) Depolama alanimizin bozulmasi
 4) Elektrik kesilmesi
 5) Ayrica bilerek yapilan servis kesintileri. Mesela server'in upgrade edilmesi.
 6) Ve burada sayamiyacagim onlarca neden.

Linux 2.0 kernel'i ile HA hizmetlerini sunabilecek kavramlara kavusmaya baslamistir. Bu surec 2.2 serisi ile devam etmistir ve 2.4 kernelinin  sundugu yuksek erisilebilirlikli  ozellikler sayesinde (GFS, CODA, NBD, DRBD, LVM ... ) ust seviye ulasmistir.

Yuksek erisilebilirlik deyince aklimiza iki durum gelmelidir:
1) O servisin calistigi IP'nin surekli up olmasi
2) Servisin surekli up olmasi

Su an her iki secenegide sunacak yazilimlar mevcuttur. Ornek vermek gerekirse IP'nin surekli erisebilir olmasini saglayacak protocoller mevcuttur. Her ne kadar bu protokoller yeni de olsa ( 1998'de RFC'sisi yayinlanmistir ) VRRP (Virtual Routing Redundancy Protocol ) yeterli olgunluga erismistir. Linux ve FreeBSD'de Vrrp protokulu acik kaynak kodlu olarak gerceklestirilmistir. Boyle bir sistemde mevcut iki makidan biri master digeri slave olacaktir. Bu her iki makinada da surekli olarak erisebilir olmasini istedigimiz servisler calismalidir. Cunku bu protokol sadece IP'nin erisilemez oldugunda calisacak sekilde yazilmistir.

Diger secenek ise en uygun olani yani hem servislerin erisilebilirliginin kontrol edildigi hem de IP'nin erisilebilirligin kontrol edildigi bir sistem olacaktir. Burada anlatilacak olan linux-ha heartbeat yazilimi da bu sekilde calismaktadir.

 

 

Linux-HA ve Kavramlar

Linux-Ha ( http://www.linux-ha.org ) projesinin temellerini Linux-HA HOWTO atmistir. Bu HOWTO' da IT sektorunde bulunan diger buyuk sirketlerinin urunlerinde bulunan ozelikler ve HA icin ortaya konmus gerekli kavramlar aciklanmaktadir. Bu kavramlardan en onemlilerini bu yazida anlatacagim:
 

1)Master Node ve Slave Node: Adinda anlasilacagi uzere kurulacak iki makinadan biri master digeri slave olacaktir
2)IP Address Takeover : Master node'un gocemsi durumunda slave node'un bu IP'yi uzerine almasi.
3)Heartbeat : Master ve slave node arasinda surekli gonderilen ve servis ve sistemin UP oldugunun anlasilmasinda kullanilan UDP paketleri
4)MAC Address Takeover: IP adresini devralan slave node agdaki diger bilgisayarlarin bu IP'nin yeni sahibinin kendisi oldugunu aciklamasi icin aga "gratuitous ARP" gondermesi ve boylece agdaki diger bilgisayarlarin ve routerin bu IP icin gelen paketleri bu yeni MAC adresine yonlendirmesi. Daha fazla bilgi icin RFC 826 okuyabilirsiniz.
5)Cluster IP: DNS sunucunuzda tanimlayacaginiz IP. Bu IP hic bir zaman master ve slave node'ta direk tanimli olmayacaktir. Master up oldugunda bu IP icin alias yaratacak, goctugunde ise bu IP slave node'ta alias olarak tanimlanacaktir!!!!


On hazirlik

Su ana kadar konseptlerden bahsettik. Bu asamadan sonra bu konseptleri kullanarak www.EnderUNIX.ORG  clusterimizi kuracagiz. Ilk asamada www.linux-ha.org/download adresinden heartbeat yazilimini indirecek ve sistemimize kuracagiz. Buna ek olarak surekli acik olmasini istedigimiz serviside her iki makina da kuracagiz ki bizim durumumuzda bu apache olacak. Kurulacak sistemin daha iyi anlasilmasi icin Sekil1 'e bakilabilir:
 


Sekil1

Simdi ustte gorulen grafigi biraz aciklayalim. Goruldugu uzere DNS'imizde www adresi olarak 212.65.128.82 adresi kayitlidir. Fakat www1 ve www2 makinalarinin yine bu adres segmentinde olan degisik IP'leri vardir. Fakat son kullanici sadece www'in karsiligi olan adresi yazarak istedigi sayfaya ulasilabilecektir. Gerekli filtrelemeler yaparak
212.165.128.81:80 ve 212.165.128.83:80 adresine ulasilmasi engellenilebilir.

Ek olarak dikkat edilecegi uzere heartbeat mesajlari farkli iki sistemden iletilmektedir. Bunlardan biri Seri kablo vasitasi ile digeri ise eth1 interface'leri ile. Ilk bakista Null-modem kablosunun kullanilmasi gereksiz gibi gozukebilir fakat eger SPOF 'lari azaltmak icin bu gereklidir. Unutulmamalidirki  tcp/ip stack'i de gocebilir fakat seri interface uzerinden iletilen mesajlar devam ederek sistemin durumu hakkinda saglikli bir bilgi edinilebilir. Ek olarak heartbeat yaziliminda seri interface'lerin tanimlanma zorunlulugu vardir.

Bu asamadan sonra sistemimize heartbeat yazilimini kurabiliriz.

#rpm -ihv <heartbeat_rpm_dizini>/heartbeat-EN_SON_VERSIOYON-i386.rpm
 

Bunun yaninda sisteminize Apache paketinide kurun. Apache kurulumu bu dokumanin kapsama alaninin disindadir. Fakat kurdugunuz apache'nin her iki makinada da ayni dizinde olmasina ozen gosterirseniz ileride daha az problem yasarsiniz.

 

Onemli NOT: Sistem baslangic scriptlerinden /etc/rc.d/rc*.d dizini altindaki apache baslangic linklerini silin. Sadece /etc/rc.d/init.d/ altindaki kalsin. Apache'nin baslatilmasi ve durdurulmasi ile heartbeat yazilimi ilgilenecektir!

 


HeartBeat'in Konfigurasyon Dosyalari
Isimizin cogunu hallettik. Buraya kadar geldiyseniz artik devamini da yaparsiniz :) Bu asamada duzenlememiz gereken 3 adet konfigurasyon dosyasi var. Bu konfigurasyon dosyalarinin orneklerini eger yazilimi rpm'den kurduysaniz /usr/share/doc/packages/heartbeat dizininde bulabilirsiniz. Bu dosyalar:

1) /etc/ha.d/authkeys
 
   # md5 kullaniriz.
   auth 3
   3 md5 "benim sifrem"


Bu dosya heartbeat mesajlarinin gercekten istenen makina tarafindan alindigini belirlemek icin kullanilir ve dosyanin sahibi root olmalidir ve sadece root tarafindan okunabilmelidir. Aksi takdirde heartbeat calismayi reddeder. Kisaca
 
   #chmod 600 /etc/ha.d/authkeys


2) /etc/ha.d/ha.cf

Bu dosya cluster sistemindeki node'lari ve heartbeat mesajlarinin gonderilecegi arabirimleri belirlemek icin kullanilir.

# Sistemdeki node'lari belirleyin. Bu isimler mutlaka " uname -a " isimler olmalidir.

   node www1.enderunix.org
   node www2.enderunix.org

#udp mesajlarinin gonderilecegi interface
 
  udp eth1
#Heartbeat mesajlari kac saniye araliklarla gonderilecek
  
  keepalive 2
# Makinanin kac saniye sonra erisilemez olarak ilan edilecegi

  deadtime 10

#Seri arabirimin hizi

  baud 19200
# Hearbeat mesajlarinin hangi udp portundan gonderilecek

  udpport 694

#
seri interface

  serial /dev/ttyS0

Seri interface'in mesajlari tasiyip tasimadigini su sekilde ogrenebilirsiniz:

www1# cat < /dev/ttyS0
www2# echo "Selam dunya" >/dev/ttyS0

Bu asamada www1 makinasinda Selam dunya yazisini gorebilmelisiniz.
 

3) /etc/ha.d/haresources

#Bu dosya hangi node'un master olacagini ve hangi servisin calistirilacagini belirler:

  www1.enderunix.org 212.65.128.82 httpd

Ustte gorulecegi uzere master node www1.enderunix.org. Cluster IP'si 212.65.128.82 ve /etc/rc.d/init.d altindaki baslangic servisinin adi httpd' dir .


 

 

Dosyalarin Senkronizasyonu.
Bu asamaya kadar pek cok mesafe aldik. Fakat onemli bir nokta da her iki sistemde bulunan dosyalarin birbiri ile senkronize olarak calismasidir. Ve bu icerik birbiri ile belirli araliklarla senkronize edilmesidir. Master node'umuz www1 olduguna gore www1'in /var/www/htdocs altinda bulunan dosyalar karsi taraftaki /var/www/htdocs ile ayni olmalidir. Bunun icin onerilebilecek bir cok method var. Bu metodlar kernel tabanli olabilecegi gibi userland tabanli'da olabilir. Burada ben dosya senkronizasyonu icin rsync kullanacagim. Fakat rsync bizim istedigimiz asil sistem degildir. Dosya senkronizasyonu icin kernel bazinda ya da hardware bazinda diger secenekler de dikkate alinmalidir. Bunlara ornek vermek gerekirse:

 a)DRBD Lan'inizdaki bulunan bilgisayarlarin dosya sistemini mirrorlamak icin
 b) NBD (Network Block Device): Bu sistemde kernel ile file sistem arasina bir network layer koyarak master node'a yazilan bilgilerin ayni anda diger slave mode'a da yazilmasini saglar.
 Bu ve bunun gibi linkleri www.linux-ha.org adresinden bulabilirsiniz.

 RSYNC:

Sisteminize rsync paketini kurulu oldugunu farzediyorum. www1'i server www2'yi de client olarak ayarlayacagiz. Buna gore server'da basit olarak /etc/rsyncd.conf dosyasina

[ha]
 path = /var/www/htdocs
 comment = my HA system

 

Bu asamada rsync ile alakali bir kac sey soylemenin gerekliligini hissediyorum. Rsync iki sistem arasi dosya transferi icin yazilmis bir program ve sistemdir. Rsync'de amac mumkun olan en az bant genisligini yemek oldugundan dosya transferleri hususunda ftp ve bunun gibi protokollerden cok daha performansli olmaktadir. Ayrica rsyncd.conf'u degistirdikten sonra rsync process'ine HUP sinyalini gondermeye gerek yoktur. Rsync acilan her baglanti icin tekrar konfigurasyon dosyasini okur ek olarak rsync dosya transfer shell'i olarak yeni versiyonlarinda rsh yerine ssh kullanmktadir. Butun bunlardan sonra serverda (www1) rsync'yi daemon modunda calistiralim ve bu komutu gerekli sistem baslangic scriptlerine ekliyelim.

#echo "rsync --daemon" >> /etc/rc.local


Sira geldi client makinamizi konfigure etmeye. Clietn makinamizda basit olarak su scripti kullanabiliriz.

----- /etc/rsync.sh -------------
#!/bin/sh

LOGFILE=/var/log/rsync.log
LOCALDIR=/var/www/htdocs
REMOTEDIR=rsync://www1.enderunix.org/ha
rsync -avzH --stats --delete \
$REMOTEDIR $LOCALDIR >> $LOGFILE
---------/etc/rsync.sh-----------

Simdi bu scriptimizi cronumuza ekliyelim. Her 5 dakikada bir www1'deki degisiklikler (yeni dosyalar ya da silinen dosyalar) www2'ye gecirilsin.




 

Heartbeat'in Calistirilmasi
Simdi sira hearbeat yaziliminin calistirilmasina. Oncelikle heartbeat baslangic scriptimizin gerekli run levellarda calismasini saglayalim. Ben sistemimi her zaman run level 3'ten acarim. Sistemini run level 5'ten acanlar assagidaki gibi bir degisikligi run level 5 scriplerine yapmalari lazim gelmektedir.

#cd /etc/rc.d/rc3.d
#ln -sf /etc/rc.d/init.d/heartbeat S49heartbeat

Simdi heartbeat sistemimizi devreye sokabiliriz. Size tavsiyem oncelikle www1 yani master serverdaki heartbeat'i calistirin ondan sonra www2'yi calistirin.

#/etc/rc.d/init.d/heartbeat start

 

HA calisiyor mu?
Simdi heartbeat'in calisip calismadigini kontrol edelim. Assagidaki log dosyasi www.linux-ha.org/download/GettingStarted.html 'den alinmistir. Log dosyasinin yeri /var/log/ha-log 'tur.
 
heartbeat: 2000/01/18_14:26:45 info: Neither logfile nor logfacility found.
heartbeat: 2000/01/18_14:26:45 info: Defaulting to /var/log/ha-log
heartbeat: 2000/01/18_14:26:45 info: ***********************
heartbeat: 2000/01/18_14:26:45 info: Configuration validated. Starting heartbeat.
heartbeat: 2000/01/18_14:26:46 notice: Starting serial heartbeat on tty /dev/ttyS0
heartbeat: 2000/01/18_14:26:46 notice: UDP heartbeat started on port 694 interface eth1
heartbeat: 2000/01/18_14:26:46 notice: Using watchdog device: /dev/watchdog
heartbeat: 2000/01/18_14:26:46 error: Cannot open /proc/ha/.control: No such file or directory
heartbeat: 2000/01/18_14:26:56 warn: node linuxha2.linux-ha.org: is dead
heartbeat: 2000/01/18_14:26:56 INFO: Running /etc/ha.d/rc.d/status status
heartbeat: 2000/01/18_14:26:57 info: Requesting our resources.
heartbeat: 2000/01/18_14:26:58 INFO: Running /etc/ha.d/resource.d/IPaddr 192.168.85.3 status
heartbeat: 2000/01/18_14:26:58 INFO: Running /etc/ha.d/rc.d/ip-request ip-request
heartbeat: 2000/01/18_14:27:00 info: node linuxha2.linux-ha.org: status up
heartbeat: 2000/01/18_14:27:00 INFO: Running /etc/ha.d/rc.d/status status
heartbeat: 2000/01/18_14:27:28 Acquiring resource group: linuxha1.linux-ha.org 192.168.85.3 httpd smb mirror
heartbeat: 2000/01/18_14:27:28 INFO: Running /etc/ha.d/resource.d/mirror  start
heartbeat: 2000/01/18_14:27:29 INFO: Running /etc/rc.d/init.d/smb  start
heartbeat: 2000/01/18_14:27:30 INFO: Running /etc/rc.d/init.d/httpd  start
heartbeat: 2000/01/18_14:27:31 INFO: Running /etc/ha.d/resource.d/IPaddr 192.168.85.3 start
heartbeat: 2000/01/18_14:27:32 INFO: ifconfig eth0:0 192.168.85.3 netmask 255.255.255.0 broadcast 192.168.85.255
heartbeat: 2000/01/18_14:27:32 Sending Gratuitous Arp for 192.168.85.3 on eth0:0 [eth0]


Bu log dosyasi master node'tan alinmistir. Simdi yavas yavas log dosyasini inceleyelim. Ilk basta linuxha1 makinasi ( yani su an loglarini okudugumuz makina) ilk basta log dosyasinin yerini belirtiyor.

Sonra seri heartbeat'i calistiriyor.
Bu islemden sonra eth1'den udp:649. porttan udp heartbeat mesajlarini gondermeye basliyor.
Ve bundan sonra linuxha2 makinasinin down oldugunu goruyor.
Gerekli IP'yi alias olarak UP ediyor.
Ve gerekli servisleri (ki burada httpd ve smb ) baslatiyor.
En son olarak ise aga gratuitous ARP gondererek 192.168.85.3'sinin kendinde oldugunu belirtiyor. Burada dikkat edilirse linuxha2 makinasi ilk basta "dead" olarak anons  ediliyor. Bunun sebebi linuxha2'de hearbeat servisinin 10 saniye sonra baslatilmasidir.

NOT: Bu makaleyi yazdigim yerde iki tane bilgisayarim olmadigi  ve mevcut kurulu sistemlerde degisiklik yapilmamasi gerekliliginden dolayi bu loglari kullanmak zorunda kaldim!.

 

TODO:
1)Degisik servislerin heartbeat'te nasil calistigini gostermek
2)Heartbeat yazilimin automake'i kullanan versiyonunu kullanarak bu yazilimi FreeBSD' de calistirmak.
3) Baska HA yazilimlarini anlatmak.

Not: Bu yazinin yazilim tarihi itibari ile FreeBSD'de derlenebilen heartbeat yaziliminda bir bug vadir. FreeBSD' deki problem makinalarin gratuitous arp gonderememe sorunudur. Fakat bunun uzerinde calisilmaktadir. Mailing list arsivinden gerekli bilgilere ulasabilirsiniz.
Linkler
1) Alan Robertson tarafindan devam ettirilen linux-ha sayfasi
    http://www.linux-ha.org

2)Sgi tarafindan Open Source yapilan FailSafe yazilimi. Java ile yazilmis arabirimi mevcuttur.
   http://www.linux-ha.org/FailSafe

3)IBM tarafindan yazilan Ldap cluster kurulumu:
   http://www-1.ibm.com/servers/esdd/articles/linux_clust/index.html

4)Offical Linux-HA HOWTO
   http://sunsite.unc.edu/pub/Linux/ALPHA/linux-ha/High-Availability-HOWTO.html

5) Vrrpd protokolu: rfc2338
    Linux Icin: http://w3.arobas.net/~jetienne/vrrpd/
    FreeBSD Icin : www.bsdshell.net

6) Linux'te ticari olarak Cluster cozumu sunan Linuxnetworx
    www.linuxnetworx.com

7) Bircok isletim sisteminde calisabilen cluster yazilimi (FreeBSD versiyonu da mevcut)
   www.polyserve.com

9) Mission Critical Linux:
    www.missioncriticallinux.com

10) Va linux firmasinin Cluster yazilimi:
     VACM
Son Sozler:

Lutfen soru sormadan once bu dokumani bir daha okuyun Eger sorunuza cevap bulamazsaniz mail arsivlerini okuyun. Eger hala aradiginizi bulamazsaniz !!! bana mail atin belki bir kac ay icinde cevap verebilirim. 

ofsen@EnderUNIX.ORG

Omer Faruk Sen
http://www.EnderUNIX.ORG/
http://www.faruk.net
 

Copyright (c) 2001 Omer Faruk Sen. Kaynak gosterilmek sartiyla kullanilabilir.

EnderUNIX Software Development Team Member