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 );
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;
ip addr show eth1
Örnek notify betiği;
#!/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