Servis Sağlayıcı iseniz, bir VoIP veya NGN ortamında sahipseniz ve her geçen gün hizmet verdiğiniz sistem üzerinden geçen trafik artıyorsa buna rağmen hala tek bir SIP Proxy, SBC (Session Border Controller), SIP Registrar veya Softswitche sahipseniz artık birşeyler yapmanızın vakti gelmiş demektir. Aksi takdirde sistem yükünüz sature olduğunda müşteri isteklerine cevap veremeyebilir hatta sistemleriniz max yüke ulaştıktan sonra artık hiçbir isteğe cevap vermeyecek hale gelebilir. Bu da sizin için hem müşteri kaybı hem de daha önemlisi prestij kaybı demektir.
Mevcut durum için üretilebilecek çözümler sıralandığında ilk akla gelen yatay genişlemeye gitmektir. Yani mevcut altyapınıza hali hazırda varolan NGN lojik elemanlarından yenilerini eklemek olacaktır. Fakat sadece yeni elemanları eklemekle kalmamalı bir de bu elemanlar arasında yük paylaşımı yapmalısınız. Yoksa örneğin varolan bir sip proxy nizin sadece donanımını iyileştirmek isterseniz bu da bir yöntemdir. Ama uzun vadede isteklerinizi karşılayamayacaktır. Dolayısıyla bir proxy eklediniz fakat bu durumda bir de load balancer eklemeniz gerekecek.
Proxy, SBC veya Softswitche para verdim bir de Load Balancer a mı para vereceğim derseniz size open source kamailio 3.1.x öneriyorum. SER veya OpenSER i bilenler bilirler yeni kamailio ürünü eski SER versiyonlarının forking sonrasında devam eden kısmıdır ve her geçen gün yeni modüller, özellikler ve versiyonlar çıkmaktadır.
Load Balancing çözümü ile hem ortamınızı genişletmiş hem de single point of failure dan kurtulmuş olarak kendinizi güvende hissetmiş olacaksınız.
Bu makalede sizlere kamailio nun kurulumunda uzunca bahsetmeyeceğim. Kurulum oldukça basit. Kurulum ve db activation linkini takip ederek siz de kolaylıkla kurulumu tamamlayabilirsiniz. Kurulum işlemleri tamamlandıktan sonra yapacağımız 2 şey var.
- dispatcher modulunu aktif hale getirmek
- kamailio.cfg dosyasını load balancing yapacak şekilde yeniden düzenlemek
Kamailio da load balancing işlemini yapan modülün adına dispatcher denmektedir. Modülün load balancing için birçok algoritması vardır. Bunlardan genel olarak;
-
Round-Robin (sırayla)
-
Weight based load balancing (ağırlık atamalı)
-
Call load balancing ( aramalara göre)
-
Hashing over SIP message attributes (SIP mesajları içeriğine göre)
Bu modul stateless olarak yani durum bilgisi tutmadan çalıştığı için oldukça hafif ve performanslı bir şekilde çalışabilmektedir. Özerinden oldukça yoğun SIP trafiği geçirebilirsiniz.
ds_select_dst(set, alg)
Modül çalıştırıldıktan sonra load balance yapacağı sistemlerin bilgilerini text dosyasından veya database de bulunan dispatcher tablosundan okumaktadır. Bizim örneğimizde bu bilgiler database den okunmaktadır. Yukarıda bahsettiğimiz fonksiyonda load balance yapılacak destinationların adres bilgileri ve algoritma şekillerinin belirtildiği kısımdır.
database deki dispatcher tablosunda aşağıdaki bilgilerin olduğunu düşünelim;

Yukarıda verdiğimiz örneğe göre kamailio ya gelen istekler ilk önce 10.2.1.87 ipsi ile belirtilen ve priority si 1 olan sipwise sunucusuna yönlendirilecek. Eğer bu sunucuya ulaşılamaz ise priority si 0 olan 10.2.1.84 ipli elastix sunucusuna istekler yönledirilecektir.
set = fonksiyonda set ile tabir edilen kısım destinationlara atanan set_id nin numarasının belirtildiği kısımdır. bizim örneğimizde bu değer 1 dir.
alg = buraya girilmesi gereken değer integer dir. Load balancing de kullanıcak algoritmanın seçildiği kısımdır.
Girilebilecek değerler;
“0″ = callerid ye göre hashleme
“1″ = from_uri ya göre hashleme
“2″ = to_uri ya göre hashleme
“3″ = request_uri ya göre hashleme
“4″ = round-robin (sırayla gönderme)
“5″ = authorization-username e göre yönlendirme. username yok ise round-robin kullanılır.
“6″ = rasgele yönlendirme
“7″ = PVs string ine göre yönlendirme
“8″ = ilk destinationa göre yönlendirme. (failover durumları için sıkça kullanılan en önemli lb algoritmasıdır. Biz de örneğimizde bu algoritmayı kullacağız.)
“9″ = ağırlık puanına göre yönlendirme
“10″ = arama yük dağıtımına göre yönlendirme
Son aşama olarak ta kamailio.cfg dosyasını komple temizleyip aşağıdaki örnek config dosyasını default dosya yerine koyalım.
Config dosyasını da yukarıdaki şekilde düzenleyip kamailio yu stop/start ettikten sonra load balancerımız hazır duruma geçmiştir.
Test Aşaması;
nagios sunucusu = 10.2.1.83
kamailio LB sunucusu = 10.2.1.86
sipwise sunucusu = 10.2.1.87
elastix sunucusu = 10.2.1.84
Test olarak nagios sunucusu(10.2.1.83) üzerinden load balancera OPTIONS mesajları göndererek kamailio nun ve diğer LB için belirlenen destinationların davranışlarını gözlemleyelim. kamailio, sipwise ve elastix sunucuları üzerinde tshark ile 5060 portunu dinleyerek trafiğin nereye yönlendiğine bakalım.
nagios üzerinden 10.2.1.86 nolu load balancing özelliğini aktif ettiğimiz kamailio üzerine OPTIONS mesajı gönderip tüm sunucularda trace açıyorum.
kamailio trace çıktısı;
tshark port 5060 Running as user "root" and group "root". This could be dangerous. Capturing on eth0 0.000000 10.2.1.83 -> 10.2.1.86 SIP Request: OPTIONS sip:test@10.2.1.86 0.048693 10.2.1.86 -> 10.2.1.87 SIP Request: OPTIONS sip:test@10.2.1.86 0.051443 10.2.1.87 -> 10.2.1.86 SIP Status: 100 Trying 0.068035 10.2.1.87 -> 10.2.1.86 SIP Status: 403 Domain not served here 0.068654 10.2.1.86 -> 10.2.1.83 SIP Status: 403 Domain not served here
sipwise trace çıktısı;
Running as user "root" and group "root". This could be dangerous. Capturing on eth0 0.000000 10.2.1.86 -> 10.2.1.87 SIP Request: OPTIONS sip:test@10.2.1.86 0.000739 10.2.1.87 -> 10.2.1.86 SIP Status: 100 Trying 0.017228 10.2.1.87 -> 10.2.1.86 SIP Status: 403 Domain not served here
Görünüşe göre Load Balancing işlemimiz çalışıyor. Bir de sipwise sunucusunu down edip gönderilen isteğin elastix yönlendiğini görerek testimizi bitirelim.
kamailio trace çıktısı;
213.449915 10.2.1.83 -> 10.2.1.86 SIP Request: OPTIONS sip:test@10.2.1.86 213.456811 10.2.1.86 -> 10.2.1.87 SIP Request: OPTIONS sip:test@10.2.1.86 213.944417 10.2.1.86 -> 10.2.1.87 SIP Request: OPTIONS sip:test@10.2.1.86 213.950158 10.2.1.83 -> 10.2.1.86 SIP Request: OPTIONS sip:test@10.2.1.86 214.935501 10.2.1.86 -> 10.2.1.87 SIP Request: OPTIONS sip:test@10.2.1.86 214.950494 10.2.1.83 -> 10.2.1.86 SIP Request: OPTIONS sip:test@10.2.1.86 215.472834 10.2.1.86 -> 10.2.1.84 SIP Request: OPTIONS sip:test@10.2.1.86 215.473626 10.2.1.84 -> 10.2.1.86 SIP Status: 200 OK 215.473849 10.2.1.86 -> 10.2.1.83 SIP Status: 200 OK
elastix trace çıktısı;
Running as user "root" and group "root". This could be dangerous. Capturing on eth0 0.000000 10.2.1.86 -> 10.2.1.84 SIP Request: OPTIONS sip:test@10.2.1.86 0.000497 10.2.1.84 -> 10.2.1.86 SIP Status: 200 OK 2 packets captured
İşte tam istediğimiz şekilde LB işlemi yapılıyor. Sipwise sunucusu yeniden up durumuna geçtiğinde istekler sipwise üzerine yönlendirilecektir.
KAYNAKLAR;
http://nil.uniza.sk/sip/kamailio/installing-kamailio-31-debian-lenny
http://nil.uniza.sk/sip/kamailio/adding-mysql-support-kamailio-31-debian-lenny
http://kamailio.org/docs/modules/stable/modules_k/dispatcher.html






