Postavljanje klastera baze podataka visoke dostupnosti koristeći MariaDB Galera, ProxySQL, Keepalived i Debian 13.
Uvod
Kako vaše aplikacije rastu u opsegu i važnosti, osiguravanje kontinuirane dostupnosti postaje ključno. Zastoj baze podataka može dovesti do gubitka prihoda, frustriranih korisnika i štete za vaš ugled. Ovaj vodič pokazuje kako izgraditi visoko dostupni (HA) MariaDB klaster koristeći Galera replikaciju, ProxySQL za inteligentno usmjeravanje upita i Keepalived za upravljanje virtualnim IP-om na Debianu.
Ova arhitektura kombinira snage svake tehnologije kako bi pružila robusno i otporno okruženje baze podataka. MariaDB Galera pruža sinkronu multi-master replikaciju, osiguravajući konzistentnost podataka na više čvorova. ProxySQL djeluje kao usmjerivač upita i balansira opterećenje, pružajući inteligentno upravljanje prometom i rasterećenje serverskih baza podataka. Keepalived upravlja virtualnom IP adresom, pružajući jedinstvenu točku pristupa klasteru i automatizirajući prebacivanje u slučaju kvara čvora.
Ovaj vodič pretpostavlja iskustvo u administraciji Linux sustava, osnovne koncepte umrežavanja (TCP/IP, DNS) i poznavanje administracije baza podataka. Fokusirat ćemo se na konfiguraciju i integraciju ovih tehnologija unutar Debian okruženja.
Ključne prednosti ove arhitekture:
- Visoka dostupnost: Automatizirano prebacivanje osigurava minimalno vrijeme zastoja.
- Konzistentnost podataka: Sinkrona replikacija jamči konzistentnost podataka na svim čvorovima.
- Poboljšana izvedba: ProxySQL optimizira usmjeravanje upita i smanjuje opterećenje serverskih baza podataka.
- Pojednostavljeno upravljanje: Jedinstvena virtualna IP adresa pojednostavljuje konfiguraciju aplikacija i pristup.
Što će vam trebati:
- Tri Debian 13 VPS-a ili servera.
- Root ili sudo pristup svim serverima.
- Poznavanje sučelja naredbenog retka.
- Osnovno razumijevanje TCP/IP umrežavanja i DNS-a.
Preduvjeti
Međusobno povezivanje čvorova
Ispravno rješavanje imena hosta je ključno za ispravno funkcioniranje klastera. Svaki server mora biti u mogućnosti pronaći druge servere po imenu. Koristimo imena hostova kako bismo pojednostavili upravljanje. IP adrese čvorova moraju biti u istoj podmreži.
Mapiranje imena hosta i IP adrese
- galera0 (glavni čvor): 192.168.10.10
- galera1 (pomoćni čvor): 192.168.10.11
- galera2 (pomoćni čvor): 192.168.10.12
Rješavanje imena hosta možete postići korištenjem ili /etc/hosts ili DNS-a.
- Korištenje
/etc/hosts(jednostavnija postavka): Ovo je prikladno za testna i razvojna okruženja. Na svakom serveru dodajte unose koji mapiraju ime hosta servera na njegovu statičku IP adresu u datoteci/etc/hosts. - Korištenje DNS-a (preporučeno za produkciju): Za veća ili složenija okruženja, konfigurirajte DNS zapise (A zapise) koji mapiraju imena hostova servera na njihove odgovarajuće IP adrese.
Provjera
Nakon konfiguriranja rješavanja imena hosta, provjerite može li svaki server riješiti imena hostova drugih servera koristeći naredbu ping. Na primjer, s galera0, pokrenite ping galera1. Trebali biste primiti odgovor.
Instalacija potrebnih paketa
Prije nego što možete konfigurirati Galera klaster, trebate instalirati potrebne MariaDB pakete na svakom čvoru. Ovaj odjeljak opisuje potrebne korake za sustave temeljene na Debianu.
Dodavanje potrebnih repozitorija
Dodajte potrebne repozitorije koristeći sljedeće naredbe:
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
Ažuriranje sustava
Prvo, ažurirajte popise paketa i pakete. Pokrenite sljedeću naredbu kao root na svakom čvoru:
apt update && apt upgrade -y
Instalacija paketa
Instalirajte potrebne pakete na svakom čvoru koristeći ovu naredbu:
apt install rsync mariadb-server mariadb-client galera-4 proxysql keepalived -y
Osiguranje instalacije MariaDB-a
Pokrenite sigurnosni skript na svakom čvoru:
sudo mariadb-secure-installation
Ovaj skript izvodi dva ključna koraka: zatražit će vas da postavite snažnu root lozinku za MariaDB server i uklonit će sve nesigurne zadane konfiguracije. Slijedite upute na ekranu kako biste dovršili ovaj proces.
Omogućavanje daljinskog pristupa MariaDB-u
Pokrenite ove naredbe kako biste omogućili daljinski pristup na svakom čvoru:
sed -i "s/.*bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/mariadb.conf.d/50-server.cnf
systemctl restart mariadb
Galera
Galera pruža sinkronu replikaciju podataka na svim čvorovima u klasteru. To znači da se svaka promjena napravljena u bazi podataka na jednom čvoru automatski i istovremeno propagira na sve druge čvorove. Ključne prednosti Galere u ovoj postavci:
- Visoka dostupnost: Ako jedan čvor zakaže, drugi čvorovi nastavljaju pružati podatke bez prekida. Klaster automatski promovira preživjeli čvor da postane primarni.
- Konzistentnost podataka: Zbog sinkrone replikacije, podaci su uvijek konzistentni na svim čvorovima. Ovo eliminira rizik od zastarjelih čitanja – uvijek čitate najnoviju verziju podataka.
- Skalabilnost čitanja: Budući da su podaci replicirani na više čvorova, možete distribuirati upite za čitanje po klasteru za povećanu izvedbu čitanja.
U suštini, Galera osigurava da vaša MariaDB baza podataka ostane visoko dostupna, konzistentna i skalabilna – ključni zahtjevi za mnoge aplikacije.
Konfiguracija
Kreirajte konfiguracijsku datoteku /etc/mysql/conf.d/galera.cnf na svakom čvoru. Sadržaj će biti identičan, osim imena i adrese svakog čvora. Zalijepite ovaj predložak:
[mysqld] # Osnovne postavke MariaDB-a binlog_format=ROW default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 # Konfiguracija Galera providera wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so # Konfiguracija Galera klastera wsrep_cluster_name="my_galera_cluster" wsrep_cluster_address="gcomm://galera0,galera1,galera2" # Specifična konfiguracija ovog čvora wsrep_node_name="<node_name>" wsrep_node_address="<node_address>"
Promijenite <node_name> i <node_address> na svakom čvoru. Koristite galera0 za prvi čvor i tako dalje.
Važno: wsrep_cluster_address — navedite imena hostova svih čvorova u klasteru na svakom čvoru. wsrep_node_name — mora biti jedinstveno za svaki čvor (npr. galera0, galera1, galera2). wsrep_node_address — postavite na ime hosta čvora koji konfigurirate.
Pokretanje klastera
Pokrenite klaster na prvom čvoru koristeći ovu naredbu:
sudo systemctl stop mariadb && sudo galera_new_cluster
Ponovno pokrenite MariaDB na drugim čvorovima:
sudo systemctl restart mariadb
Provjera postavke
Provjera veličine klastera
Povežite se s MariaDB-om na bilo kojem čvoru i provjerite status klastera. Povežite se s bazom podataka:
sudo mariadb -u root -p
Provjerite status čvorova klastera u MariaDB ljusci:
SHOW STATUS LIKE 'wsrep_cluster_size';
wsrep_cluster_size bi trebao biti jednak broju naših čvorova.
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+ 1 row in set (0.001 sec)
Testiranje replikacije
Kreirajte testnu bazu podataka na bilo kojem čvoru i umetnite testnu poruku. Izvršite sljedeće naredbe iz MariaDB ljuske:
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!');
Zatim provjerite podatke na drugim čvorovima koristeći sljedeći SQL upit putem MariaDB ljuske:
USE galtest;
SELECT * FROM messages;
Testna poruka bi se trebala pojaviti:
+----+--------------------+ | id | text | +----+--------------------+ | 7 | Test from galera0! | +----+--------------------+ 1 row in set (0.001 sec)
ProxySQL
ProxySQL unutar ove postavke klastera je više od jednostavnog posrednika; dramatično poboljšava izvedbu, pouzdanost i upravljivost vaše baze podataka. ProxySQL djeluje kao ključni sloj između vaše aplikacije(a) i vašeg Galera klastera. Njegove primarne svrhe su:
- Keširanje upita: ProxySQL agresivno kešira često izvršavane upite. Umjesto da više puta upitujete Galera klaster za iste podatke, poslužuje keširani rezultat, značajno smanjujući opterećenje baze podataka i poboljšavajući vrijeme odziva. Ovo je posebno korisno za aplikacije s velikim brojem čitanja.
- Pooliranje veza: ProxySQL održava pool trajnih veza s Galera klasterom. Uspostavljanje veze s bazom podataka je operacija koja troši resurse. Pooliranje veza izbjegava ovaj trošak ponovnim korištenjem postojećih veza, dodatno poboljšavajući izvedbu.
- Balansiranje opterećenja i usmjeravanje upita: ProxySQL može inteligentno usmjeravati upite na različite čvorove u vašem Galera klasteru na temelju faktora kao što su opterećenje servera, tip upita ili afinitet podataka. Ovo vam omogućuje da distribuirate radno opterećenje i maksimizirate izvedbu vašeg klastera.
- Optimizacija upita: ProxySQL može prepisati upite kako bi bili učinkovitiji, potencijalno koristeći Galera mogućnosti za optimalno izvršenje.
- Otkrivanje kvarova i usmjeravanje: ProxySQL kontinuirano prati zdravlje vaših Galera čvorova. Ako čvor zakaže, ProxySQL automatski preusmjerava upite na zdrave čvorove, osiguravajući neprekidnu uslugu.
U suštini, ProxySQL djeluje kao pametni upravitelj prometa i optimizator izvedbe za vaš Galera klaster, značajno poboljšavajući njegovu učinkovitost i otpornost.
Mjere opreza
Prijave i lozinke u nastavku su samo za obrazovne svrhe. Koristite jake lozinke za produkcijsku postavku.
Postavljanje korisnika
Korisnik za nadzor
Korisnik za nadzor unutar ProxySQL-a je namjenski račun baze podataka isključivo za alate za nadzor kako bi sigurno pristupili internim statistikama i metrikama. Konfiguriran je s minimalnim dopuštenjima – samo SELECT pristup – osiguravajući integritet i sigurnost vaših podataka dok omogućuje sveobuhvatno praćenje izvedbe.
Izvršite ovaj upit u MariaDB ljusci na glavnom čvoru kako biste dodali korisnika za nadzor:
CREATE USER 'monitor'@'%' IDENTIFIED BY 'monitor';
GRANT SELECT ON *.* TO 'monitor'@'%';
FLUSH PRIVILEGES;
Korisnik aplikacije
Korisnik aplikacije unutar ProxySQL-a je standardni račun baze podataka koji koriste vaše aplikacije za povezivanje i izvršavanje upita protiv osnovnog Galera klastera. Kroz ovog korisnika vaša aplikacija izravno komunicira s bazom podataka, dohvaćajući i manipulirajući podacima.
Izvršite ovaj upit u MariaDB ljusci na glavnom čvoru kako biste dodali korisnika aplikacije:
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' IDENTIFIED BY 'test' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Provjera
Provjerite kreiranje korisnika na svim čvorovima koristeći ovu naredbu:
mariadb -u root -e "SELECT user, host FROM mysql.user;"
Konfiguracija
Kreirajte konfiguracijsku datoteku /etc/proxysql.cnf na svakom čvoru i zalijepite sljedeći sadržaj:
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 })
Omogućite i pokrenite ProxySQL koristeći ove naredbe:
sudo systemctl start proxysql
sudo systemctl enable proxysql
sudo proxysql --reload
Provjerite svoju ProxySQL postavku koristeći ovu naredbu:
mysql -u admin -padmin -h 127.0.0.1 -P6032 -e "SELECT hostname,status FROM mysql_servers;"
Svi čvorovi moraju biti online:
+----------+--------+ | hostname | status | +----------+--------+ | galera0 | ONLINE | | galera1 | ONLINE | | galera2 | ONLINE | +----------+--------+
Keepalived
Keepalived upravlja virtualnom IP adresom, pružajući jedinstvenu točku pristupa klasteru i automatizirajući prebacivanje u slučaju kvara čvora. Prati zdravlje MariaDB čvorova i preusmjerava promet na zdravi čvor ako dođe do kvara, održavajući visoku dostupnost. Konfiguracija definira Virtual Router ID 51 i koristi sučelje eth0. Na glavnom čvoru, state je postavljen na MASTER s prioritetom 100. Rezervni čvorovi su konfigurirani s state postavljenim na BACKUP, s prioritetima 90 i 80. virtual_ipaddress je postavljen na 192.168.10.50 na svim čvorovima. VIP i čvorovi moraju biti u istoj podmreži. Hosting mora podržavati VIP za VPS. Autentikacija je omogućena s dijeljenom lozinkom 1234. Postavka advert_int definira koliko često glavni čvor šalje VRRP oglase. Niža vrijednost znači češće oglase, potencijalno ubrzavajući otkrivanje prebacivanja; viša vrijednost znači rjeđe oglase, potencijalno odgađajući prebacivanje, ali smanjujući mrežno opterećenje.
Konfiguracija
Kreirajte konfiguracijsku datoteku /etc/keepalived/keepalived.conf na svakom čvoru i zalijepite sljedeći sadržaj:
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 } }
Promijenite <NODE_STATE> i <NODE_PRIORITY> kako je opisano gore. Omogućite i pokrenite keepalived uslugu:
sudo systemctl enable keepalived && sudo systemctl start keepalived
Provjera
Za provjeru postavke, koristite VIP konfiguriran putem Keepalived-a i port konfiguriran putem ProxySQL-a. Provjerite veličinu klastera na primjer:
mariadb -u test -ptest -h 192.168.10.50 -P6033 -D galtest -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
Očekivani odgovor mora odgovarati Galera provjeri:
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+
Sada možete nasumično ponovno pokrenuti čvorove, provjeriti veličinu klastera i dostupnost podataka.

Zaključak
Ovaj vodič je pokazao kako izgraditi visoko dostupni MariaDB klaster koristeći Galera replikaciju, ProxySQL za usmjeravanje upita i Keepalived za upravljanje virtualnim IP-om na Debianu. Ova arhitektura pruža nekoliko ključnih prednosti, uključujući visoku dostupnost s automatiziranim prebacivanjem, konzistentnost podataka kroz sinkronu replikaciju i poboljšanu izvedbu putem ProxySQL-a. Kombiniranjem ovih tehnologija možete izgraditi robusno i otporno okruženje baze podataka sposobno za rukovanje povećanim opterećenjima i minimiziranje zastoja.