Sobes.tech
Senior

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.