Keepalived ile IP Failover
Keepalived VRRP protokolünü kullanarak yüksek erişilebilirlik (high-availability) gereksinimlerinden IP sanallaştırmayı 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 ikiden daha fazla 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 { test1@test.com test2@test.com } notification_email_from test@test.com 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
Hamdi ÖZCAN – ozcan.com