Preskočiť na obsah

Administrátorská príručka — Vysoká dostupnosť OpenStack Horizon

Tento dokument slúži ako referenčná príručka pre správu prístupovej vrstvy vysokej dostupnosti webového rozhrania OpenStack Horizon v prostredí Juju. Je určený pre administrátorov, ktorí nie sú nevyhnutne autormi pôvodného nasadenia.


1. Prehľad architektúry

Riešenie pozostáva z troch vrstiev:

Klient
[ VIP — virtuálna IP adresa ]      ← spravovaná Keepalived / VRRP
[ HAProxy — 3 jednotky ]           ← load balancer, health-check backendy
  ├── openstack-dashboard/0
  ├── openstack-dashboard/6
  ├── openstack-dashboard/7
  ├── openstack-dashboard/8
  ├── openstack-dashboard/9
  └── openstack-dashboard/10
Aplikácia Počet jednotiek Umiestnenie
openstack-dashboard 6 LXD kontajnery
haproxy 3 LXD kontajnery
keepalived 3 LXD kontajnery

Tok požiadavky: klient → VIP → HAProxy (aktívny uzol) → dostupný backend Horizon.


2. Bežné prevádzkové kontroly

2.1 Stav Juju jednotiek

juju status openstack-dashboard
juju status haproxy
juju status keepalived

Všetky jednotky musia byť v stave active/idle.

2.2 Overenie VIP

VIP musí byť aktívna práve na jednom uzle HAProxy:

juju ssh haproxy/0 "ip -br a | grep <VIP> || true"
juju ssh haproxy/1 "ip -br a | grep <VIP> || true"
juju ssh haproxy/2 "ip -br a | grep <VIP> || true"

Validný stav: presne jeden príkaz vráti nenulový výstup.

2.3 Funkčný test dostupnosti

curl -vkI http://<VIP>/auth/login/ | egrep -i 'set-cookie:|location:|http/'

Očakávaná odpoveď: HTTP redirect (302) na prihlasovaciu stránku Horizon.

2.4 Logy

# Keepalived — prechody MASTER/BACKUP
juju ssh keepalived/0 "sudo journalctl -u keepalived -n 50 --no-pager"

# HAProxy — stav backendov, health-check výsledky
juju ssh haproxy/0 "sudo journalctl -u haproxy -n 50 --no-pager"

3. Incidentné scenáre

I1 — VIP nie je aktívna na žiadnom uzle

Príznaky: curl na VIP zlyhá, žiadny uzol nevracia adresu VIP pri kontrole.

Postup:

# Zistite, na ktorom uzle je problém
juju status keepalived

# Reštartujte Keepalived na postihnutom uzle
juju ssh keepalived/<N> "sudo systemctl restart keepalived"

# Overte prítomnosť VIP
juju ssh haproxy/0 "ip -br a | grep <VIP> || true"
juju ssh haproxy/1 "ip -br a | grep <VIP> || true"
juju ssh haproxy/2 "ip -br a | grep <VIP> || true"


I2 — VIP je aktívna na viacerých uzloch (split-brain)

Príznaky: Viacero uzlov vracia adresu VIP pri kontrole.

Postup: Reštartujte Keepalived postupne na všetkých uzloch:

juju ssh keepalived/0 "sudo systemctl restart keepalived"
juju ssh keepalived/1 "sudo systemctl restart keepalived"
juju ssh keepalived/2 "sudo systemctl restart keepalived"

Po reštarte overte, že VIP je aktívna práve na jednom uzle (kontrola podľa bodu 2.2).


I3 — Backendová inštancia Horizon nereaguje

Príznaky: HAProxy vyradí backend z rotácie (viditeľné v logoch), ostatné backendy obsluhujú požiadavky.

Postup:

# Overte stav aplikácie
juju status openstack-dashboard

# Po obnovení služby potvrďte zaradenie backendu späť do rotácie
juju ssh haproxy/0 "sudo journalctl -u haproxy -n 20 --no-pager | grep -i 'UP\|DOWN'"


I4 — VIP aktívna, backendy dostupné, služba nereaguje

Príznaky: curl na VIP nevráti odpoveď napriek tomu, že Keepalived aj dashboard jednotky sú active.

Príčina: Pravdepodobný problém so službou HAProxy na aktívnom uzle.

Postup:

# Zistite, ktorý uzol drží VIP (podľa bodu 2.2)
# Na tom uzle overte a reštartujte HAProxy
juju ssh haproxy/<N> "sudo systemctl status haproxy"
juju ssh haproxy/<N> "sudo systemctl restart haproxy"


4. Plánovaná údržba

4.1 Bezpečné vyradenie uzla HAProxy

Pred zásahom overte, že VIP nie je na uzle určenom na údržbu:

juju ssh haproxy/<N> "ip -br a | grep <VIP> || true"

Ak je VIP na tomto uzle, presuňte ju:

juju ssh keepalived/<N> "sudo systemctl restart keepalived"
# Počkajte na stabilizáciu a overte presun VIP na iný uzol

Po vykonaní zásahu zaraďte uzol späť a overte stav (sekcia 5).


4.2 Dočasné vyradenie backendovej inštancie Horizon

# Zastavenie Apache na danej inštancii
juju ssh openstack-dashboard/<N> "sudo systemctl stop apache2"

# ... vykonajte zásah ...

# Obnovenie služby
juju ssh openstack-dashboard/<N> "sudo systemctl start apache2"

# Overte zaradenie späť do rotácie cez logy HAProxy
juju ssh haproxy/0 "sudo journalctl -u haproxy -n 20 --no-pager | grep -i 'UP\|DOWN'"

4.3 Rotácia tajného kľúča Horizon (SECRET_KEY)

Upozornenie: Zmena SECRET_KEY zneplatní všetky aktívne používateľské relácie.

# Nastavte novú hodnotu (odporúča sa náhodný reťazec min. 24 znakov)
juju config openstack-dashboard secret="<NOVY_SECRET_KEY>"

# Reštartujte Apache na všetkých inštanciách
juju exec --application openstack-dashboard -- "sudo systemctl restart apache2"

# Overte zhodnosť kľúča na všetkých inštanciách
juju exec --application openstack-dashboard -- \
  "sudo grep SECRET_KEY /etc/openstack-dashboard/local_settings.py"

5. Verifikačná sekvencia po zásahu

Vykonajte po každom administrátorskom zásahu:

  1. Stav jednotiek:

    juju status openstack-dashboard && juju status haproxy && juju status keepalived
    

  2. Prítomnosť VIP práve na jednom uzle (kontrola podľa bodu 2.2)

  3. Funkčný test:

    curl -vkI http://<VIP>/auth/login/ | egrep -i 'set-cookie:|location:|http/'
    

  4. Zhodnosť SECRET_KEY na všetkých backendoch:

    juju exec --application openstack-dashboard -- \
      "sudo grep SECRET_KEY /etc/openstack-dashboard/local_settings.py"
    


6. Konfiguračná referencia

VIP

Parameter Hodnota
Virtuálna IP <VIP>
Sieť MGMT

HAProxy backendy

Názov IP adresa Port
dashboard-0 <IP-dashboard-0> 70
dashboard-6 <IP-dashboard-1> 70
dashboard-7 <IP-dashboard-2> 70
dashboard-8 <IP-dashboard-3> 70
dashboard-9 <IP-dashboard-4> 70
dashboard-10 <IP-dashboard-5> 70

Aktuálne IP adresy backendov získate príkazom:

juju status openstack-dashboard --format=yaml | grep public-address