Sobes.tech
Senior

Welke ervaring hebt u met het instellen van een extern hulpmiddel voor stemmen op de leider in een Galera-cluster?

sobes.tech AI

Antwoord van AI

Er is geen ervaring met het instellen van een extern hulpmiddel voor stemmen op leiders in een Galera-cluster. In Galera wordt leiderschap niet bepaald door een extern hulpmiddel; alle knooppunten in de cluster zijn gelijkwaardig en kunnen gelijktijdig schrijfverzoeken verwerken (onder voorbehoud van replikatieregels). Het mechanisme voor het kiezen van een "leider" of primaire knooppunt voor bepaalde taken (bijvoorbeeld monitoring of administratieve operaties) wordt meestal geïmplementeerd op applicatieniveau, load balancers of met behulp van externe monitoring- en orkestratietools, maar niet als ingebouwd hulpmiddel voor stemmen op leiders binnen de context van Galera.

Voor het beheer van een Galera-cluster en het selecteren van een knooppunt voor specifieke taken kunnen worden gebruikt:

  • ProxySQL / HAProxy: Load balancers die verkeer kunnen sturen naar een bepaald knooppunt op basis van de status.
  • Keepalived / Pacemaker: Hulpmiddelen voor hoge beschikbaarheid die een virtueel IP-adres toewijzen aan een actief knooppunt.
  • Monitoringtools (bijvoorbeeld Prometheus + Alertmanager): Hiermee wordt de status van knooppunten gevolgd en kunnen beslissingen worden genomen (bijvoorbeeld over het schakelen van verkeer).

In de context van Galera is het belangrijker om te zorgen voor:

  • Quorum om split-brain scenario's te voorkomen.
  • Correcte configuratie van wsrep_cluster_address en wsrep_sst_auth.
  • SST (State Snapshot Transfer) bij het toevoegen van nieuwe knooppunten.

Als de taak is om het "meest gezonde" knooppunt voor administratieve operaties te bepalen, is dit meer een kwestie van monitoring en metriek-gebaseerde selectie dan stemmen op leiders in Galera.


Voorbeeld van het gebruik van ProxySQL om verkeer naar één knooppunt te sturen (voor specifieke taken):

-- Toevoegen van alle Galera knooppunten aan ProxySQL
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (10, 'node1', 3306), (10, 'node2', 3306), (10, 'node3', 3306);

-- Creëren van een regel om leesverkeer naar alle knooppunten te sturen (hostgroup 10)
INSERT INTO mysql_replication_hostgroups (writer_hostgroup, reader_hostgroup) VALUES (10, 10);

-- Een aparte hostgroup maken voor het "administratieve" knooppunt (bijvoorbeeld, node1)
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (20, 'node1', 3306);

-- Regel maken om bepaalde queries (bijvoorbeeld, SHOW STATUS) naar het "administratieve" knooppunt te sturen (hostgroup 20)
INSERT INTO mysql_query_rules (rule_id, active, match_digest, destination_hostgroup) VALUES (1, 1, 'SHOW STATUS', 20);

-- Wijzigingen in runtime laden en opslaan
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;

In dit voorbeeld stemmen we niet op een leider, maar gebruiken we ProxySQL om verkeer te routeren naar een bepaald knooppunt, wat geïnterpreteerd kan worden als het kiezen van een knooppunt voor het uitvoeren van bepaalde taken.


Voorbeeld van het gebruik van Keepalived voor een virtueel IP:

#!/bin/bash
# Pseudo-code voor een Keepalived healthcheck script
# Dit script zou op elk Galera-knooppunt draaien

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
  # Knop is gesynchroniseerd (4) en in een primaire component
  exit 0 # Gezond
else
  exit 1 # Ongezond
fi
# Pseudo-code voor een Keepalived configuratie (vrrp_script blok)
vrrp_script check_galera {
  script "/etc/keepalived/scripts/check_galera.sh"
  interval 2 # elke 2 seconden controleren
  timeout 3 # timeout na 3 seconden
  weight 50 # prioriteit verhogen met 50 als script slaagt
}

vrrp_instance VI_1 {
  state BACKUP # Standaardstaat
  interface eth0 # Netwerkinterface
  virtual_router_id 51 # Unieke ID voor VRRP-instantie
  priority 100 # Prioriteit op deze knooppunt (hogere = meer kans om MASTER te zijn)
  advert_int 1 # Advertentie-interval

  authentication {
    auth_type PASS
    auth_pass your_password
  }

  virtual_ipaddress {
    192.168.1.100 # Het virtuele IP-adres
  }

  track_script {
    check_galera # Volg het healthcheck script
  }
}

Hier gebruikt Keepalived een script om de status van Galera te controleren en wijst het virtuele IP alleen toe aan een "gezond" knooppunt met de hoogste prioriteit, waardoor er één toegangspunt is voor schrijven, maar dit is geen stemmingssysteem voor leiders binnen Galera. Het is een systeem om het actieve knooppunt voor het virtuele IP te kiezen.