Kokią patirtį turite nustatant išorinį įrankį balsuoti už lyderį Galera klasteryje?
sobes.tech AI
Atsakymas iš AI
Nėra patirties su išorinio įrankio, skirto balsuoti už lyderį Galera klasteryje, nustatymu. Galera lyderystė nėra nustatoma išorinio įrankio; visi mazgai yra lygiaverčiai ir gali vienu metu apdoroti rašymo užklausas (laikantis replikacijos taisyklių). "Lyderio" arba pirminio mazgo pasirinkimo mechanizmas tam tikroms užduotims (pvz., stebėsenai ar administracinių operacijų vykdymui) dažniausiai įgyvendinamas programėlės, balansavimo priemonės ar naudojant trečiųjų šalių stebėsenos ir orkestravimo įrankius, bet ne kaip įmontuotas įrankis balsavimui už lyderį Galera kontekste.
Galera klasterio valdymui ir mazgo pasirinkimui specifinėms užduotims gali būti naudojami:
- ProxySQL / HAProxy: apkrovos balansavimo priemonės, kurios gali nukreipti srautą į tam tikrą mazgą pagal jo būseną.
- Keepalived / Pacemaker: priemonės aukšto prieinamumo užtikrinimui, kurios gali priskirti virtualų IP adresą aktyviam mazgui.
- Stebėsenos įrankiai (pvz., Prometheus + Alertmanager): leidžia stebėti mazgų būseną ir priimti sprendimus (pvz., apie srauto perjungimą).
Galera kontekste svarbiau užtikrinti:
- Kvorumą, kad būtų išvengta split-brain scenarijų.
- Tinkamą wsrep_cluster_address ir wsrep_sst_auth nustatymą.
- SST (State Snapshot Transfer) procesą, kai pridedami nauji mazgai.
Jei užduotis yra nustatyti "pačia sveikiausia" mazgą administracinėms operacijoms, tai labiau susiję su stebėsena ir pasirinkimu pagal metrikas, o ne balsavimu už lyderį Galera.
Pavyzdys, kaip naudoti ProxySQL nukreipiant srautą į vieną mazgą (tam tikroms užduotims):
-- Pridedame visus Galera mazgus į ProxySQL
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (10, 'node1', 3306), (10, 'node2', 3306), (10, 'node3', 3306);
-- Sukuriame taisyklę, nukreipiančią skaitymo užklausas į visus mazgus (hostgroup 10)
INSERT INTO mysql_replication_hostgroups (writer_hostgroup, reader_hostgroup) VALUES (10, 10);
-- Sukuriame atskirą hostgroup "administraciniam" mazgui (pvz., node1)
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (20, 'node1', 3306);
-- Taisyklė, nukreipianti tam tikras užklausas (pvz., SHOW STATUS) į "administracinį" mazgą (hostgroup 20)
INSERT INTO mysql_query_rules (rule_id, active, match_digest, destination_hostgroup) VALUES (1, 1, 'SHOW STATUS', 20);
-- Pakeitimų įkėlimas į veikimo laiką ir išsaugojimas
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;
LOAD MYSQL REPLICATION HOSTGROUPS TO RUNTIME;
SAVE MYSQL REPLICATION HOSTGROUPS TO DISK;
Šiame pavyzdyje mes nevykdome "balsavimo" už lyderį, o naudojame ProxySQL srautui maršrutizuoti į tam tikrą mazgą, kas gali būti interpretuojama kaip pasirinkimas vykdyti tam tikras užduotis.
Pavyzdys, kaip naudoti Keepalived virtualiam IP adresui:
#!/bin/bash
# Pseudo-kodo Keepalived sveikatos patikros scenarijui
# Šis scenarijus būtų vykdomas kiekviename Galera mazge
GALERA_STATUS=$(mysql -h 127.0.0.1 -e "SHOW STATUS LIKE 'wsrep_local_state';" | grep wsrep_local_state | awk '{print $2}')
GALERA_QUORUM=$(mysql -h 127.0.0.1 -e "SHOW STATUS LIKE 'wsrep_cluster_status';" | grep wsrep_cluster_status | awk '{print $2}')
if [ "$GALERA_STATUS" -eq 4 ] && [ "$GALERA_QUORUM" == "Primary" ]; then
# Mazgas yra sinchronizuotas (4) ir yra pirminėje grupėje
exit 0 # Sveikas
else
exit 1 # Nesveikas
fi
# Pseudo-kodo Keepalived konfigūracijai (vrrp_script blokas)
vrrp_script check_galera {
script "/etc/keepalived/scripts/check_galera.sh"
interval 2 # tikrina kas 2 sekundes
timeout 3 # laiko limitas po 3 sekundžių
weight 50 # padidina prioritetą 50, jei scenarijus sėkmingas
}
vrrp_instance VI_1 {
state BACKUP # numatytasis būsena
interface eth0 # tinklo sąsaja
virtual_router_id 51 # unikalus VRRP instancijos ID
priority 100 # prioritetas šiame mazge (didesnis = labiau tikėtina būti MASTER)
advert_int 1 # skelbimo intervalas
authentication {
auth_type PASS
auth_pass jūsų_slaptazodis
}
virtual_ipaddress {
192.168.1.100 # virtualus IP adresas
}
track_script {
check_galera # stebėjimo scenarijaus sekimas
}
}
Čia Keepalived naudoja scenarijų, kad patikrintų Galera būseną ir priskirtų virtualų IP tik "sveikam" mazgui su aukščiausiu prioritetu, leidžiant turėti vieną prieigos tašką rašymui į klasterį, tačiau tai nėra balsavimas už lyderį viduje Galera. Tai yra aktyvaus mazgo pasirinkimo sistema virtualiam IP. Mano patirtis susijusi su šių mechanizmų nustatymu ir palaikymu, siekiant užtikrinti aukštą prieinamumą ir srauto valdymą Galera klasteriuose.