Gönderen Konu: A. Hamdi Özcan: Keepalived ile IP Failover  (Okunma sayısı 7693 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı fortran

  • Forum Gurusu
  • *****
  • İleti: 1.671
  • Bir insanı sevmekle başlar her şey...
    • get GNU
A. Hamdi Özcan: Keepalived ile IP Failover
« : 28 Mayıs 2014, 09:56:34 ös »
Keepalived VRRP protokolünü kullanarak yüksek erişilebilirlik (high-availability) sağlıyor. Ağ uzmanlarının ağ geçidi (gateway) yedekliliği için kullandıkları VRRP, linux sistemlerde de harika sonuç veriyor. Keepalived, IP failover yeteneğini birden çok sunucu için sağlayacak yeteneğe sahip. Ayrıca birden çok VRRP grubu oluşturarak birden çok sanal IP adresinin farklı sunucular üzerine atanması sağlanabiliyor, bu sayede yük dağıtmak mümkün.

Diğer failover sistemlerinden farklı olarak VRRP‘de sunucular birbirlerini multicast trafik ile izliyorlar. Bu multicast adres (224.0.0.18) Internet Assigned Numbers Authority (IANA) in kayıtlı standart multicast adreslerinden.

VRRP yapısında kullanılan önceliklendirme puanlamasında script, servis durumu veya komutların çıktıları keepalived sayesinde kullanılabiliyor. Özellikle script çıktılarının aktif cihaz seçiminde kullanılabiliyor olması büyük esneklik sağlıyor.

Keepalived‘ın loadbalance yeteneği de var. Bu yazımda loadbalance kullanımıyla ilgili bir bilgi bulunmuyor.

Yüksek erişilebilirlik sağlamak için kullanılan diğer yöntemleri referans amaçlı listeliyorum;

- Piranha
- UltraMonkey
- Heartbeat + mon + coda
- Heartbeat + ldirectord
- Heartbeat + Pacemaker

Örnek ayar dosyası ( /etc/keepalived/keepalived.conf );

Kod: [Seç]
global_defs {
   notification_email {
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server mail.test.com
   smtp_connect_timeout 30
}

vrrp_script chk_myscript {
  script       "/usr/local/bin/mycheckscript.sh" # exit 0 (herşey yolunda) | exit 1 (problem var)
  interval 2   # check every 2 seconds
  fall 2       # require 2 failures for KO
  rise 2       # require 2 successes for OK
}

vrrp_script chk_ping {
       script "/bin/ping -c 4 -q -I eth0 xx.xx.xx.x"
       interval 10
       fall 2
       weight 4
}

vrrp_script chk_service {
       script "killall -0 mysqld"
       interval 1
       weight 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth1
    virtual_router_id 20
    priority 101
    advert_int 1
    smtp_alert
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.121/24 dev eth0
    }
    track_script {
       chk_myscript
       chk_ping
       chk_service
    }
   
    notify /usr/local/bin/keepalivednotify.sh

    #notify_backup "script_backup.sh"
    #notify_master "script_master.sh"
    #notify_fault "script_fault.sh"
}

Sanal IP adresini görmek için;

Kod: [Seç]
ip addr show eth1
Örnek  notify betiği;

Kod: [Seç]
#!/bin/bash

# $1 = "GROUP"|"INSTANCE"
# $2 = name of group or instance
# $3 = target state of transition
#     ("MASTER"|"BACKUP"|"FAULT")
TYPE=$1
NAME=$2
STATE=$3

case $STATE in
"MASTER") /etc/init.d/apache2 start
          exit 0
          ;;
"BACKUP") /etc/init.d/apache2 stop
          exit 0
          ;;
"FAULT")  /etc/init.d/apache2 stop
          exit 0
          ;;
*)        echo "unknown state"
          exit 1
          ;;
esac

ozcan.com