Sobes.tech
Senior

Koje imate iskustvo u podešavanju spoljnog alata za glasanje za lidera u Galera klasteru?

sobes.tech АИ

Одговор од АИ

Iskustvo u podešavanju spoljnog alata za glasanje za lidera u Galera klasteru ne postoji. U Galera, vođstvo nije određeno spoljnim alatom; svi čvorovi u klasteru su ravnopravni i istovremeno mogu obrađivati zahteve za zapis (uz poštovanje pravila replikacije). Mehanizam izbora "vođe" ili primarnog čvora za određene zadatke (npr. monitoring ili administrativne operacije) obično se implementira na nivou aplikacije, balansera ili korišćenjem spoljašnjih alata za monitoring i orkestraciju, a ne kao ugrađeni alat za glasanje za lidera u kontekstu rada Galera.

Za upravljanje Galera klasterom i izbor čvora za specifične zadatke mogu se koristiti:

  • ProxySQL / HAProxy: Balanseri opterećenja koji mogu usmeravati saobraćaj na određeni čvor na osnovu njegovog stanja.
  • Keepalived / Pacemaker: Alati za obezbeđivanje visoke dostupnosti koji mogu dodeliti virtuelnu IP adresu aktivnom čvoru.
  • Alati za monitoring (npr. Prometheus + Alertmanager): Omogućavaju praćenje stanja čvorova i donošenje odluka (npr. prebacivanje saobraćaja).

U kontekstu Galera, važnije je obezbediti:

  • Kvorum za izbegavanje scenarija split-brain.
  • Ispravnu konfiguraciju wsrep_cluster_address i wsrep_sst_auth.
  • SST (State Snapshot Transfer) prilikom dodavanja novih čvorova.

Ako je zadatak da se odredi "najzdraviji" čvor za administrativne operacije, to je više pitanje monitoringa i izbora na osnovu metrika, a ne glasanja za lidera u Galera.


Primer korišćenja ProxySQL za usmeravanje saobraćaja na jedan čvor (za specifične zadatke):

-- Dodavanje svih čvorova u Galera u ProxySQL
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (10, 'node1', 3306), (10, 'node2', 3306), (10, 'node3', 3306);

-- Kreiranje pravila za usmeravanje zahteva za čitanje na sve čvorove (hostgroup 10)
INSERT INTO mysql_replication_hostgroups (writer_hostgroup, reader_hostgroup) VALUES (10, 10);

-- Kreiranje posebne hostgroup za "administrativni" čvor (npr. node1)
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (20, 'node1', 3306);

-- Pravilo za usmeravanje određenih zahteva (npr. SHOW STATUS) na "administrativni" čvor (hostgroup 20)
INSERT INTO mysql_query_rules (rule_id, active, match_digest, destination_hostgroup) VALUES (1, 1, 'SHOW STATUS', 20);

-- Učitavanje promena u runtime i čuvanje
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;

U ovom primeru ne "glasamo" za vođu, već koristimo ProxySQL za usmeravanje saobraćaja na određeni čvor(-ove), što može biti interpretirano kao izbor čvora za izvršenje određenih zadataka.


Primer korišćenja Keepalived za virtuelni IP:

#!/bin/bash
# Pseudo-kod za skriptu za proveru zdravlja sa Keepalived
# Ova skripta će se pokretati na svakom čvoru u Galera

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
  # Čvor je sinhronizovan (4) i u primarnom skupu
  exit 0 # Zdravo
else
  exit 1 # Nezdravo
fi
# Pseudo-kod za konfiguraciju Keepalived (vrrp_script blok)
vrrp_script check_galera {
  script "/etc/keepalived/scripts/check_galera.sh"
  interval 2 # proverava svakih 2 sekunde
  timeout 3 # timeout nakon 3 sekunde
  weight 50 # povećava prioritet za 50 ako skripta uspe
}

vrrp_instance VI_1 {
  state BACKUP # podrazumevano stanje
  interface eth0 # mrežni interfejs
  virtual_router_id 51 # jedinstveni ID za VRRP instancu
  priority 100 # prioritet na ovom čvoru (viši = verovatnije da bude MASTER)
  advert_int 1 # interval za oglašavanje

  authentication {
    auth_type PASS
    auth_pass your_password
  }

  virtual_ipaddress {
    192.168.1.100 # virtuelni IP adresa
  }

  track_script {
    check_galera # prati skriptu za proveru
  }
}

Ovde Keepalived koristi skriptu za proveru stanja Galera i dodeljuje virtuelni IP samo "zdravom" čvoru sa najvišim prioritetom, što omogućava jedinstvenu tačku pristupa klasteru za zapis, ali to nije sistem glasanja za vođu unutar Galera. To je sistem izbora aktivnog čvora za virtuelni IP.

Moj iskustvo je povezano sa konfiguracijom i održavanjem ovih mehanizama za obezbeđivanje visoke dostupnosti i upravljanje saobraćajem u Galera klasterima.