Jaké máte zkušenosti s nastavením externího nástroje pro hlasování o vůdci v clusteru Galera?
sobes.tech AI
Odpověď od AI
Zkušenosti s nastavením externího nástroje pro hlasování o vůdci v clusteru Galera chybí. Ve Galera není vůdcovství určováno externím nástrojem; všechny uzly v clusteru jsou rovnocenné a mohou současně zpracovávat požadavky na zápis (za předpokladu dodržování pravidel replikace). Mechanismus výběru "vůdce" nebo primárního uzlu pro určité úkoly (například monitoring nebo administrativní operace) je obvykle implementován na úrovni aplikace, load balanceru nebo pomocí externích nástrojů pro monitoring a orchestraci, nikoli jako vestavěný nástroj pro hlasování o vůdci v kontextu práce Galera.
Pro správu clusteru Galera a výběr uzlu pro specifické úkoly lze použít:
- ProxySQL / HAProxy: Load balancery, které mohou směrovat provoz na určitý uzel na základě jeho stavu.
- Keepalived / Pacemaker: Nástroje pro zajištění vysoké dostupnosti, které mohou přiřadit virtuální IP adresu aktivnímu uzlu.
- Monitoringové nástroje (například Prometheus + Alertmanager): Umožňují sledovat stav uzlů a přijímat rozhodnutí (například o přepínání provozu).
V kontextu Galera je důležitější zajistit:
- Kvorum pro zabránění scénářů split-brain.
- Správné nastavení wsrep_cluster_address a wsrep_sst_auth.
- SST (State Snapshot Transfer) při přidávání nových uzlů.
Pokud je úkolem určit "nejzdravější" uzel pro administrativní operace, jedná se spíše o otázku monitorování a výběru na základě metrik, nikoli o hlasování o vůdci v Galera.
Příklad použití ProxySQL pro směrování provozu na jeden uzel (pro specifické úkoly):
-- Přidání všech uzlů Galera do ProxySQL
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (10, 'node1', 3306), (10, 'node2', 3306), (10, 'node3', 3306);
-- Vytvoření pravidla pro směrování čtecích požadavků na všechny uzly (hostgroup 10)
INSERT INTO mysql_replication_hostgroups (writer_hostgroup, reader_hostgroup) VALUES (10, 10);
-- Vytvoření samostatné skupiny hostů pro "administrativní" uzel (například, node1)
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (20, 'node1', 3306);
-- Pravidlo pro směrování určitých dotazů (například, SHOW STATUS) na "administrativní" uzel (hostgroup 20)
INSERT INTO mysql_query_rules (rule_id, active, match_digest, destination_hostgroup) VALUES (1, 1, 'SHOW STATUS', 20);
-- Načtení změn do runtime a jejich uložení
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;
V tomto příkladu nehlasujeme o vůdci, ale používáme ProxySQL k směrování provozu na určitý uzel, což může být interpretováno jako volba uzlu pro vykonání určitých úkolů.
Příklad použití Keepalived pro virtuální IP:
#!/bin/bash
# Pseudo-kód pro skript kontroly zdraví Keepalived
# Tento skript bude běžet na každém uzlu 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
# Uzl je synchronizován (4) a je v primární komponentě
exit 0 # Zdravý
else
exit 1 # Nezdravý
fi
# Konfigurace Keepalived pseudo-kód (blok vrrp_script)
vrrp_script check_galera {
script "/etc/keepalived/scripts/check_galera.sh"
interval 2 # každé 2 sekundy
timeout 3 # po 3 sekundách
weight 50 # zvýšení priority o 50, pokud skript uspěje
}
vrrp_instance VI_1 {
state BACKUP # Výchozí stav
interface eth0 # Síťové rozhraní
virtual_router_id 51 # Unikátní ID VRRP instance
priority 100 # Priorita tohoto uzlu (vyšší = pravděpodobnější MASTER)
advert_int 1 # Interval oznámení
authentication {
auth_type PASS
auth_pass your_password
}
virtual_ipaddress {
192.168.1.100 # Virtuální IP adresa
}
track_script {
check_galera # Sledování skriptu kontroly zdraví
}
}
Zde Keepalived používá skript ke kontrole stavu Galera a přiřazuje virtuální IP pouze "zdravému" uzlu s nejvyšší prioritou, což umožňuje mít jediný přístupový bod ke clusteru pro zápis, ale to není systém hlasování o vůdci uvnitř Galera. Je to systém výběru aktivního uzlu pro virtuální IP.