Keepalived
Šiame straipsnyje bus aprašoma kaip sukonfigūruoti Aukšto pasiekiamumo Linux serverį su slankiojančiu IP (angl. floating IP) pasitelkiant keepalived daemon'ą jog jis veiktų kaip Master > Slave (dviejuose serveriuose) ir priskirtų aktyviam serveriui floating IP. Bus naudojamas DigitalOcean API (reikalingas digital ocean api auth key).
Diegimas[keisti]
apt-get install keepalived
Konfigūravimas[keisti]
Naudosime vidinius tinklo ip (galima naudoti ir išorinius):
- eth1 - vidinis tinklo interfeisas.
- X.X.X.X - Master serverio ip.
- Y.Y.Y.Y - Slave serverio ip.
- PA55 - Slaptažodis komunikavimui tarp serverių.
- chk_nginx - tikrinamas nginx serviso gyvybiškumas (galima pridėti ir papildomų).
- virtual_router_id - abiejuose serveriuose turi būti vienodas
- state - Pirmajame turi būti MASTER, antrajame BACKUP.
- priority - Pagrindiniame serveryje turi būti didesnis.
- /etc/keepalived/master.sh - Scriptas kurį leisime aktyviame serveryje (floating ip priskyrimui)
Master serveris[keisti]
/etc/keepalived/keepalived.conf:
vrrp_script chk_nginx {
script "pidof nginx"
interval 2
}
vrrp_instance VI_1 {
interface eth1
state MASTER
priority 200
advert_int 1
virtual_router_id 199
unicast_src_ip X.X.X.X
unicast_peer {
Y.Y.Y.Y
}
track_script {
chk_nginx
}
authentication {
auth_type PASS
auth_pass PA55
}
notify_master /etc/keepalived/master.sh
}
Slave serveris[keisti]
/etc/keepalived/keepalived.conf:
vrrp_script chk_nginx {
script "pidof nginx"
interval 2
}
vrrp_instance VI_1 {
interface eth1
state BACKUP
priority 100
advert_int 1
virtual_router_id 199
unicast_src_ip Y.Y.Y.Y
unicast_peer {
X.X.X.X
}
track_script {
chk_nginx
}
authentication {
auth_type PASS
auth_pass PA55
}
notify_master /etc/keepalived/master.sh
}
/etc/keepalived/master.sh scriptas[keisti]
Būtinai reiktų nusistatyti digital ocean api key
ir floating ip prieš naudojant šį scriptą.
Kaip matote jis paleidžia žemiau esantį assign-ip scriptą kurį aprašysiu žemiau šio straipsnio.
#!/bin/sh
export DO_TOKEN='JUSU_DIGITALOCEAN_API_KEY'
IP='FLOATING_IP_ADRESAS'
ID=$(curl -s http://169.254.169.254/metadata/v1/id)
HAS_FLOATING_IP=$(curl -s http://169.254.169.254/metadata/v1/floating_ip/ipv4/active)
if [ $HAS_FLOATING_IP = "false" ]; then
n=0
while [ $n -lt 10 ]
do
/usr/local/bin/assign-ip $IP $ID && break
n=$((n+1))
sleep 3
done
fi
/usr/local/bin/assign-ip scriptas[keisti]
sudo curl -L -o /usr/local/bin/assign-ip http://do.co/assign-ip sudo chmod +x /usr/local/bin/assign-ip
Debuginimas[keisti]
Debuginimas paprastas, pirmiausia pažiūrėkite ar nėra paleistas keepalived daemonas, tuomet jį leiskite šitaip, abejuose serveriuose ir bandykite restart/shutdown, ar dar ką nors (t.y nginx service restart).
keepalived -D -n
Šitaip paleistas servisas visą stdout'ą mes ir foreground'ą ir bus aišku ką ir kaip padarėte negerai bei galite taisytis.

