MariaDB-klusterin mää­rit­tä­mi­nen Galera Clusterin avulla parantaa tie­to­kan­nan luo­tet­ta­vuut­ta ja yk­sin­ker­tais­taa sen skaa­laus­ta. Ope­tus­oh­jel­mas­sam­me näytämme, kuinka Galera-klusteri asen­ne­taan Ubuntu 20.04:ään.

Galera Cluster MariaDB:n vaa­ti­muk­set

MariaDB Galera -klusterin asen­ta­mi­nen Ubuntu 20.04:ään edel­lyt­tää seu­raa­vien vaa­ti­mus­ten täyt­ty­mis­tä:

  • Useita pal­ve­li­mia: Klusterin ra­ken­ta­mi­seen tarvitaan vähintään kolme pal­ve­lin­ta tai vir­tu­aa­li­ko­nei­ta. Kaikkien pal­ve­li­mien tulee olla samassa verkossa.
  • Juu­rioi­keu­det: Tarvitset pää­käyt­tä­jän oikeudet tai vähintään jär­jes­tel­män­val­vo­jan oikeudet pal­ve­li­mil­la.

Galera Cluster MariaDB:n asennus Ubuntu 20.04:ään vaihe vaiheelta

MariaDB Galera -klusteri on käy­tän­nöl­li­nen tie­to­kan­ta­rat­kai­su, joka tarjoaa korkean käy­tet­tä­vyy­den, tietojen eheyden ja skaa­lau­tu­vuu­den vaa­ti­vil­le so­vel­luk­sil­le. Tässä vai­heit­tai­ses­sa oppaassa opastamme sinut MariaDB Galera -klusterin asen­nuk­ses­sa Ubuntu 20.04 -käyt­tö­jär­jes­tel­mään. Ennen kuin aloitat, varmista, että sinulla on vähintään kolme pal­ve­lin­ta tai vir­tu­aa­li­ko­nei­ta klusterin asen­ta­mis­ta varten.

Vaihe 1: Päivitä paketit

Sinun tulee ensin päivittää Ubuntu-jär­jes­tel­mä­si uusimpaan versioon. Tämä on vält­tä­mä­tön­tä, jotta sinulla on käy­tet­tä­vis­sä­si ajan­ta­sai­set paketit ja tie­to­tur­va­päi­vi­tyk­set.

Avaa ter­mi­naa­li ja suorita seuraava komento pa­ket­ti­läh­tei­den päi­vit­tä­mi­sek­si:

sudo apt update
shell

Asenna kaikki saa­ta­vil­la olevat päi­vi­tyk­set:

sudo apt upgrade -y
shell

Suo­sit­te­lem­me myös van­hen­tu­nei­den tai käyt­tä­mät­tö­mien pakettien pois­ta­mis­ta pal­ve­li­mien puh­dis­ta­mi­sek­si:

sudo apt autoremove -y
shell

Vaihe 2: Asenna MariaDB pal­ve­li­mil­le

Asenna nyt MariaDB kaikkiin pal­ve­li­mii­si. Versiosta 10.1 lähtien Galera-paketit ovat mukana MariaDB-pal­ve­li­mis­sa.

sudo apt install mariadb-server
shell

Asen­nuk­sen jälkeen voit käyn­nis­tää MariaDB-palvelun:

sudo systemctl start mariadb
shell

Käytä seuraavaa komentoa, jotta MariaDB ak­ti­voi­tuu au­to­maat­ti­ses­ti joka kerta, kun jär­jes­tel­mä käyn­nis­te­tään uudelleen:

sudo systemctl enable mariadb
shell

Tarkista, onko MariaDB käynnissä:

sudo systemctl status mariadb
shell

Sinun tulee myös tehdä joitakin pe­rus­tur­val­li­suus­a­se­tuk­sia ja määrittää tie­to­kan­ta. Käynnistä tätä varten asen­nus­vel­ho:

sudo mysql_secure_installation
shell

Ohjattu toiminto opastaa sinut vaiheiden läpi, kuten juu­ri­sa­la­sa­nan aset­ta­mi­nen, ni­met­tö­mien käyt­tä­jien pois­ta­mi­nen tai tes­ti­tie­to­kan­nan pois­ta­mi­nen.

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

Skripti pyytää ensin nykyisen pää­käyt­tä­jän salasanan. Jos asennat MariaDB:n Ubuntu 20.04:ään en­sim­mäis­tä kertaa, paina vain Enter-näppäintä ja kirjoita sitten uusi salasana.

Vaihe 3: Määritä Galera Cluster MariaDB -solmut

Luo cnf -tiedosto ha­ke­mis­toon /etc/mysql/conf.d jo­kai­ses­sa solmussa Galera-spe­si­fis­ten asetusten mää­rit­te­le­mi­sek­si.

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

Tämä tiedosto sisältää yleisiä tie­to­kan­ta-asetuksia, kuten bi­nää­ri­sen pro­to­kol­lan muodon ja ole­tus­tal­len­nus­moot­to­rin. Se sisältää myös Galera-klusterin asetukset, kuten klusterin nimen ja osoitteen.

Lisää seuraavat rivit en­sim­mäi­seen solmuun:

[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
  • Yleiset tie­to­kan­ta-asetukset: Näihin kuuluvat esi­mer­kik­si asetukset binlog_format=ROW (bi­naa­ri­lo­kien muoto) ja default-storage-engine=innodb (ole­tus­tal­len­nus­moot­to­ri).
  • Galera-pal­ve­lun­tar­joa­jan ko­koon­pa­no: Asetuksia kuten wsrep_on=ON käytetään Galera-repli­koin­nin ot­ta­mi­seen käyttöön ja wsrep_provider=/usr/lib/galera/libgalera_smm.so Galera-kirjaston polun mää­rit­tä­mi­seen.
  • Galera-klusterin kon­fi­gu­roin­ti: Tähän kuuluvat klusterin nimi (wsrep_cluster_name) ja klusterin osoite (wsrep_cluster_address), joka sisältää klusterin solmujen IP-osoitteet tai isän­tä­ni­met.
  • Galera-synk­ro­noin­ti­ko­koon­pa­no: Määrittää State Snapshot Transfer (SST) -me­ne­tel­män, esim. wsrep_sst_method=rsync.
  • Galera-solmun kon­fi­gu­roin­ti: Määrittää nykyisen solmun IP-osoitteen tai isän­tä­ni­men (wsrep_node_address) ja solmun nimen (wsrep_node_name).

Kun olet tal­len­ta­nut tiedoston, luo toinen tiedosto toiselle solmulle:

[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

Jatka nyt vii­mei­sel­lä solmulla:

[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

Vaihe 4: Muuta pal­ve­li­mien pa­lo­muu­ria

Koska solmut kom­mu­ni­koi­vat keskenään tiettyjen porttien kautta, sinun on muu­tet­ta­va pa­lo­muu­rin asetuksia.

Avaa seuraavat portit pa­lo­muu­ris­sa­si:

  • Portti 3306: Tämä on MariaDB:n va­kio­port­ti. Sitä käytetään tie­to­kan­ta­vies­tin­tään ja -pyyn­töi­hin.
  • Galera-portit: Va­kio­por­tin 3306 lisäksi Galera käyttää myös muita portteja solmujen väliseen sisäiseen vies­tin­tään. Galera-porttien vakioväli on yleensä 4567, 4568 ja 4444 State Snapshot Transfer (SST) -toi­min­nol­le.

Voit määrittää pa­lo­muu­ria­se­tuk­set Ubuntu-pal­ve­li­mel­la­si seu­raa­val­la ko­men­nol­la:

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

Vaihe 5: Käynnistä Galera Cluster MariaDB

Pysäytä MariaDB-palvelu, jos se on jo käynnissä:

sudo systemctl stop mariadb
shell

Tämä komento käyn­nis­tää MariaDB-pal­ve­li­men ja alustaa uuden Galera-klusterin en­sim­mäi­ses­sä solmussa:

sudo galera_new_cluster
shell

Tarkista klusterin solmujen lukumäärä:

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

Sinun pitäisi saada seuraava tulos:

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

En­sim­mäi­nen solmu käyn­nis­tyi on­nis­tu­nees­ti.

Aktivoi toinen solmu:

systemctl start mariadb
shell

Tarkista, onko solmujen määrä li­sään­ty­nyt:

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

Kon­so­lis­sa näemme:

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

Nyt aloitamme kolmannen solmun:

systemctl start mariadb
shell

Tarkista, toimiiko solmu oikein:

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

Klus­te­ris­sa pitäisi nyt olla kolme solmua:

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

Vaihe 6: Testaa repli­koin­ti

Varmista, että voit muodostaa yhteyden kaikkiin klusterin solmuihin. Kirjaudu MariaDB-asia­kas­oh­jel­mal­la sisään pää­käyt­tä­jä­nä tai toisena käyt­tä­jä­nä, jolla on riittävät oikeudet.

mysql -u root -p
shell

Luo uusi tes­ti­tie­to­kan­ta johonkin klusterin solmuista:

CREATE DATABASE test_db;
sql

Kirjaudu muihin solmuihin ja tarkista, onko tes­ti­tie­to­kan­ta käy­tet­tä­vis­sä:

SHOW DATABASES;
sql

Tes­ti­tie­to­kan­ta pitäisi näkyä tie­to­kan­to­jen luet­te­los­sa:

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

Lisää uusi tes­ti­tau­luk­ko tes­ti­tie­to­kan­taan:

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

Syötä tes­ti­tie­to­ja tes­ti­tau­lu­kon sa­rak­kee­seen name:

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

Tarkista muista solmuista, onko tes­ti­tau­luk­ko ja lisätty data siirretty:

USE test_db;
SELECT * FROM test_table;
sql

Tuloksena näkyy luettelo hen­ki­löis­tä heidän nimineen ja tun­nuk­si­neen:

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

Tes­ti­tau­lu­kon tietueen päi­vit­tä­mi­nen:

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

Yritä poistaa tietue:

DELETE FROM test_table WHERE name = 'Bob';
sql

Tarkista muista solmuista, onko päi­vi­tyk­set ja poistot repli­koi­tu:

SELECT * FROM test_table;
sql

Muutokset näkyvät on­nis­tu­nees­ti jo­kai­ses­sa solmussa:

+----+------------+
| id | name     |
+----+-----------+
| 1  | David    |
| 3  | Charlie  |
+----+-----------+
sql
Siirry pää­va­lik­koon