Sobes.tech
Senior

Milyen tapasztalatai vannak egy külső eszköz beállításában a vezető szavazására a Galera klaszterben?

sobes.tech MI

Válasz az MI-től

Galera klaszterben vezető szavazási eszköz konfigurálásának tapasztalata nem létezik. A Galera-ban a vezető szerepe nem külső eszközzel kerül meghatározásra; minden csomópont egyenrangú, és egyidejűleg képes írni kéréseket feldolgozni (a replikációs szabályok betartásával). A "vezető" vagy elsődleges csomópont kiválasztásának mechanizmusa bizonyos feladatokra (például monitoring vagy adminisztratív műveletek) általában alkalmazás szinten, load balancer vagy külső monitoring és orkestrációs eszközök segítségével valósul meg, de nem beépített eszközként a vezető szavazására a Galera működése során.

A Galera klaszter kezelése és egy adott feladatra kiválasztott csomópont használatához a következők használhatók:

  • ProxySQL / HAProxy: Terheléselosztók, amelyek a forgalmat egy adott csomópontra irányíthatják annak állapota alapján.
  • Keepalived / Pacemaker: Magas rendelkezésre állást biztosító eszközök, amelyek virtuális IP címet rendelnek az aktív csomóponthoz.
  • Monitoring eszközök (például Prometheus + Alertmanager): A csomópontok állapotának figyelése és döntéshozatal (például forgalom átváltása).

A Galera kontextusában fontosabb biztosítani:

  • A split-brain szcenáriók elkerülése érdekében kvórum.
  • A wsrep_cluster_address és a wsrep_sst_auth helyes konfigurálása.
  • SST (State Snapshot Transfer) az új csomópontok hozzáadásakor.

Ha az a feladat, hogy meghatározzuk a "leg egészségesebb" csomópontot adminisztratív műveletekhez, ez inkább monitoring és metrikák alapján történő kiválasztás kérdése, nem pedig vezető szavazás a Galera-ban.


Példa a ProxySQL használatára a forgalom egy adott csomópontra irányítására (speciális feladatokhoz):

-- Minden Galera csomópont hozzáadása ProxySQL-hez
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (10, 'node1', 3306), (10, 'node2', 3306), (10, 'node3', 3306);

-- Szabály létrehozása az olvasási kérdések minden csomópontra irányítására (hostgroup 10)
INSERT INTO mysql_replication_hostgroups (writer_hostgroup, reader_hostgroup) VALUES (10, 10);

-- Külön hostgroup létrehozása az "adminisztratív" csomópontnak (például, node1)
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (20, 'node1', 3306);

-- Szabály létrehozása bizonyos kérdések (például, SHOW STATUS) irányítására az "adminisztratív" csomópontba (hostgroup 20)
INSERT INTO mysql_query_rules (rule_id, active, match_digest, destination_hostgroup) VALUES (1, 1, 'SHOW STATUS', 20);

-- Változások betöltése futásidőbe és mentése
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;

Ebben a példában nem "szavazunk" a vezetőre, hanem a ProxySQL-t használjuk a forgalom irányítására egy adott csomópont felé, amit a kiválasztásnak lehet értelmezni bizonyos feladatok végrehajtására.


Keepalived példája virtuális IP használatára:

#!/bin/bash
# Pseudo-kód a Keepalived egészségügyi ellenőrző szkriptjéhez
# Ez a szkript minden Galera csomóponton fut

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
  # A csomópont szinkronizált (4) és elsődleges komponensben van
  exit 0 # Egészséges
else
  exit 1 # Egészségtelen
fi
# Keepalived konfiguráció pseudo-kódja (vrrp_script blokk)
vrrp_script check_galera {
  script "/etc/keepalived/scripts/check_galera.sh"
  interval 2 # minden 2 másodpercben
  timeout 3 # 3 másodperc után timeout
  weight 50 # növeli a prioritást 50-vel, ha a script sikeres
}

vrrp_instance VI_1 {
  state BACKUP # Alapértelmezett állapot
  interface eth0 # Hálózati interfész
  virtual_router_id 51 # Egyedi azonosító a VRRP példányhoz
  priority 100 # Prioritás ezen a csomóponton (magasabb = nagyobb valószínűséggel MASTER)
  advert_int 1 # Hirdetési intervallum

  authentication {
    auth_type PASS
    auth_pass your_password
  }

  virtual_ipaddress {
    192.168.1.100 # Virtuális IP cím
  }

  track_script {
    check_galera # Egészségügyi ellenőrző szkript követése
  }
}

Itt a Keepalived egy szkriptet használ a Galera állapotának ellenőrzésére, és csak a "egészséges" csomópontnak adja a virtuális IP-t a legmagasabb prioritással, ez egyetlen hozzáférési pontot biztosít az íráshoz, de ez nem belső szavazási rendszer a Galera-ben a vezető kiválasztására. Ez egy aktív csomópont kiválasztási rendszer a virtuális IP számára.