Vzpostavitev visoko razpoložljivega gruče podatkovnih baz z uporabo MariaDB Galera, ProxySQL, Keepalived in Debian 13.
Uvod
Ko vaše aplikacije rastejo po obsegu in pomembnosti, postane zagotavljanje neprekinjene razpoložljivosti ključnega pomena. Izpad baze podatkov lahko vodi do izgube prihodkov, nezadovoljnih uporabnikov in škode za vaš ugled. Ta vodnik prikazuje, kako zgraditi visoko razpoložljiv (HA) MariaDB grozd z uporabo Galera replikacije, ProxySQL za inteligentno usmerjanje poizvedb in Keepalived za upravljanje virtualnih IP-jev na Debianu.
Ta arhitektura združuje prednosti vsake tehnologije za zagotavljanje robustnega in odpornega okolja baze podatkov. MariaDB Galera zagotavlja sinhrono večmojstrsko replikacijo, kar zagotavlja doslednost podatkov med več vozlišči. ProxySQL deluje kot usmerjevalnik poizvedb in uravnoteževalnik obremenitve, kar omogoča inteligentno upravljanje prometa in razbremenitev strežnikov baze podatkov. Keepalived upravlja z virtualnim IP naslovom, kar zagotavlja eno točko dostopa do grozda in avtomatizira preklop v primeru okvare vozlišča.
Ta vodnik predpostavlja izkušnje z administracijo Linux sistemov, osnovne koncepte omrežja (TCP/IP, DNS) in poznavanje administracije baz podatkov. Osredotočili se bomo na konfiguracijo in integracijo teh tehnologij v okolju Debian.
Ključne prednosti te arhitekture:
- Visoka razpoložljivost: Avtomatiziran preklop zagotavlja minimalni izpad.
- Doslednost podatkov: Sinhrona replikacija zagotavlja doslednost podatkov med vsemi vozlišči.
- Izboljšana zmogljivost: ProxySQL optimizira usmerjanje poizvedb in zmanjšuje obremenitev strežnikov baze podatkov.
- Poenostavljeno upravljanje: En sam virtualni IP naslov poenostavi konfiguracijo in dostop do aplikacij.
Potrebovali boste:
- Tri Debian 13 VPS ali strežnike.
- Dostop do root ali sudo na vseh strežnikih.
- Poznavanje ukazne vrstice.
- Osnovno razumevanje TCP/IP omrežja in DNS.
Predpogoji
Povezovanje vozlišč
Pravilna razrešitev imen gostiteljev je bistvena za pravilno delovanje grozda. Vsak strežnik mora biti sposoben najti druge strežnike po imenu. Uporabljamo imena gostiteljev za poenostavitev upravljanja. IP naslovi vozlišč morajo biti v istem podomrežju.
Preslikava imen gostiteljev in IP naslovov
- galera0 (glavno vozlišče): 192.168.10.10
- galera1 (podrejeno vozlišče): 192.168.10.11
- galera2 (podrejeno vozlišče): 192.168.10.12
Razrešitev imen gostiteljev lahko dosežete z uporabo /etc/hosts ali DNS.
- Uporaba
/etc/hosts(enostavnejša nastavitev): To je primerno za testna in razvojna okolja. Na vsakem strežniku dodajte vnose, ki preslikajo ime gostitelja strežnika na njegov statični IP naslov v datoteki/etc/hosts. - Uporaba DNS (priporočeno za produkcijo): Za večja ali bolj zapletena okolja konfigurirajte DNS zapise (A zapise), ki preslikajo imena gostiteljev strežnikov na njihove ustrezne IP naslove.
Preverjanje
Po konfiguraciji razrešitve imen gostiteljev preverite, ali lahko vsak strežnik razreši imena gostiteljev drugih strežnikov z uporabo ukaza ping. Na primer, iz galera0 zaženite ping galera1. Prejeli bi morali odgovor.
Namestitev potrebnih paketov
Preden lahko konfigurirate Galera grozd, morate na vsakem vozlišču namestiti potrebne MariaDB pakete. Ta razdelek opisuje potrebne korake za sisteme, ki temeljijo na Debianu.
Dodajanje potrebnih repozitorijev
Dodajte potrebne repozitorije z naslednjimi ukazi:
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 pakete. Zaženite naslednji ukaz kot root na vsakem vozlišču:
apt update && apt upgrade -y
Namestitev paketov
Namestite potrebne pakete na vsakem vozlišču z uporabo tega ukaza:
apt install rsync mariadb-server mariadb-client galera-4 proxysql keepalived -y
Zavarovanje namestitve MariaDB
Zaženite varnostni skript na vsakem vozlišču:
sudo mariadb-secure-installation
Ta skript izvede dva ključna koraka: pozval vas bo, da nastavite močno geslo za root za strežnik MariaDB, in odstranil bo vse negotove privzete konfiguracije. Sledite navodilom na zaslonu, da dokončate ta postopek.
Omogočanje oddaljenega dostopa 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 zagotavlja sinhrono replikacijo podatkov med vsemi vozlišči v grozdu. To pomeni, da se vsaka sprememba, narejena v bazi podatkov na enem vozlišču, samodejno in hkrati prenese na vsa druga vozlišča. Ključne prednosti Galere v tej nastavitvi:
- Visoka razpoložljivost: Če eno vozlišče odpove, druga vozlišča še naprej zagotavljajo podatke brez prekinitve. Grozd samodejno promovira preživelo vozlišče, da postane primarno.
- Doslednost podatkov: Zaradi sinhrone replikacije so podatki vedno dosledni med vsemi vozlišči. To odpravlja tveganje zastarelih branj – vedno berete najnovejšo različico podatkov.
- Razširljivost branja: Ker so podatki replicirani med več vozlišči, lahko porazdelite poizvedbe za branje po grozdu za povečano zmogljivost branja.
V bistvu Galera zagotavlja, da vaša MariaDB baza podatkov ostane visoko razpoložljiva, dosledna in razširljiva – ključne zahteve za številne aplikacije.
Konfiguracija
Ustvarite konfiguracijsko datoteko /etc/mysql/conf.d/galera.cnf na vsakem vozlišču. Vsebina bo enaka, razen imena in naslova vsakega vozlišča. Prilepite to predlogo:
[mysqld] # Osnovne nastavitve MariaDB binlog_format=ROW default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 # Konfiguracija ponudnika Galera wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so # Konfiguracija grozda Galera wsrep_cluster_name="my_galera_cluster" wsrep_cluster_address="gcomm://galera0,galera1,galera2" # Specifična konfiguracija tega vozlišča wsrep_node_name="<node_name>" wsrep_node_address="<node_address>"
Spremenite <node_name> in <node_address> na vsakem vozlišču. Uporabite galera0 za prvo vozlišče in tako naprej.
Pomembno: wsrep_cluster_address — na vsakem vozlišču navedite imena gostiteljev vseh vozlišč v grozdu. 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
Zagon grozda na prvem vozlišču z uporabo tega ukaza:
sudo systemctl stop mariadb && sudo galera_new_cluster
Ponovni zagon MariaDB na drugih vozliščih:
sudo systemctl restart mariadb
Preverjanje nastavitve
Preverjanje velikosti grozda
Povežite se z MariaDB na katerem koli vozlišču in preverite stanje grozda. Povežite se z bazo podatkov:
sudo mariadb -u root -p
Preverite stanje vozlišč grozda v lupini MariaDB:
SHOW STATUS LIKE 'wsrep_cluster_size';
wsrep_cluster_size bi moral biti enak številu naših vozlišč.
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+ 1 vrstica v naboru (0.001 sek)
Testiranje replikacije
Ustvarite testno bazo podatkov na katerem koli vozlišču in vstavite testno sporočilo. Izvedite naslednje ukaze iz lupine MariaDB:
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 uporabo naslednje SQL poizvedbe prek lupine MariaDB:
USE galtest;
SELECT * FROM messages;
Testno sporočilo bi se moralo prikazati:
+----+--------------------+ | id | text | +----+--------------------+ | 7 | Test from galera0! | +----+--------------------+ 1 vrstica v naboru (0.001 sek)
ProxySQL
ProxySQL v tej nastavitvi grozda ni le preprost posrednik; dramatično izboljša zmogljivost, zanesljivost in upravljivost vaše baze podatkov. ProxySQL deluje kot ključna plast med vašo aplikacijo(-ami) in vašim Galera grozdom. Njegovi glavni nameni so:
- Predpomnjenje poizvedb: ProxySQL agresivno predpomni pogosto izvajane poizvedbe. Namesto da bi večkrat poizvedoval Galera grozd za iste podatke, vrne predpomnjeni rezultat, kar znatno zmanjša obremenitev baze podatkov in izboljša odzivne čase. To je še posebej koristno za aplikacije z veliko branji.
- Povezovalni bazen: ProxySQL vzdržuje bazen trajnih povezav z Galera grozdom. Ustvarjanje povezave z bazo podatkov je operacija, ki zahteva veliko virov. Povezovalni bazen se izogne tej obremenitvi z ponovno uporabo obstoječih povezav, kar dodatno poveča zmogljivost.
- Uravnoteženje obremenitve in usmerjanje poizvedb: ProxySQL lahko inteligentno usmerja poizvedbe na različna vozlišča v vašem Galera grozdu glede na dejavnike, kot so obremenitev strežnika, vrsta poizvedbe ali afiniteta podatkov. To vam omogoča, da porazdelite delovno obremenitev in maksimizirate zmogljivost vašega grozda.
- Optimizacija poizvedb: ProxySQL lahko prepiše poizvedbe, da so bolj učinkovite, potencialno izkoriščajoč Galerine zmogljivosti za optimalno izvedbo.
- Odkrivanje napak in usmerjanje: ProxySQL nenehno spremlja zdravje vaših Galera vozlišč. Če vozlišče odpove, ProxySQL samodejno preusmeri poizvedbe na zdrava vozlišča, kar zagotavlja neprekinjeno storitev.
V bistvu ProxySQL deluje kot pametni upravljalec prometa in optimizator zmogljivosti za vaš Galera grozd, kar znatno izboljša njegovo učinkovitost in odpornost.
Previdnostni ukrepi
Prijave in gesla spodaj so namenjena samo izobraževalnim namenom. Uporabite močna gesla za produkcijsko nastavitev.
Nastavitev uporabnikov
Monitor uporabnik
Monitor uporabnik znotraj ProxySQL je namenski račun baze podatkov, ki omogoča orodjem za spremljanje varen dostop do notranjih statistik in metrik. Konfiguriran je z minimalnimi dovoljenji – samo SELECT dostop – kar zagotavlja celovitost in varnost vaših podatkov, hkrati pa omogoča celovito spremljanje zmogljivosti.
Izvedite to poizvedbo v lupini MariaDB na glavnem vozlišču, da dodate monitor uporabnika:
CREATE USER 'monitor'@'%' IDENTIFIED BY 'monitor';
GRANT SELECT ON *.* TO 'monitor'@'%';
FLUSH PRIVILEGES;
Uporabnik aplikacije
Uporabnik aplikacije znotraj ProxySQL je standardni račun baze podatkov, ki ga vaše aplikacije uporabljajo za povezovanje in izvajanje poizvedb proti osnovnemu Galera grozdu. Preko tega uporabnika vaša aplikacija neposredno komunicira z bazo podatkov, pridobiva in manipulira s podatki.
Izvedite to poizvedbo v lupini MariaDB na glavnem vozlišču, da dodate uporabnika aplikacije:
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' IDENTIFIED BY 'test' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Preverjanje
Preverite ustvarjanje uporabnikov na vseh vozliščih z uporabo tega ukaza:
mariadb -u root -e "SELECT user, host FROM mysql.user;"
Konfiguracija
Ustvarite konfiguracijsko datoteko /etc/proxysql.cnf na vsakem vozlišču in prilepite 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 z uporabo teh ukazov:
sudo systemctl start proxysql
sudo systemctl enable proxysql
sudo proxysql --reload
Preverite svojo nastavitev ProxySQL z uporabo tega ukaza:
mysql -u admin -padmin -h 127.0.0.1 -P6032 -e "SELECT hostname,status FROM mysql_servers;"
Vsa vozlišča morajo biti na spletu:
+----------+--------+ | hostname | status | +----------+--------+ | galera0 | ONLINE | | galera1 | ONLINE | | galera2 | ONLINE | +----------+--------+
Keepalived
Keepalived upravlja z virtualnim IP naslovom, kar zagotavlja eno točko dostopa do grozda in avtomatizira preklop v primeru okvare vozlišča. Spremlja zdravje MariaDB vozlišč in preusmeri promet na zdravo vozlišče, če pride do okvare, kar ohranja visoko razpoložljivost. Konfiguracija določa Virtual Router ID 51 in uporablja vmesnik eth0. Na glavnem vozlišču je state nastavljen na MASTER s prioriteto 100. Rezervna vozlišča so konfigurirana z state BACKUP, s prioritetami 90 in 80. virtual_ipaddress je nastavljen na 192.168.10.50 na vseh vozliščih. VIP in vozlišča morajo biti v istem podomrežju. Gostovanje mora podpirati VIP za VPS. Avtentikacija je omogočena z deljenim geslom 1234. Nastavitev advert_int določa, kako pogosto glavno vozlišče pošilja VRRP oglase. Nižja vrednost pomeni pogostejše oglase, kar lahko pospeši zaznavanje preklopa; višja vrednost pomeni manj pogoste oglase, kar lahko upočasni preklop, vendar zmanjša omrežno obremenitev.
Konfiguracija
Ustvarite konfiguracijsko datoteko /etc/keepalived/keepalived.conf na vsakem vozlišču in prilepite 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 | +--------------------+-------+
Zdaj lahko naključno ponovno zaženete vozlišča, preverite velikost grozda in razpoložljivost podatkov.

Zaključek
Ta vodnik je pokazal, kako zgraditi visoko razpoložljiv MariaDB grozd z uporabo Galera replikacije, ProxySQL za usmerjanje poizvedb in Keepalived za upravljanje virtualnih IP-jev na Debianu. Ta arhitektura zagotavlja več ključnih prednosti, vključno z visoko razpoložljivostjo z avtomatiziranim preklopom, doslednostjo podatkov skozi sinhrono replikacijo 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ševati izpade.