Kamailio 3.1.x (OpenSER) ile SIP Load Balancing

Filed in Genel | Gezegen | Linux | SER | SIP | VoIP Leave a comment

     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.

  1. dispatcher modulunu aktif hale getirmek
  2. 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.

Dispatcher modülü ile alakalı genel bilgileri verdikten sonra modulde bizim için gerekli olan en önemli fonksiyon ve bu fonksiyonun alabileceği değerlerle alakalı bilgiler verelim.
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;

http://www.bayramkaragoz.org/wp-content/uploads/table.jpg

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.

kamailio.cfg

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

VN:F [1.9.13_1145]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.13_1145]
Rating: 0 (from 0 votes)
Share
Create PDF    Send article as PDF   

, , ,

SIP Serverların Nagios ile Monitör Edilmesi

Filed in Genel | Gezegen | Linux | Network Leave a comment

Uzun bir aradan sonra herkese selamlar,

Bu makalede sizlere networkunuzde kurulu durumda bulunan sip servislerini monitör etme ve oluşabilecek durumlara göre gerektiğinde mail veya sms ile bilgilendirme işleminin nagios ile nasıl kolaylıkla yapılabildiğini anlatacağım. Anlatım genel olarak 4 aşamadan oluşacaktır. Aşamaları sıralamak gerekirse;

  1. Nagios3 kurulumu

  2. Nconf ile nagios konfigurasyonunun kolaylıkla yapılabilmesi için nconf kurulumu

  3. check_sip plugin inin aktif hale getirilmesi

  4. mail ile bilgilendirmenin aktif hale getirilmesi

Bir sunucunun veya servisin ayakta olup olmadığının öğrenilmesi için çeşitli yöntemler vardır. Ping atıp cevabını beklemek bunlardan en bilinen ve basit olan yoldur. Fakat monitör edilen sunucuda çalışan servis olduğu sürece sadece bu yöntem yeterli değildir. Bu yöntemin de bir adım ilerisine geçip servisin ayakta olup olmadığını servisin çalıştığı porta UDP veya TCP istekler göndererek te monitör işlemini gerçekleştirebiliriz. Fakat servisin açık ama isteklere cevap vermediği durumlarda da bu yöntem geçerliliğini yitirmektedir. Bu yönteminde bir adım ilerisine gidip servis ile servisin anlayacağı dilden konuşmak en mantıklı yoldur. Bu nedenle SIP servisinin ayakta olup olmadığını kontrol etmek için SIP dilini kullanacağız. Benim gibi VoIP, SIP ve NGN işleri ile ilgilenenlerin de bildiği gibi SIP uygulamalarının ayakta olup olmadığını genellikle OPTIONS mesajı ile kontrol ederiz. Kontrol edilecek servise OPTIONS mesajı gönderilip karşılığında 200 OK veya arzu edilen başka bir yanıt beklenir. Yanıt geldiği sürece servisin ayakta olduğunu bilirsiniz. Fakat yanıt gelmediği zamanda da servisinizin çalışmadığı sonucuna vararak bir an önce servisi çalışır hale getirmelisiniz. Bu uygulamaların insanların telefon görüşmesi yapmasını sağladığı gerçeğini de işin içine katarsanız servislerin her zaman ayakta ve çalışır durumda olması çok büyük önem taşımaktadır. Daha fazla edebiyat yapmadan OPTIONS mesajlaşması ile daha ayrıntılı bilgi isteyenlere http://tools.ietf.org/html/rfc3261#section-11.1 linkini incelemelerini tavsiye ederek kurulumumuza başlıyorum.

1. Nagios kurulumu

Öncelikle kurulumu hiçbir zaman vazgeçemediğim linux dağıtımı olan debian üzerine yaptığımı bildirmek isterim. Diğer linux dağıtımları için de benzer şekilde kurulum yapılabilir fakat birebir aynı şekilde olmayacağını zaten sizler benden daha iyi bilirsiniz. Neyse debian 6.0.3 ü kurduk ardından nagios3 ü kuracağız. Debian kurulumda bir mükemmel bir kolaylık sağlıyor. kurulumu sadece bir komut ile yapabiliyorsunuz. Bu tek komut sonrasında genel olarak nagios3 bileşenleri, bağımlı kütüphane bileşenleri, nagios pluginleri, apache2 web serverı, php ve mysql veritabanı makinenize yükleniyor. Kurulum bu safhada bende gösterdiği kadarıyla yaklaşık 450 MB lık paket indirip kuracağından bu kısım biraz uzun sürebilir.

Kurulum için çalıştırılacak komut;

apt-get install nagios*

Kurulum sırasında altta karşılaşılan ekrana nagios arayüzünün atamak istediğiniz parolayı girmelisiniz. Kullanıcı adınız “nagiosadmin”

Parolayı tekrar girmelisiniz.

Bu seçeneği “No” deyip geçebilirsiniz.

İşte bu kadaaar. Nagios kurulumu tamamlandı. Şimdi browserınızı açıp http://nagios_server_ip/nagios3 yazdığınızda karşınıza aşağıdaki kullanıcı ekranı gelecektir.

Kullanıcı adı = nagiosadmin

Parola = *****

kullanıcı bilgilerini girdikten sonra Nagios karşınızda….

2. Nconf ile nagios konfigurasyonunun kolaylıkla yapılabilmesi için nconf kurulumu

Daha önceden de nagios kurulumu yapıp yaklaşık 30 adet serverda belirli servisleri kontrol etmiştim. nagios un konfigürasyonları text tabanlı birçok dosya üzerinden yapılmaktadır. Bunların ayrıntılarına girmek istemiyorum açıkçası çünkü konumuz tam olarak bu değil. Fakat ilerleyen kısımlarda bazılarına değineceğiz. Bu konfigürasyon dosyalarına değinmek istemememin bir nedeni de kafanızı fazla karıştırmamaktır. Bende kendi kafamın fazla karışmasını istemediğim için web te bir araştırma yaptım. aradığım şey şuydu “Nagios konfigürasyonunu nasıl daha kolay ve görsel bir şekilde yapabilirim?” . Bu sorumun cevabını nconf uygulamasını bulunca fazlasıyla almış oldum. Bu uygulamayı kurup konfigürasyon yapmaya başladığınızda hakikaten ben neden yıllardır bu kadar nagios konfigürasyonlarıyla amelece uğraşmışım diyeceksiniz. Uygulama ile ayrıntılı bilgilere verdiğim linkten ve aşağıdaki bilgiden ulaşabilirsiniz.

“NConf is a PHP based web-tool for configuring the Nagios monitoring software. It differs from similar tools by offering enterprise-class features like templates, dependencies and the ability to configure a large-scale, distributed Nagios server topology”

Hemen kuruluma geçelim,

kuruluma başlamadan önce gerekli olanlar aşağıda listelenmiştir. Biz öncesinde nagios3 kurulumu yaptığımızdan bunların hepsini farkında olmadan yapmış olduk zaten :)

NConf system requirements:

  • Apache webserver
  • PHP 5 or higher, php-mysql, php-ldap (only if using LDAP auth)
  • MySQL 5.0.2 or higher (with InnoDB!)
  • Perl 5.6 or higher, perl-DBI, perl-DBD-MySQL
  • Nagios 3.x or Icinga 0.8x (binary necessary for testing generated config)

php.ini settings:

  • short_open_tag = On
  • register_globals = Off
  • magic_quotes_gpc = Off
#wget https://nodeload.github.com/Tontonitch/nconf-1.2.6-1/tarball/master
#tar xfvz master
#mv Tontonitch-nconf-1.2.6-1-c4c59e5 nconf
  • nconf klasörü içerisinde bulunan aşağıdaki klasörlere web kullanıcısının yazma yetkisine sahip olup olmadığını kontrol edelim.
./config
./output
./static_cfg
./temp
  • nconf database kullandığından phpmyadmin kullanarak kolaylıkla nconf için bir adet database ve kullanıcı oluşturmalısınız. oluşturacağınız kullanıcı nconf database için SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP haklarına sahip olmalıdır.
  • browserınıza http://nagios_server_ip/nconf/INSTALL.php yazarak nconf kurulum arayüzüne girelim.
  • ilk karşılaştığımız ekranda öncelikli yüklenmesi gereken uygulamaların hepsininin OK durumunda olması gereklidir. OK ise diğer adım için Next diyelim.

  • nconf için oluşturduğumuz database in bilgilerini bu ekranda doğru şekilde girip Next diyelim. bilgiler doğru ise db de tablolar oluşturulup sonraki aşamaya geçilir. Hata durumlarında Failed uyarısı alınıp hata kontrol edilmelidir.

  • NAGIOS_BIN dışındaki diğer parametreler default şekilde bırakılır. NAGIOS_BIN değeri için nagios binary sinin yüklü olduğu path yazılır. doğru pathı yazabilmek için “whereis nagios3″ komutunu kullanabilirsiniz. doğru pathı yazdıktan sonra Next diyelim.
  • bu kısmı geçebiliriz. isterseniz doldurabilirsiniz.

  • Tüm ayarları doğru girdiğimiz sürece kurulum aşağıdaki şekilde tamamlanmaktadır. Finish deyip kurulumu bitirelim. Sonrasında browserdan nconf arayüzüne düzgün girebilmemiz için nconf klasörü içerisindeki INSTALL, INSTALL.php, UPDATE, UPDATE.php dosya ve klasörlerini silmeliyiz.

  • benim gibi görselliğe önem verenlerdenseniz nagios ta işletim sistemlerini resimli olarak görmek istiyorsanız buradan resimleri indirerek nconf klasörü içerisindeki /img/logos/base/ altına kopyalayın.

Kurulumu tamamladık. Fakat nconf ile nagiosu haberleştirmedik. Bunun için ek olarak birkaç adım daha ilerlememiz gerekiyor. 

Artık Nconf un arayüzüne browser ınıza http://nagios_server_ip/nconf/ yazarak erişebilirsiniz.

Nconf arayüzüne girdiğinizde ve servisler için gerekli düzenlemeler yaptığınızda ayarlar yapıldıktan sonra sol taraftaki menüde bulunan “Generate Nagios Config” kısmına tıkladığınızda yaptığınız ayarlarla birlikte yeni nagios konfigürasyon dosyaları oluşturulup nconf klasörü altındaki /output klasörü altına NagiosConfig.tgz şeklinde kopyalanır.

Bu dosyayı /etc/nagios3 altında kopyalayıp tar xfvz NagiosConfig.tgz komutu ile açarsanız içerisinde aşağıdaki dosyaların olduğunu göreceksiniz. Daha önce nagios ile uğraşmış olanlara bu dosyalar tanıdık gelecektir.

dosyayı açtığınızda içeriği aşağıdaki şekildedir;

Folder 'Default_collector':
  extended_host_info.cfg
  extended_service_info.cfg
  hostgroups.cfg
  hosts.cfg
  servicegroups.cfg
  services.cfg
Folder 'global':
  checkcommands.cfg
  contactgroups.cfg
  contacts.cfg
  host_templates.cfg
  misccommands.cfg
  service_templates.cfg
  timeperiods.cfg

Bu işlemi de yaptıktan sonra nagios.cfg dosyası içerisinde bulunan tüm cfg_dir ve cfg_file tanımlarının başına # ekleyip comment out ederek aşağıdaki parametreleri ekleyelim. Böylelikle nagios sadece nconf un oluşturduğu konfigürasyon dosyalarını okuyacaktır.

cfg_dir=/etc/nagios3/global
cfg_dir=/etc/nagios3/Default_collector

Sonrasında nagios u restart ettikten sonra Service Detail bölümünde aşağıdaki şekilde görmeniz gerekmektedir.

Tebrikler nconf kurulum aşamasını da tamamlamış olduk.

Fakat nconf ta her değişiklik yapıldıktan sonra .tgz uzantılı dosyayı /etc/nagios3 altına kopyalayıp açmak sıkıntılı olabilir. Eğer nagios ile nconfu aynı makineye kurarak nconf ta yapacağınız işlemlerin kısa zamanda nagiosta kendiliğinden aktif olmasını istiyorsanız bu işlemi nconf ta hazırlanmış bir scripti kendimize göre düzenleyerek cron job olarak her dakika çalıştırmamız yeterli olacaktır.

/var/www/nconf/ADD-ONS/deploy_local.sh

yukarıdaki path ta bulunan scripti açarak aşağıdaki değişkenleri gösterilen şekliyle düzenleyelim;

OUTPUT_DIR="/var/www/nconf/output/"
NAGIOS_DIR="/etc/nagios3"

NOT: aynı scriptte nagios3 ü kuranlar için /etc/init.d/nagios3 reload kısmınında düzeltilmesi gerekir.

/etc/crontab dosyasının ilgili kısmına aşağıdaki ifadeyi ekleyerek scriptin her dakika çalışmasını sağlayalım.

*  *    * * *   root    bash /var/www/nconf/ADD-ONS/deploy_local.sh

3. check_sip plugin inin aktif hale getirilmesi

  • Buradan OPTIONS mesajı ile serverları kontrol edecek nagios pluginini indirip check_sip dosyasını /usr/lib/nagios/plugins/ altına kopyalayalım.
  • check_sip dosyasının içerisindeki ifadeyi aşağıdaki şekilde değiştirelim;

eski ifade;

use lib "/usr/lib64/nagios/plugins";

yeni ifade;

use lib "/usr/lib/nagios/plugins";
  • nconf arayüzüne gelerek aşağıda belirtilen kısımdan check_sip komutunun kullanılış şeklini tanımlıyoruz.

doldurulması gerekli alanlara yazılması gerekenler;

check command name = check_sip
check command line  = /usr/bin/perl /usr/lib/nagios/plugins/check_sip -u $ARG1$ -w 5

Submit deyip  komutu ekleyelim.

  • Bu aşamada monitör etmek istediğimiz host ları tanımlamamız gerekmektedir. Host ları tanımamak için aşağıdaki şekilde işlem yaparak gerekli alanları doldurup Submit deyiniz.