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
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
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:
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:
-
Stav jednotiek:
-
Prítomnosť VIP práve na jednom uzle (kontrola podľa bodu 2.2)
-
Funkčný test:
-
Zhodnosť SECRET_KEY na všetkých backendoch:
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: