Postavljanje klastera baze podataka visoke dostupnosti koristeći MariaDB Galera, ProxySQL, Keepalived i Debian 13 | INTROSERV
EUR
european

EUR

usa

USD

Croatia Hr
Ex. VAT Ex. VAT 0%

Postavljanje klastera baze podataka visoke dostupnosti koristeći MariaDB Galera, ProxySQL, Keepalived i Debian 13

Uvod

Kako vaše aplikacije rastu po opsegu i važnosti, osiguravanje neprekidne dostupnosti postaje ključno. Prekid rada baze podataka može dovesti do gubitka prihoda, frustriranih korisnika i oštećenja vaše reputacije. Ovaj vodič pokazuje kako izgraditi visoko dostupni (HA) MariaDB klaster koristeći Galera replikaciju, ProxySQL za inteligentno usmjeravanje upita i Keepalived za upravljanje virtualnom IP adresom na Debianu.

Ova arhitektura kombinira prednosti svake tehnologije kako bi pružila robusno i otporno okruženje baze podataka. MariaDB Galera pruža sinkronu replikaciju s više glavnih čvorova (multi-master), osiguravajući dosljednost podataka na više čvorova. ProxySQL djeluje kao ruter upita i balanser opterećenja, pružajući inteligentno upravljanje prometom i rasterećujući poslužitelje baze podataka. Keepalived upravlja virtualnom IP adresom, pružajući jedinstvenu točku pristupa klasteru i automatizirajući prebacivanje (failover) 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. Usredotočit ćemo se na konfiguraciju i integraciju ovih tehnologija unutar Debian okruženja.

Ključne prednosti ove arhitekture:

  • Visoka dostupnost: Automatsko prebacivanje osigurava minimalno vrijeme zastoja.
  • Dosljednost podataka: Sinkronizirana replikacija jamči dosljednost podataka na svim čvorovima.
  • Poboljšane performanse: ProxySQL optimizira usmjeravanje upita i smanjuje opterećenje na poslužiteljima baze podataka.
  • Pojednostavljeno upravljanje: Jedna virtualna IP adresa pojednostavljuje konfiguraciju aplikacije i pristup.

Što će vam trebati:

  • Tri Debian 13 VPS-a ili poslužitelja.
  • Root ili sudo pristup svim poslužiteljima.
  • Poznavanje komandne linije.
  • Osnovno razumijevanje TCP/IP umrežavanja i DNS-a.

Preduvjeti

Međusobno povezivanje čvorova

Ispravno rješavanje naziva domaćina ključno je za ispravno funkcioniranje klastera. Svaki poslužitelj mora moći pronaći ostale poslužitelje po nazivu. Koristimo nazive domaćina kako bismo pojednostavili upravljanje. IP adrese čvorova moraju biti u istoj podmreži.

Mappiranje naziva hosta i IP adrese

  • galera0 (master čvor): 192.168.10.10
  • galera1 (slave čvor): 192.168.10.11
  • galera2 (slave čvor): 192.168.10.12

Rješavanje imena hosta možete postići pomoću datoteke /etc/hosts ili DNS-a.

  • Korištenje /etc/hosts (jednostavnija konfiguracija): Ovo je pogodno za okruženja za testiranje i razvoj. Na svakom poslužitelju dodajte zapise koji povezuju naziv domaćina poslužitelja s njegovom statičkom IP adresom u datoteku /etc/hosts.
  • Korištenje DNS-a (preporučeno za produkciju): Za veća ili složenija okruženja konfigurirajte DNS zapise (A zapise) koji povezuju nazive domaćina poslužitelja s njihovim IP adresama.

Provjera

Nakon konfiguracije rješavanja imena domaćina, provjerite može li svaki poslužitelj riješiti imena domaćina drugih poslužitelja pomoću naredbe ping. Na primjer, s poslužitelja galera0 pokrenite ping galera1. Trebali biste dobiti odgovor.

Instalacija potrebnih paketa

Prije nego što možete konfigurirati Galera klaster, morate instalirati potrebne MariaDB pakete na svaki čvor. Ovaj odjeljak opisuje potrebne korake za sustave temeljene na Debianu.

Dodajte potrebne repozitorije

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 same pakete. Pokrenite sljedeću naredbu kao root na svakom čvoru:

apt update && apt upgrade -y

Instalirajte pakete

Instalirajte potrebne pakete na svakom čvoru koristeći ovu naredbu:

apt install rsync mariadb-server mariadb-client galera-4 proxysql keepalived -y

Sigurnosna instalacija MariaDB-a

Pokrenite skriptu za sigurnost na svakom čvoru:

sudo mariadb-secure-installation

Ovaj skripta izvodi dva ključna koraka: zatražit će od vas da postavite jak root lozinku za MariaDB poslužitelj i uklonit će sve nesigurne zadane konfiguracije. Slijedite upute na zaslonu kako biste dovršili ovaj postupak.

Omogućite daljinski pristup MariaDB-u

Pokrenite ove naredbe za omogućavanje udaljenog pristupa 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 osigurava sinkronu replikaciju podataka na svim čvorovima u klasteru. To znači da se svaka promjena unesenu u bazu podataka na jednom čvoru automatski i istovremeno prenosi na sve ostale čvorove. Ključne prednosti Galere u ovoj konfiguraciji:

  • Visoka dostupnost: Ako jedan čvor zakaže, ostali čvorovi nastavljaju posluživati podatke bez prekida. Klaster automatski promiče preživjeli čvor da postane primarni.
  • Konsistencija podataka: Zbog sinkrone replikacije podaci su uvijek dosljedni na svim čvorovima. To eliminira rizik zastarjelih upita – uvijek čitate najnoviju verziju podataka.
  • Skalabilnost čitanja: Budući da se podaci repliciraju na više čvorova, upite za čitanje možete raspodijeliti po klasteru radi poboljšanja performansi čitanja.

U suštini, Galera osigurava da vaša MariaDB baza podataka ostane visoko dostupna, dosljedna i skalabilna – ključni zahtjevi za mnoge aplikacije.

Konfiguracija

Na svakom čvoru stvorite konfiguracijsku datoteku /etc/mysql/conf.d/galera.cnf. Sadržaj će biti identičan, s iznimkom naziva i adrese svakog čvora. Zalijepite ovaj predložak:

[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

Promijenite <node_name> i <node_address> na svakom čvoru. Za prvi čvor upotrijebite galera0 i tako dalje.

Info

wsrep_cluster_address — navedite nazive domaćina svih čvorova u klasteru na svakom čvoru. wsrep_node_name — mora biti jedinstven za svaki čvor (npr. galera0, galera1, galera2). wsrep_node_address — postavite na naziv hosta čvor koji konfigurirate.

Pokrenite klaster

Pokrenite klaster na prvom čvoru pomoću ove naredbe:

sudo systemctl stop mariadb && sudo galera_new_cluster

Ponovno pokrenite MariaDB na ostalim čvorovima:

sudo systemctl restart mariadb

Provjerite postavke

Provjerite veličinu klastera

Povežite se na MariaDB na bilo kojem čvoru i provjerite status klastera. Povežite se na bazu podataka:

sudo mariadb -u root -p

Provjerite status čvorova klastera u MariaDB shellu:

SHOW STATUS LIKE 'wsrep_cluster_size';

wsrep_cluster_size bi trebao biti jednak broju naših čvorova.

MariaDB [galtest]> SHOW STATUS LIKE 'wsrep_cluster_size'; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+ 1 row in set (0.001 sec) MariaDB [galtest]>

Test replikacije

Stvorite testnu bazu podataka na bilo kojem čvoru i umetnite testnu poruku. Izvršite sljedeće naredbe u MariaDB shellu:

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 ostalim čvorovima koristeći sljedeći SQL upit putem MariaDB shell-a:

USE galtest; SELECT * FROM messages;

Testna poruka bi se trebala pojaviti:

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 u ovoj konfiguraciji klastera više je od običnog posrednika; on dramatično poboljšava performanse, pouzdanost i upravljivost vaše baze podataka. ProxySQL je ključni sloj između vaše aplikacije (ili aplikacija) i vašeg Galera klastera. Njegove primarne svrhe su:

  • Kezanje upita: ProxySQL agresivno kežira često izvršavane upite. Umjesto da ponovno upituje 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 opterećenjem čitanja.
  • Upravljanje bazama podataka: ProxySQL održava bazen trajnih veza s Galera klasterom. Uspostavljanje veze s bazom podataka je operacija koja zahtijeva mnogo resursa. Upravljanje vezama izbjegava ovaj teret ponovnom upotrebom postojećih veza, dodatno poboljšavajući performanse.
  • Uravnoteženje opterećenja i usmjeravanje upita: ProxySQL može inteligentno usmjeravati upite na različite čvorove u vašem Galera klasteru na temelju čimbenika kao što su opterećenje poslužitelja, vrsta upita ili afinitet podataka. To vam omogućuje raspodjelu radnog opterećenja i maksimiziranje performansi vašeg klastera.
  • Optimizacija upita: ProxySQL može prepravljati upite kako bi bili učinkovitiji, potencijalno koristeći mogućnosti Galere za optimalno izvršavanje.
  • Otkrivanje kvara i preusmjeravanje: ProxySQL kontinuirano nadzire stanje vaših Galera čvorova. Ako čvor zakaže, ProxySQL automatski preusmjerava upite na ispravne čvorove, osiguravajući neprekinutu uslugu.

U suštini, ProxySQL djeluje kao pametni upravitelj prometom i optimizator performansi za vaš Galera klaster, značajno poboljšavajući njegovu učinkovitost i otpornost.

Mjere opreza

Info

Prijave i lozinke u nastavku služe isključivo u obrazovne svrhe. Za produkcijsku postavku koristite jake lozinke.

Postavljanje korisnika

Korisnik za nadzor

Korisnik za nadzor unutar ProxySQL-a je namjenski račun u bazi podataka isključivo za alate za nadzor kako bi sigurno pristupili internim statistikama i metrika. Konfiguriran je s minimalnim dozvolama – samo dozvolom SELECT – čime se osigurava integritet i sigurnost vaših podataka, a istovremeno omogućuje sveobuhvatan nadzor performansi.

Pokrenite ovaj upit u MariaDB shellu 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 u ProxySQL-u je standardni korisnički račun baze podataka koji vaše aplikacije koriste za povezivanje i izvršavanje upita na temeljnom Galera klasteru. Kroz ovog korisnika vaša aplikacija izravno komunicira s bazom podataka, dohvaćajući i obrađujući podatke.

Pokrenite ovaj upit u MariaDB shellu na glavnom čvoru kako biste dodali korisnika aplikacije:

GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' IDENTIFIED BY 'test' WITH GRANT OPTION; FLUSH PRIVILEGES;

Verifikacija

Provjerite stvaranje korisnika na svim čvorovima koristeći ovu naredbu:

mariadb -u root -e "SELECT user, host FROM mysql.user;"

Konfiguracija

Na svakom čvoru stvorite konfiguracijsku datoteku /etc/proxysql.cnf 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 pomoću ovih naredbi:

sudo systemctl start proxysql sudo systemctl enable proxysql sudo proxysql --reload

Provjerite konfiguraciju ProxySQL-a pomoću ove naredbe:

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 čvorova. Prati ispravnost MariaDB čvorova i preusmjerava promet na ispravan čvor ako dođe do kvara, održavajući visoku dostupnost. Konfiguracija definira ID virtualnog usmjerivača 51 i koristi sučelje eth0. Na glavnom čvoru stanje je postavljeno na MASTER s prioritetom 100. Rezervni čvorovi konfigurirani su sa stanjem BACKUP, s prioritetima 90, odnosno 80. Virtual_ipaddress je postavljen na 192.168.10.50 na svim čvorovima. VIP i čvorovi moraju biti u istoj podmreži. Usluga hostinga mora podržavati VIP za VPS. Autentifikacija je omogućena zajedničkom lozinkom 1234. Postavka advert_int definira koliko često glavni čvor šalje VRRP oglase. Niža vrijednost znači češće oglase, što potencijalno ubrzava otkrivanje preuzimanja; viša vrijednost znači rjeđe oglase, što potencijalno odgađa preuzimanje, ali smanjuje mrežni promet.

Konfiguracija

Na svakom čvoru stvorite konfiguracijsku datoteku /etc/keepalived/keepalived.conf 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 uslugu keepalived:

sudo systemctl enable keepalived && sudo systemctl start keepalived

Verifikacija

Za provjeru postavki upotrijebite VIP konfiguriran putem Keepaliveda 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 verifikaciji:

+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+

Sada možete nasumično ponovno pokrenuti čvorove, provjeriti veličinu klastera i dostupnost podataka.

Keepalived cluster verification result

Zaključak

Ovaj vodič pokazao je kako izgraditi visoko dostupni MariaDB klaster koristeći Galera replikaciju, ProxySQL za usmjeravanje upita i Keepalived za upravljanje virtualnom IP adresom na Debianu. Ova arhitektura pruža nekoliko ključnih prednosti, uključujući visoku dostupnost s automatskim prebacivanjem (failover), dosljednost podataka putem sinkrone replikacije i poboljšane performanse putem ProxySQL-a. Kombiniranjem ovih tehnologija možete izgraditi robusno i otporno okruženje za bazu podataka koje je sposobno podnijeti povećana opterećenja i minimizirati vrijeme neaktivnosti.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA