Keepalived

Iš Žinynas.
Jump to navigation Jump to search

Š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

Make token digocean.png

ir floating ip prieš naudojant šį scriptą. 

Fip assign to primary.png


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.