MariaDB klasterio su Galera Cluster įdiegimas padidina pa­ti­ki­mu­mą ir su­pa­pras­ti­na duomenų bazės mastelio keitimą. Mūsų pamokoje pa­ro­dy­si­me, kaip įdiegti Galera klasterį Ubuntu 20.04.

Rei­ka­la­vi­mai Galera Cluster MariaDB

Norėdami įdiegti MariaDB Galera klasterį Ubuntu 20.04, turite įvykdyti šiuos rei­ka­la­vi­mus:

  • Keli serveriai: norint sukurti klasterį, reikia ma­žiau­siai trijų serverių arba virtualių mašinų. Visi serveriai turi būti tame pačiame tinkle.
  • Root teisės: Jums rei­ka­lin­gos root teisės arba bent jau ad­mi­nist­ra­to­riaus teisės ser­ve­riuo­se.

Kaip žingsnis po žingsnio nustatyti Galera Cluster MariaDB Ubuntu 20.04 sistemoje

MariaDB Galera klasteris yra prak­tiš­kas duomenų bazės spren­di­mas, už­tik­ri­nan­tis aukštą pri­ei­na­mu­mą, duomenų vi­en­ti­su­mą ir mastelį reiklioms prog­ra­moms. Šiame žingsnis po žingsnio vadove mes pa­aiš­kin­si­me, kaip nustatyti MariaDB Galera klasterį Ubuntu 20.04. Prieš pradėdami, įsi­ti­kin­ki­te, kad turite bent tris serverius arba vir­tu­alias mašinas, skirtas klas­te­riui nustatyti.

1 žingsnis: At­nau­jin­ki­te paketus

Pir­miau­sia tu­rė­tu­mė­te at­nau­jin­ti savo Ubuntu sistemą iki nau­jau­sios versijos. Tai būtina, kad tu­rė­tu­mė­te nau­jau­sius paketus ir saugumo at­nau­ji­ni­mus.

Ati­da­ry­ki­te terminalą ir vykdykite šią komandą, kad at­nau­jin­tu­mė­te paketų šaltinius:

sudo apt update
shell

Įdiekite visus galimus at­nau­ji­ni­mus:

sudo apt upgrade -y
shell

Re­ko­men­duo­ja­me taip pat pašalinti pa­se­nu­sius arba ne­nau­do­ja­mus paketus, kad iš­va­ly­tu­mė­te serverius:

sudo apt autoremove -y
shell

2 žingsnis: įdiekite MariaDB į serverius

Dabar įdiekite MariaDB į visus savo serverius. Nuo 10.1 versijos Galera paketai yra pridedami prie MariaDB serverių.

sudo apt install mariadb-server
shell

Įdiegus, galite paleisti MariaDB paslaugą:

sudo systemctl start mariadb
shell

Naudokite šią komandą, kad MariaDB būtų ak­ty­vuo­ja­ma au­to­ma­tiš­kai kiekvieną kartą, kai sistema yra per­krau­na­ma:

sudo systemctl enable mariadb
shell

Pa­tik­rin­ki­te, ar MariaDB veikia:

sudo systemctl status mariadb
shell

Taip pat tu­rė­tu­mė­te atlikti keletą pag­rin­di­nių saugumo nustatymų ir su­kon­fi­gū­ruo­ti duomenų bazę. Norėdami tai padaryti, pa­lei­s­ki­te sąrankos vedlį:

sudo mysql_secure_installation
shell

Vedlys padės jums atlikti visus veiksmus, pvz., nustatyti pag­rin­di­nį slap­ta­žo­dį, pašalinti ano­ni­miš­kus var­to­to­jus arba pašalinti bandomąją duomenų bazę.

Enter current password for root (enter for none): 
Switch to unix_socket authentication [Y/n] n
Change the root password? [Y/n] Y
New password:
Re-enter new password:
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
shell

Skriptas pir­miau­sia paprašo įvesti dabartinį root slap­ta­žo­dį. Jei MariaDB diegiate Ubuntu 20.04 pirmą kartą, tiesiog pa­spau­s­ki­te Enter ir įveskite naują slap­ta­žo­dį.

3 žingsnis: Kon­fi­gū­ruo­ki­te Galera Cluster MariaDB mazgus

Kiek­vie­na­me mazge sukurkite cnf failą kataloge /etc/mysql/conf.d, kad api­brėž­tu­mė­te Galera spe­ci­fi­nius nu­sta­ty­mus.

nano /etc/mysql/conf.d/galera.cnf
shell

Šis failas yra bendrieji duomenų bazės nu­sta­ty­mai, pvz., dvejopo protokolo formatas ir nu­ma­ty­ta­sis saugojimo variklis. Jame taip pat yra Galera klasterio kon­fi­gū­ra­ci­jos, įskaitant klasterio pa­va­di­ni­mą ir klasterio adresą.

Įterpkite šias eilutes pirmam mazgui:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node_1-ip-address,node_2-ip-address,node_3-ip-address"
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address="node_1-ip-address"
wsrep_node_name="node_1"
shell
  • Bendrieji duomenų bazės nu­sta­ty­mai: Tai apima tokius nu­sta­ty­mus kaip binlog_format=ROW, skirtą dvejopojo žurnalo formatui, ir default-storage-engine=innodb, skirtą numatytam saugojimo varikliui.
  • Galera teikėjo kon­fi­gū­ra­ci­ja: nu­sta­ty­mai, tokie kaip wsrep_on=ON, naudojami Galera rep­li­ka­ci­jai įjungti, o wsrep_provider=/usr/lib/galera/libgalera_smm.so – Galera bi­b­lio­te­kos keliui nurodyti.
  • Galera klasterio kon­fi­gū­ra­ci­ja: Tai apima klasterio pa­va­di­ni­mą (wsrep_cluster_name) ir klasterio adresą (wsrep_cluster_address), kuriame yra klasterio mazgų IP adresai arba hostų pa­va­di­ni­mai.
  • Galera sin­ch­ro­ni­za­vi­mo kon­fi­gū­ra­ci­ja: kon­fi­gū­ruo­ja būsenos mo­men­ti­nės kopijos perdavimo (SST) metodą, pvz., wsrep_sst_method=rsync.
  • Galera mazgo kon­fi­gū­ra­ci­ja: apibrėžia da­bar­ti­nio mazgo IP adresą arba kom­piu­te­rio vardą (wsrep_node_address) ir mazgo pa­va­di­ni­mą (wsrep_node_name).

Išsaugoję failą, sukurkite antrąjį mazgą:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node_1-ip-address,node_2-ip-address,node_3-ip-address"
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address="node_2-ip-address"
wsrep_node_name="node_2"
shell

Dabar tęskite su pas­ku­ti­niu mazgu:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node_1-ip-address,node_2-ip-address,node_3-ip-address"
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address="node_3-ip-address"
wsrep_node_name="node_3"
shell

4 žingsnis: pa­kei­s­ki­te serverių ug­nia­sie­nę

Kadangi mazgai tar­pu­sa­vy­je bendrauja per tam tikrus prievadus, turite pa­ko­re­guo­ti užkardos nu­sta­ty­mus.

Ati­da­ry­ki­te šiuos ug­nie­sie­nės prievadus:

  • 3306 uostas: tai yra stan­dar­ti­nis MariaDB uostas. Jis nau­do­ja­mas duomenų bazės ryšiui ir už­klau­soms.
  • Galera prievadai: Be stan­dar­ti­nio prievado 3306, Galera taip pat naudoja kitus prievadus vidiniam ryšiui tarp mazgų. Stan­dar­ti­nis Galera prievadų dia­pa­zo­nas paprastai yra 4567, 4568 ir 4444, skirti būsenos mo­men­ti­nių kopijų per­da­vi­mui (SST).

Ubuntu serveryje galite nustatyti ug­nia­sie­nės pa­ra­met­rus naudodami šią komandą:

sudo ufw allow 3306,4567,4568,4444/tcp
sudo ufw allow 4567/udp
shell

5 žingsnis: Pa­lei­s­ki­te Galera Cluster MariaDB

Jei MariaDB paslauga jau veikia, ją reikia su­stab­dy­ti:

sudo systemctl stop mariadb
shell

Ši komanda paleidžia MariaDB serverį ir ini­ci­juo­ja naują Galera klasterį pirmajame mazge:

sudo galera_new_cluster
shell

Pa­tik­rin­ki­te mazgų skaičių klas­te­ry­je:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shell

Tu­rė­tu­mė­te gauti tokį rezultatą:

+---------------------------+-------------+
| Variable_name        | Value       |
+--------------------------+--------------+
| wsrep_cluster_size | 1              |
+--------------------------+------------ -+
shell

Pirmasis mazgas buvo sėkmingai paleistas.

Ak­ty­vuo­ki­te antrąjį mazgą:

systemctl start mariadb
shell

Pa­tik­rin­ki­te, ar padidėjo mazgų skaičius:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shell

Konsolėje matome:

+---------------------------+-------------+
| Variable_name        | Value       |
+--------------------------+--------------+
| wsrep_cluster_size | 2               |
+--------------------------+--------------+
shell

Dabar pradedame trečiąjį mazgą:

systemctl start mariadb
shell

Pa­tik­rin­ki­te, ar mazgas veikia tinkamai:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shell

Dabar klas­te­ry­je turėtų būti trys mazgai:

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

6 žingsnis: iš­ban­dy­ki­te rep­li­ka­ci­ją

Įsi­ti­kin­ki­te, kad galite nustatyti ryšį su kiekvienu klasterio mazgu. Naudokite MariaDB klientą, kad pri­si­jung­tu­mė­te kaip root var­to­to­jas arba kitas var­to­to­jas, turintis pa­kan­ka­mas teises.

mysql -u root -p
shell

Sukurkite naują bandomąją duomenų bazę viename iš klasterio mazgų:

CREATE DATABASE test_db;
sql

Pri­si­jun­ki­te prie kitų mazgų ir pa­tik­rin­ki­te, ar testavimo duomenų bazė yra prieinama:

SHOW DATABASES;
sql

Bandomoji duomenų bazė turėtų pa­si­ro­dy­ti duomenų bazių sąraše:

+-------------------------------+
| Database                        |
+-------------------------------+
| information_schema   |
| mysql                              |
| performance_schema |
| test_db                          | 
| sys                                  |
+------------------------------+
sql

Pridėkite naują bandymų lentelę į bandymų duomenų bazę:

USE test_db;
CREATE TABLE test_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50)
);
sql

Įveskite keletą bandomųjų duomenų į bandymų lentelės name stulpelį:

INSERT INTO test_table (name) VALUES ('Alice'), ('Bob'), ('Charlie');
sql

Pa­tik­rin­ki­te kitus mazgus, ar bandomoji lentelė ir įterpti duomenys buvo perkelti:

USE test_db;
SELECT * FROM test_table;
sql

Re­zul­ta­tas rodo žmonių sąrašą su jų vardais ir ID:

+----+-----------+
| id | name    |
+----+-----------+
| 1  | Alice     |
| 2  | Bob       |
| 3  | Charlie |
+----+----------+
sql

Norėdami at­nau­jin­ti duomenų įrašą bandymų lentelėje:

UPDATE test_table SET name = 'David' WHERE name = 'Alice';
sql

Pa­ban­dy­ki­te ištrinti duomenų įrašą:

DELETE FROM test_table WHERE name = 'Bob';
sql

Pa­tik­rin­ki­te kitus mazgus, ar at­nau­ji­ni­mai ir iš­tri­ni­mai buvo rep­li­kuo­ti:

SELECT * FROM test_table;
sql

Pa­kei­ti­mai sėkmingai rodomi kiek­vie­na­me mazge:

+----+------------+
| id | name     |
+----+-----------+
| 1  | David    |
| 3  | Charlie  |
+----+-----------+
sql
Go to Main Menu