Centos 6 ve 7 üzerine keepalived kullanarak mysql ve squid servisleri için yedekli yapılar kurmuştum. Benzer şekilde ihtiyacınıza göre kendi konfigürasyonlarınızı yapabilirsiniz.
Keepalived ile ilgili kısa bilgiden sonra kurulum ve yapmış olduğum konfig örneklerini paylaşıyor olacağım.
Keepalived VRRP protokolünü kullanarak IP sanallaştırma ile high-availability (yüksek erişebilirlik) sağlar. Keepalived, IP failover yeteneği ile ikiden daha fazla sunucu için konfigüre edilebilir. Konfigürasyon dosyasında oluşturulan VRRP grupları ile birden fazla sanal IP adresinin farklı sunucular üzerine atanması ile yük dağılımı da yapılabilir.
VRRP’de sunucular birbirlerini multicast trafik ile izler. Bu multicast adress (224.0.0.18) IANA (Internet Assigned Numbers Authority) a kayıtlı standart multicast adreslerindendir.
VRRP yapısında kullanılan script, servis durumu veya komut çıktıları ile nodelar arasında önceliklendirme yapılır.
- Kurullum işlemini aşağıdaki şekilde basitçe yapabiliyoruz.
yum install –y keepalived # diyerek kurulumu yapıyoruz.
- Örnek Konfigürasyonlar;
- ilk olarak 2 adet Centos 7 üzerinde çalıştırdığım squid servisleri için yaptığım konfigürasyondan bahsedeceğim.
Paket kurulumu yapıldıktan sonra konfigürasyon dosyası aşağıdaki konumda bulunmaktadır. vim ile konfigürasyon dosyasını açarak düzenlemeye başlayabilirsiniz.
vim /etc/keepalived/keepalived.conf # ben vim kullanıyorum ama siz hangi editörü daha iyi kullanıyorsanız onunla da işlem yapabilirsiniz.
Birinci Node da ki konfig;
! Configuration File for keepalived
global_defs {
notification_email { # mail tanımlaması yapmak isterseniz burayı kendinize göre düzenleyebilirsiniz.
nurullahdoser@gmail.com # mailin iletilmesini istediğiniz adres
}
notification_email_from squid-proxy@nurullahdoser.com # maili gönderen hesap
smtp_server smtp_server_ip #SMTP server adresi
smtp_connect_timeout 30
router_id proxy-ha #mail konusunda bulunmasını istediğiniz başlığı burada belirtebilirsiniz.
}
vrrp_script chk_squid { # bu alanda servisimi nasıl kontrol edeceğimizi tanımlıyoruz. script, servis durumu ve ya komut çıktısı ile
script "pidof squid" # pidoff ile ilgili servisi kontrol ediyorum. pid numarası dönmezse tanımladığımız sanal ip yi diğer host a aktarması için keepalived servisini tetikliyor.
interval 2 # ne kadar sıklıkla kontrol edileceğini belirtir. default değeri 5 sn dir.
}
vrrp_instance VI_1 { #VI_1 vrrp tanımımıza verdiğim isim.
state MASTER # burada MASTER / SLAVE tanımını yapıyoruz.
interface ens192 #VRRP nin hangi interface de çalışacağınız belirtiyoruz.
virtual_router_id 55 #tanım yapacağımız tüm node’lar da aynı olmalı
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass 55555
}
track_script { # tanımladığımız VRRP için kontrol script tanımımızı burada yapıyoruz.
chk_squid
}
virtual_ipaddress { # Burada VRRP ile nodelar arasında taşınacak ip leri tanımlıyoruz.
192.168.1.5
}
}
İkinci Node da ki konfig;
! Configuration File for keepalived
global_defs {
notification_email {
nurullahdoser@gmail.com
}
notification_email_from squid-proxy@nurullahdoser.com
smtp_server smtp_server_ip
smtp_connect_timeout 30
router_id proxy-ha
}
vrrp_script chk_squid {
script "pidof squid"
interval 2
}
vrrp_instance VI_1 {
state MASTER
interface ens192
virtual_router_id 55
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass 55555
}
track_script { yapıyoruz.
chk_squid
}
virtual_ipaddress {
192.168.1.5
}
}
Not: MASTER/SLAVE tanımında MASTER olan node servis çalıştığı sürece sanal ip tanımını üzerinde barındıracaktır. Burada 1. node u master ayarladık. 1. node üzerindeki servisi durdurduğumuz da 2.node MASTER olur ancak 1. node üzerinde servis çalışmaya başladığı an tekrar sanal ip yi kendi üzerine alır. Ancak 2.node un ip yi geri vermesini istemiyorsanız iki node üzerinde de MASTER olarak tanım yapmamız yeterli olacaktır.
2. Centos 6 üzerine kurduğumu MYSQL database cluster yapısının konfiği
---------------------------------
! Configuration File for keepalived
global_defs {
notification_email {
nurullahdoser@gmail.com
}
notification_email_from mysqldb01@nurullahdoser.com
smtp_server SMTP_Server_IP
smtp_connect_timeout 30
router_id mysql-ha-db
}
vrrp_script chk_service {
script "killall -0 mysqld"
interval 2
weight 2
fall 2
rise 1
}
vrrp_script chk_ping {
script "/bin/ping -c 4 -q -I eth0 192.168.2.1"
interval 5
fall 2
weight 4
}
vrrp_script chk_myscript {
script "/script/check_mysql.sh" # exit 0 (hersey yolunda) | exit 1 (problem var)
interval 2 # check every 2 seconds
fall 3 # require 2 failures for KO
rise 2 # require 2 successes for OK
}
vrrp_instance VI_1 {
state MASTER
interface eth1
virtual_router_id 51
priority 100
advert_int 1
smtp_alert
nopreempt # only needed on higher priority node
authentication {
auth_type PASS
auth_pass 11111
}
notify_master "/script/keepalived_master.sh"
notify_backup "/script/keepalived_backup.sh"
notify_fault "/script/keepalived_fault.sh"
track_script {
chk_service
chk_ping
chk_myscript
}
virtual_ipaddress {
192.168.1.10/24
}
}
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 51
priority 101
advert_int 1
smtp_alert
nopreempt # only needed on higher priority node
authentication {
auth_type PASS
auth_pass 11111
}
notify_master "/script/keepalived_master.sh"
notify_backup "/script/keepalived_backup.sh"
notify_fault "/script/keepalived_fault.sh"
track_script {
chk_service
chk_ping
chk_myscript
}
virtual_ipaddress {
192.168.2.10/24
}
}
-----------------------------------------------------------------
! Configuration File for keepalived
global_defs {
notification_email {
nurullahdoser@gmail.com
}
notification_email_from mysqldb02@nurullahdoser.com
smtp_server SMTP_Server_IP
smtp_connect_timeout 30
router_id mysql-ha-db
}
vrrp_script chk_service {
script "killall -0 mysqld"
interval 2
weight 2
fall 2
rise 1
}
vrrp_script chk_ping {
script "/bin/ping -c 4 -q -I eth0 192.168.2.1"
interval 10
fall 2
weight 4
}
vrrp_script chk_myscript {
script "/script/check_mysql.sh" # exit 0 (herþey yolunda) | exit 1 (problem var)
interval 2 # check every 2 seconds
fall 3 # require 2 failures for KO
rise 2 # require 2 successes for OK
}
vrrp_instance VI_1 {
state MASTER
interface eth1
virtual_router_id 51
priority 101
advert_int 1
smtp_alert
nopreempt # only needed on higher priority node
authentication {
auth_type PASS
auth_pass 11111
}
notify_master "/script/keepalived_master.sh"
notify_backup "/script/keepalived_backup.sh"
notify_fault "/script/keepalived_fault.sh"
track_script {
chk_service
chk_ping
chk_myscript
}
virtual_ipaddress {
192.168.1.10/24
}
}
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
smtp_alert
nopreempt # only needed on higher priority node
authentication {
auth_type PASS
auth_pass 11111
}
notify_master "/script/keepalived_master.sh"
notify_backup "/script/keepalived_backup.sh"
notify_fault "/script/keepalived_fault.sh"
track_script {
chk_service
chk_ping
chk_myscript
}
virtual_ipaddress {
192.168.2.10/24
}
}
## check_mysql.sh içeriği
#!/bin/bash
MYSQL=/usr/bin/mysql
MYSQL_HOST=127.0.0.1
MYSQL_USER=root
MYSQL_PASSWORD=root_password
CHECK_TIME=3
#mysql is working MYSQL_OK is 1 , mysql down MYSQL_OK is 0
MYSQL_OK=1
function check_mysql_helth (){
$MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWORD -e "show status;" >/dev/null 2>&1
if [ $? = 0 ] ;then
MYSQL_OK=1
else
MYSQL_OK=0
fi
return $MYSQL_OK
}
while [ $CHECK_TIME -ne 0 ]
do
let "CHECK_TIME -= 1"
check_mysql_helth
if [ $MYSQL_OK = 1 ] ; then
CHECK_TIME=0
exit 0
fi
if [ $MYSQL_OK -eq 0 ] && [ $CHECK_TIME -eq 0 ]
then
pkill keepalived
exit 1
fi
sleep 1
done
#### keepalived_master.sh içeriği
#!/bin/bash
HOSTIP=`ifconfig eth0 | grep inet | egrep -v inet6 | awk -F 'net' '{print $2}'`
LOGFILE=/var/log/keepalived-state.log
echo "[Master]" >> $LOGFILE
date >> $LOGFILE
echo "$HOSTNAME ,$HOSTIP ==> MASTER " | mail -s "This is Test " nurullahdoser@gmail.com
#### keepalived_backup.sh
#!/bin/bash
HOSTIP=`ifconfig eth0 | grep inet | egrep -v inet6 | awk -F 'net' '{print $2}'`
LOGFILE=/var/log/keepalived-state.log
echo "[Master]" >> $LOGFILE
date >> $LOGFILE
echo "$HOSTNAME ,$HOSTIP ==> BACKUP " | mail -s "This is Test " nurullahdoser@gmail.com
### keepalived_fault.sh
#!/bin/bash
HOSTIP=`ifconfig eth0 | grep inet | egrep -v inet6 | awk -F 'net' '{print $2}'`
LOGFILE=/var/log/keepalived-state.log
echo "[Master]" >> $LOGFILE
date >> $LOGFILE
echo "$HOSTNAME ,$HOSTIP ==> fault " | mail -s "This is Test " nurullahdoser@gmail.com
Hiç yorum yok:
Yorum Gönder