Nastavitev podatkovnega klastra z visoko razpoložljivostjo z uporabo MariaDB Galera, ProxySQL, Keepalived in Debian 13
Uvod
Ko se vaše aplikacije širijo in postajajo vse pomembnejše, postane zagotavljanje neprekinjene razpoložljivosti ključnega pomena. Izpad baze podatkov lahko povzroči izgubo prihodkov, nezadovoljstvo uporabnikov in škodo za vaš ugled. Ta vodnik prikazuje, kako zgraditi visoko razpoložljiv (HA) MariaDB-klaster z uporabo replikacije Galera, ProxySQL za inteligentno usmerjanje poizvedb in Keepalived za upravljanje virtualnih IP-naslovov v sistemu Debian.
Ta arhitektura združuje prednosti vsake tehnologije, da zagotovi robustno in odporno okolje baze podatkov. MariaDB Galera omogoča sinhrono replikacijo z več glavnimi strežniki, kar zagotavlja doslednost podatkov med več vozlišči. ProxySQL deluje kot usmerjevalnik poizvedb in uravnavalnik obremenitve, kar omogoča inteligentno upravljanje prometa in razbremeni strežnike podatkovnih baz. Keepalived upravlja z virtualnim IP-naslovom, kar zagotavlja enotno točko dostopa do klastra in avtomatizira preklop v primeru okvare vozlišča.
Ta vodnik predpostavlja izkušnje z upravljanjem sistemov Linux, osnovna poznavanja omrežnih konceptov (TCP/IP, DNS) ter poznavanje upravljanja podatkovnih baz. Osredotočili se bomo na konfiguracijo in integracijo teh tehnologij v okolju Debian.
Ključne prednosti te arhitekture:
- Visoka razpoložljivost: Avtomatizirano preklapljanje ob okvari zagotavlja minimalen čas izpada.
- Usklajenost podatkov: Sinhrona replikacija zagotavlja usklajenost podatkov na vseh vozliščih.
- Izboljšana zmogljivost: ProxySQL optimizira usmerjanje poizvedb in zmanjša obremenitev strežnikov z bazami podatkov.
- Poenostavljeno upravljanje: en sam virtualni IP-naslov poenostavi konfiguracijo aplikacij in dostop do njih.
Kaj boste potrebovali:
- Tri VPS-je ali strežnike z Debianom 13.
- Dostop z root ali sudo pravicami do vseh strežnikov.
- Poznavanje vmesnika ukazne vrstice.
- Osnovno razumevanje omrežij TCP/IP in DNS.
Predpogoji
Medsebojna povezanost vozlišč
Pravilno razreševanje imen gostiteljev je bistveno za pravilno delovanje klastra. Vsak strežnik mora biti sposoben najti druge strežnike po imenu. Imena gostiteljev uporabljamo za poenostavitev upravljanja. IP-naslovi vozlišč morajo biti v istem podomrežju.
Povezava med imeni gostiteljev in naslovi IP
- galera0 (glavni vozlišče): 192.168.10.10
- galera1 (podrejeni vozlišče): 192.168.10.11
- galera2 (podrejeni vozlišče): 192.168.10.12
Prepoznavanje imen gostiteljev lahko dosežete z uporabo datoteke /etc/hosts ali sistema DNS.
- Uporaba
datoteke /etc/hosts(enostavnejša nastavitev): Ta možnost je primerna za testna in razvojna okolja. Na vsakem strežniku v datoteko/etc/hostsdodajte vnose, ki preslikujejo ime gostitelja strežnika na njegov statični IP-naslov. - Uporaba DNS (priporočena za produkcijsko okolje): V večjih ali bolj zapletenih okoljih konfigurirajte DNS-zapise (A-zapise), ki preslikujejo imena gostiteljev strežnikov na njihove ustrezne IP-naslove.
Preverjanje
Po konfiguraciji prepoznavanja imen gostiteljev preverite, ali lahko vsak strežnik prepozna imena gostiteljev drugih strežnikov z ukazom ping. Na primer, s strežnika galera0 zaženite ukaz ping galera1. Prejeli bi morali odgovor.
Namestitev potrebnih paketov
Preden lahko konfigurirate Galera-sklop, morate na vsakem vozlišču namestiti potrebne pakete MariaDB. Ta razdelek opisuje potrebne korake za sisteme, ki temeljijo na Debianu.
Dodajanje potrebnih repozitorijev
Dodajte potrebna skladišča s pomočjo naslednjih ukazov:
apt-get update && apt-get install -y --no-install-recommends lsb-release wget apt-transport-https ca-certificates wget -nv -O /usr/share/keyrings/proxysql-3.0.x-keyring.gpg 'https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/repo_pub_key.gpg' echo "deb [signed-by=/usr/share/keyrings/proxysql-3.0.x-keyring.gpg] https://repo.proxysql.com/ProxySQL/proxysql-3.0.x/bookworm/ ./" | tee /etc/apt/sources.list.d/proxysql.list
Posodobitev sistema
Najprej posodobite sezname paketov in same pakete. Na vsakem vozlišču kot uporabnik root izvedite naslednji ukaz:
apt update && apt upgrade -y
Namestitev paketov
Namestite potrebne pakete na vsakem vozlišču s tem ukazom:
apt install rsync mariadb-server mariadb-client galera-4 proxysql keepalived -y
Zavarujte namestitev MariaDB
Na vsakem vozlišču izvedite varnostni skript:
sudo mariadb-secure-installation
Ta skript opravi dva ključna koraka: pozval vas bo, da nastavite močno geslo za uporabnika root za strežnik MariaDB, in odstranil bo vse nezavarovane privzete nastavitve. Sledite navodilom na zaslonu, da zaključite ta postopek.
Omogočite oddaljeni dostop do MariaDB
Za omogočanje oddaljenega dostopa na vsakem vozlišču izvedite te ukaze:
sed -i "s/.*bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/mariadb.conf.d/50-server.cnf systemctl restart mariadb
Galera
Galera omogoča sinhrono replikacijo podatkov med vsemi vozli v gruči. To pomeni, da se vsaka sprememba v bazi podatkov na enem vozlu samodejno in sočasno prenese na vse druge vozle. Ključne prednosti Galere v tej konfiguraciji:
- Visoka razpoložljivost: Če en vozlišče odpove, druga vozlišča še naprej brez prekinitve zagotavljajo podatke. Skupina samodejno poviša preživelo vozlišče v primarno.
- Usklajenost podatkov: Zaradi sinhrone replikacije so podatki vedno usklajeni na vseh vozliščih. S tem se odpravlja tveganje zastarelih branj – vedno berete najnovejšo različico podatkov.
- Skalabilnost branja: Ker se podatki replicirajo na več vozliščih, lahko po klastru razporedite poizvedbe za branje in tako povečate zmogljivost branja.
V bistvu Galera zagotavlja, da vaša baza podatkov MariaDB ostane visoko razpoložljiva, dosledna in skalabilna – kar so ključne zahteve za številne aplikacije.
Konfiguracija
Na vsakem vozlišču ustvarite konfiguracijsko datoteko /etc/mysql/conf.d/galera.cnf. Vsebina bo enaka, razen imena in naslova posameznega vozlišča. Vstavite to predlogo:
[mysqld] # Basic MariaDB settings binlog_format=ROW default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 # Binds to all network interfaces. Adjust if you have a specific private IP for cluster traffic. # Galera Provider Configuration wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so # Adjust path if different (e.g., /usr/lib64/galera-4/libgalera_smm.so) # Galera Cluster Configuration wsrep_cluster_name="my_galera_cluster" # A unique name for your cluster # IP addresses of ALL nodes in the cluster, comma-separated. # Use private IPs if available for cluster communication. wsrep_cluster_address="gcomm://galera0,galera1,galera2" # This node's specific configuration wsrep_node_name="<node_name>" # Must be unique for each node (e.g., node1, node2, node3) wsrep_node_address="<node_address>" # This node's own IP address
Na vsakem vozlišču spremenite <node_name> in <node_address>. Za prvo vozlišče uporabite galera0 in tako naprej.
wsrep_cluster_address — na vsakem vozlišču navedite imena gostiteljev vseh vozlišč v gruči.
wsrep_node_name — mora biti edinstveno za vsako vozlišče (npr. galera0, galera1, galera2).
wsrep_node_address — nastavite na ime gostitelja vozlišča, ki ga konfigurirate.
Zagon grozda
Zagnajte grozd na prvem vozlišču s tem ukazom:
sudo systemctl stop mariadb && sudo galera_new_cluster
Ponovno zaženite MariaDB na drugih vozliščih:
sudo systemctl restart mariadb
Preverite nastavitev
Preverite velikost klastra
Povežite se z MariaDB na katerem koli vozlišču in preverite stanje klastra. Povežite se z bazo podatkov:
sudo mariadb -u root -p
Preverite stanje vozlišč klastra v lupini MariaDB:
SHOW STATUS LIKE 'wsrep_cluster_size';
wsrep_cluster_size mora biti enako številu naših vozlišč.
MariaDB [galtest]> SHOW STATUS LIKE 'wsrep_cluster_size'; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+ 1 row in set (0.001 sec) MariaDB [galtest]>
Preizkusite replikacijo
Ustvarite testno bazo podatkov na katerem koli vozlišču in vnesite testno sporočilo. Izvedite naslednje ukaze v MariaDB lupini:
CREATE DATABASE galtest; USE galtest; CREATE TABLE messages (id INT AUTO_INCREMENT PRIMARY KEY, text VARCHAR(255)); INSERT INTO messages (text) VALUES ('Test from galera0!');
Nato preverite podatke na drugih vozliščih z naslednjim poizvedbo SQL prek lupine MariaDB:
USE galtest; SELECT * FROM messages;
Prikazalo se mora testno sporočilo:
MariaDB [galtest]> USE galtest; Database changed MariaDB [galtest]> SELECT * FROM messages; +----+--------------------+ | id | text | +----+--------------------+ | 7 | Test from galera0! | +----+--------------------+ 1 row in set (0.001 sec) MariaDB [galtest]>
ProxySQL
ProxySQL v tej konfiguraciji grozda ni le preprost posrednik; bistveno izboljša zmogljivost, zanesljivost in upravljivost vaše baze podatkov. ProxySQL predstavlja ključni sloj med vašimi aplikacijami in vašim Galera grozdom. Njegovi glavni nameni so:
- Shranjevanje poizvedb v predpomnilniku: ProxySQL aktivno shranjuje pogosto izvajane poizvedbe v predpomnilnik. Namesto da bi za iste podatke večkrat poizvedoval v Galera-sklopu, prikaže rezultat iz predpomnilnika, s čimer znatno zmanjša obremenitev baze podatkov in izboljša odzivne čase. To je še posebej koristno za aplikacije z veliko branjem.
- Združevanje povezav: ProxySQL vzdržuje zbirko trajnih povezav s Galera-sklopom. Vzpostavljanje povezave z bazo podatkov je operacija, ki zahteva veliko virov. Združevanje povezav prepreči to dodatno obremenitev s ponovno uporabo obstoječih povezav, kar dodatno poveča zmogljivost.
- Porazdelitev obremenitve in usmerjanje poizvedb: ProxySQL lahko poizvedbe inteligentno usmerja na različne vozlišča v vašem Galera-sklopu na podlagi dejavnikov, kot so obremenitev strežnika, vrsta poizvedbe ali afiniteta podatkov. To vam omogoča porazdelitev delovne obremenitve in povečanje zmogljivosti vašega sklopa na najvišjo raven.
- Optimizacija poizvedb: ProxySQL lahko prepiše poizvedbe, da postanejo učinkovitejše, pri čemer lahko izkoristi zmogljivosti Galere za optimalno izvajanje.
- Zaznavanje napak in usmerjanje: ProxySQL neprestano spremlja stanje vaših vozlišč Galera. Če vozlišče odpove, ProxySQL samodejno preusmeri poizvedbe na delujoča vozlišča in tako zagotovi neprekinjeno delovanje storitve.
V bistvu ProxySQL deluje kot pametni upravitelj prometa in optimizator zmogljivosti za vaš Galera-sklop, kar znatno izboljša njegovo učinkovitost in odpornost.
Varnostni ukrepi
Spodnja uporabniška imena in gesla so namenjena izključno izobraževalnim namenom. Za produkcijsko okolje uporabljajte močna gesla.
Nastavitev uporabnikov
Uporabnik za spremljanje
Uporabnik za spremljanje v ProxySQL je namenski račun v bazi podatkov, namenjen izključno orodjem za spremljanje, da lahko varno dostopajo do notranjih statistik in meril. Konfiguriran je z minimalnimi dovoljenji – le dostopom SELECT –, kar zagotavlja celovitost in varnost vaših podatkov ter hkrati omogoča celovito spremljanje zmogljivosti.
Za dodajanje uporabnika za spremljanje izvedite to poizvedbo v lupini MariaDB na glavnem vozlišču:
CREATE USER 'monitor'@'%' IDENTIFIED BY 'monitor'; GRANT SELECT ON *.* TO 'monitor'@'%'; FLUSH PRIVILEGES;
Uporabnik aplikacije
Uporabnik aplikacije v ProxySQL je standardni račun v bazi podatkov, ki ga vaše aplikacije uporabljajo za povezovanje in izvajanje poizvedb v osnovnem Galera-sklopu. Prek tega uporabnika vaša aplikacija neposredno komunicira z bazo podatkov, pridobiva in obdeluje podatke.
Za dodajanje uporabnika aplikacije izvedite to poizvedbo v lupini MariaDB na glavnem vozlišču:
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' IDENTIFIED BY 'test' WITH GRANT OPTION; FLUSH PRIVILEGES;
Preverjanje
Preverite ustvarjanje uporabnika na vseh vozliščih s tem ukazom:
mariadb -u root -e "SELECT user, host FROM mysql.user;"
Konfiguracija
Na vsakem vozlišču ustvarite konfiguracijsko datoteko /etc/proxysql.cnf in vanjo vstavite naslednjo vsebino:
datadir="/var/lib/proxysql" admin_variables= { admin_credentials="admin:admin" mysql_ifaces="127.0.0.1:6032" } mysql_variables= { threads=4 max_connections=2048 monitor_username="monitor" monitor_password="monitor" } mysql_servers= ( { address="galera0" , port=3306 , hostgroup=0 }, { address="galera1" , port=3306 , hostgroup=0 }, { address="galera2" , port=3306 , hostgroup=0 } ) mysql_users= ( { username = "test" , password = "test" , default_hostgroup = 0 , active = 1 } ) mysql_query_rules= ( { rule_id=2 active=1 match_pattern="^SELECT.*" destination_hostgroup=0 apply=1 } )
Omogočite in zaženite ProxySQL s pomočjo naslednjih ukazov:
sudo systemctl start proxysql sudo systemctl enable proxysql sudo proxysql --reload
Preverite nastavitev ProxySQL s tem ukazom:
mysql -u admin -padmin -h 127.0.0.1 -P6032 -e "SELECT hostname, status FROM mysql_servers;"
Vsi vozli morajo biti povezani:
+----------+--------+ | hostname | status | +----------+--------+ | galera0 | ONLINE | | galera1 | ONLINE | | galera2 | ONLINE | +----------+--------+
Keepalived
Keepalived upravlja z virtualnim IP-naslovom, zagotavlja enotno točko dostopa do grozda in avtomatizira preklop v primeru okvare vozlišča. Spremlja stanje vozlišč MariaDB in v primeru okvare preusmeri promet na delujoče vozlišče, s čimer ohranja visoko razpoložljivost. Konfiguracija določa ID virtualnega usmerjevalnika 51 in uporablja vmesnik eth0. Na glavnem vozlišču je stanje nastavljeno na MASTER s prioriteto 100. Rezervna vozlišča so konfigurirana s stanjem BACKUP, s prioritetama 90 oziroma 80. Na vseh vozliščih je naslov virtual_ipaddress nastavljen na 192.168.10.50. VIP in vozlišča morajo biti v istem podomrežju. Ponudnik gostovanja mora podpirati VIP za VPS. Preverjanje pristnosti je omogočeno s skupnim geslom 1234. Nastavitev advert_int določa, kako pogosto glavno vozlišče pošilja VRRP-obvestila. Nižja vrednost pomeni pogostejša obvestila, kar lahko pospeši zaznavanje preklopa; višja vrednost pomeni redkejša obvestila, kar lahko upočasni preklop, vendar zmanjša obremenitev omrežja.
Konfiguracija
Na vsakem vozlišču ustvarite konfiguracijsko datoteko /etc/keepalived/keepalived.conf in vanjo vstavite naslednjo vsebino:
vrrp_instance VI_1 { state <NODE_STATE> interface eth0 virtual_router_id 51 priority <NODE_PRIORITY> advert_int 1 authentication { auth_type PASS auth_pass 1234 } virtual_ipaddress { 192.168.10.50/24 } }
Spremenite <NODE_STATE> in <NODE_PRIORITY>, kot je opisano zgoraj. Omogočite in zaženite storitev keepalived:
sudo systemctl enable keepalived && sudo systemctl start keepalived
Preverjanje
Za preverjanje nastavitve uporabite VIP, konfiguriran prek Keepalived, in vrata, konfigurirana prek ProxySQL. Preverite velikost grozda, na primer:
mariadb -u test -ptest -h 192.168.10.50 -P6033 -D galtest -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
Pričakovani odgovor mora ustrezati preverjanju Galere:
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+
Sedaj lahko naključno ponovno zaženete vozlišča, preverite velikost klastra in razpoložljivost podatkov.

Zaključek
Ta vodnik je prikazal, kako zgraditi visoko razpoložljiv MariaDB-klaster z uporabo Galera-replikacije, ProxySQL za usmerjanje poizvedb in Keepalived za upravljanje virtualnih IP-naslovov v sistemu Debian. Ta arhitektura ponuja več ključnih prednosti, vključno z visoko razpoložljivostjo z avtomatskim preklopom ob okvari, doslednostjo podatkov prek sinhrone replikacije in izboljšano zmogljivostjo prek ProxySQL. S kombinacijo teh tehnologij lahko zgradite robustno in odporno okolje baze podatkov, ki je sposobno obvladovati povečane delovne obremenitve in zmanjšati izpad delovanja na minimum.