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 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.

Info

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

Info

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.

Rezultat provjere klastera Keepalived

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.

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