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.