Kādu pieredzi jums ir ārēja rīka konfigurēšanā balsošanai par līderi Galera klasterī?
sobes.tech AI
Atbilde no AI
Nav pieredzes ar ārēja instrumenta konfigurēšanā, kas būtu paredzēts balsot par līderi Galera klasterī. Galera līderība netiek noteikta ar ārēju instrumentu; visi mezgli ir vienlīdzīgi un vienlaikus var apstrādāt rakstīšanas pieprasījumus (ievērojot replikācijas noteikumus). "Līdera" vai primārā mezgla izvēles mehānisms dažādām uzdevumiem (piemēram, uzraudzībai vai administratīvu operāciju veikšanai) parasti tiek īstenots lietojumprogrammas, slodzes līdzsvarotāja vai trešo pušu uzraudzības un orkestrācijas rīku līmenī, bet ne kā iebūvēts rīks balsošanai par līderi Galera kontekstā.
Galera klastera pārvaldībai un mezgla izvēlei specifiskām uzdevumiem var tikt izmantoti:
- ProxySQL / HAProxy: slodzes līdzsvarotāji, kas var novirzīt trafiku uz noteiktu mezglu atkarībā no tā stāvokļa.
- Keepalived / Pacemaker: rīki augsta pieejamības nodrošināšanai, kas var piešķirt virtuālo IP adresi aktīvajam mezglam.
- Uzraudzības rīki (piemēram, Prometheus + Alertmanager): ļauj uzraudzīt mezglu stāvokli un pieņemt lēmumus (piemēram, par trafika pārslēgšanu).
Galera kontekstā ir svarīgi nodrošināt:
- Kvorumu, lai izvairītos no split-brain scenārijiem.
- Pareizu wsrep_cluster_address un wsrep_sst_auth iestatījumu.
- SST (State Snapshot Transfer) procesu, pievienojot jaunus mezglus.
Ja uzdevums ir noteikt "visveselīgāko" mezglu administratīviem mērķiem, tas vairāk ir saistīts ar uzraudzību un izvēli pēc metriku, nevis balsošanu par līderi Galera.
Piemērs, kā izmantot ProxySQL, novirzot trafiku uz vienu mezglu (specifiskām uzdevumiem):
-- Pievienojam visus Galera mezglus ProxySQL
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (10, 'node1', 3306), (10, 'node2', 3306), (10, 'node3', 3306);
-- Izveidojam noteikumu, kas novirza lasīšanas pieprasījumus uz visiem mezgliem (hostgroup 10)
INSERT INTO mysql_replication_hostgroups (writer_hostgroup, reader_hostgroup) VALUES (10, 10);
-- Izveidojam atsevišķu hostgroup "administratīvajam" mezglam (piemēram, node1)
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (20, 'node1', 3306);
-- Taisām noteikumu, kas novirza noteiktas pieprasījumus (piemēram, SHOW STATUS) uz "administratīvo" mezglu (hostgroup 20)
INSERT INTO mysql_query_rules (rule_id, active, match_digest, destination_hostgroup) VALUES (1, 1, 'SHOW STATUS', 20);
-- Ielādējam izmaiņas uzreiz un saglabājam
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;
Šajā piemērā mēs neveicam "balsošanu" par līderi, bet izmantojam ProxySQL, lai maršrutētu trafiku uz noteiktu mezglu, kas var tikt interpretēts kā izvēle veikt noteiktas uzdevumu izpildi.
Piemērs, kā izmantot Keepalived virtuālam IP adreses nodrošināšanai:
#!/bin/bash
# Pseudo-koda Keepalived veselības pārbaudes skripts
# Šis skripts tiks palaists katrā Galera mezglā
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
# Mezgls ir sinhronizēts (4) un ir galvenajā grupā
exit 0 # Veselīgs
else
exit 1 # Nespējīgs
fi
# Pseudo-koda Keepalived konfigurācijai (vrrp_script bloks)
vrrp_script check_galera {
script "/etc/keepalived/scripts/check_galera.sh"
interval 2 # pārbauda ik pēc 2 sekundēm
timeout 3 # laika limits pēc 3 sekundēm
weight 50 # palielina prioritāti par 50, ja scenārijs ir veiksmīgs
}
vrrp_instance VI_1 {
state BACKUP # noklusējuma stāvoklis
interface eth0 # tīkla interfeiss
virtual_router_id 51 # unikāls VRRP instances ID
priority 100 # prioritāte šajā mezglā (augstāka = vairāk ticams būt MASTER)
advert_int 1 # paziņojuma intervāls
authentication {
auth_type PASS
auth_pass jūsu_parole
}
virtual_ipaddress {
192.168.1.100 # virtuālais IP adrese
}
track_script {
check_galera # sekot veselības pārbaudes scenārijam
}
}
Šeit Keepalived izmanto scenāriju, lai pārbaudītu Galera stāvokli un piešķirtu virtuālo IP tikai "veselam" mezglam ar augstāko prioritāti, kas ļauj būt vienotai piekļuves punktam rakstīšanai klasterī, bet tas nav balsojums par līderi iekšā Galera. Tā ir aktīva mezgla izvēles sistēma virtuālā IP nodrošināšanai. Mana pieredze ir saistīta ar šo mehānismu konfigurēšanu un uzturēšanu, lai nodrošinātu augstu pieejamību un trafika pārvaldību Galera klasteros.