Att kon­fi­gu­re­ra ett MariaDB-kluster med Galera Cluster för­bätt­rar till­för­lit­lig­he­ten och förenklar skal­ning­en av din databas. I vår hand­led­ning visar vi dig hur du in­stal­le­rar ett Galera-kluster på Ubuntu 20.04.

Kraven för ett Galera Cluster MariaDB

För att in­stal­le­ra ett MariaDB Galera-kluster på Ubuntu 20.04 måste du uppfylla följande krav:

  • Flera servrar: Minst tre servrar eller virtuella maskiner krävs för att bygga ett kluster. Alla servrar ska finnas i samma nätverk.
  • Root-rät­tig­he­ter: Du behöver root-åtkomst eller åt­minsto­ne ad­mi­nist­ra­törs­rät­tig­he­ter på servrarna.

Hur man kon­fi­gu­re­rar Galera Cluster MariaDB på Ubuntu 20.04 steg för steg

Ett MariaDB Galera-kluster är en praktisk da­ta­bas­lös­ning som erbjuder hög till­gäng­lig­het, da­tain­tegri­tet och skal­bar­het för krävande ap­pli­ka­tio­ner. I denna steg-för-steg-guide går vi igenom processen för att kon­fi­gu­re­ra ett MariaDB Galera-kluster på Ubuntu 20.04. Innan du börjar, se till att du har minst tre servrar eller virtuella maskiner till­gäng­li­ga för att kon­fi­gu­re­ra klustret.

Steg 1: Uppdatera paket

Du bör först uppdatera ditt Ubuntu-system till den senaste versionen. Detta är viktigt för att du ska ha upp­da­te­ra­de paket och sä­ker­hets­upp­da­te­ring­ar.

Öppna en terminal och kör följande kommando för att uppdatera pa­ket­käl­lor­na:

sudo apt update
shell

In­stal­le­ra alla till­gäng­li­ga upp­da­te­ring­ar:

sudo apt upgrade -y
shell

Vi re­kom­men­de­rar också att du tar bort föråld­ra­de eller oanvända paket för att rensa upp på servrarna:

sudo apt autoremove -y
shell

Steg 2: In­stal­le­ra MariaDB på servrarna

In­stal­le­ra nu MariaDB på alla dina servrar. Från och med version 10.1 ingår Galera-paketen i MariaDB-servrarna.

sudo apt install mariadb-server
shell

Efter in­stal­la­tio­nen kan du starta MariaDB-tjänsten:

sudo systemctl start mariadb
shell

Använd följande kommando för att ställa in MariaDB så att det aktiveras au­to­ma­tiskt varje gång systemet startas om:

sudo systemctl enable mariadb
shell

Kon­trol­le­ra om MariaDB körs:

sudo systemctl status mariadb
shell

Du bör också göra några grund­läg­gan­de sä­ker­hets­in­ställ­ning­ar och kon­fi­gu­re­ra databasen. För att göra detta startar du in­stal­la­tions­gui­den:

sudo mysql_secure_installation
shell

Guiden leder dig genom stegen, såsom att ställa in ett root-lösenord, ta bort anonyma användare eller ta bort test­da­ta­ba­sen.

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

Skriptet frågar först efter det aktuella root-lö­senor­det. Om du in­stal­le­rar MariaDB på Ubuntu 20.04 för första gången trycker du bara på Enter och anger sedan ett nytt lösenord.

Steg 3: Kon­fi­gu­re­ra Galera Cluster MariaDB-noder

Skapa en cnf fil i katalogen /etc/mysql/conf.d på varje nod för att definiera de Galera-specifika in­ställ­ning­ar­na.

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

Denna fil in­ne­hål­ler allmänna da­ta­bas­in­ställ­ning­ar, såsom binärt pro­to­koll­for­mat och stan­dard­lag­rings­mo­tor. Den in­ne­hål­ler även kon­fi­gu­ra­tio­ner för Galera-klustret, inklusive klus­ter­namn och klu­s­ter­a­dress.

Infoga följande rader för den första noden:

[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
  • Allmänna da­ta­bas­in­ställ­ning­ar: Detta in­klu­de­rar in­ställ­ning­ar som binlog_format=ROW för formatet på bi­när­log­gar­na och default-storage-engine=innodb för stan­dard­lag­rings­mo­torn.
  • Galera-le­ve­ran­tör­s­kon­fi­gu­ra­tion: In­ställ­ning­ar som wsrep_on=ON används för att aktivera Galera-re­pli­ke­ring och wsrep_provider=/usr/lib/galera/libgalera_smm.so för att ange sökvägen till Galera-bib­li­o­te­ket.
  • Galera-klus­ter­kon­fi­gu­ra­tion: Detta in­klu­de­rar klus­ter­nam­net (wsrep_cluster_name) och klu­s­ter­a­dres­sen (wsrep_cluster_address), som in­ne­hål­ler IP-adres­ser­na eller värd­nam­nen för noderna i klustret.
  • Galera-syn­kro­ni­se­rings­kon­fi­gu­ra­tion: Kon­fi­gu­re­rar metoden för State Snapshot Transfer (SST), t.ex. wsrep_sst_method=rsync.
  • Galera-nod­kon­fi­gu­ra­tion: De­fi­ni­e­rar IP-adressen eller värd­nam­net för den aktuella noden (wsrep_node_address) och namnet på noden (wsrep_node_name).

När du har sparat filen skapar du en för den andra noden:

[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

Fortsätt nu med den sista noden:

[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

Steg 4: Ändra brand­väg­gen på servrarna

Eftersom noderna kom­mu­ni­ce­rar med varandra via specifika portar måste du justera brand­vägg­s­in­ställ­ning­ar­na.

Öppna följande portar i din brandvägg:

  • Port 3306: Detta är stan­dard­por­ten för MariaDB. Den används för da­ta­bas­kom­mu­ni­ka­tion och för­fråg­ning­ar.
  • Galera-portar: Förutom stan­dard­por­ten 3306 använder Galera även andra portar för intern kom­mu­ni­ka­tion mellan noderna. Stan­dardin­ter­val­let för Galera-portar är van­ligt­vis 4567, 4568 och 4444 för State Snapshot Transfer (SST).

Du kan definiera brand­vägg­s­in­ställ­ning­ar­na på din Ubuntu-server med följande kommando:

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

Steg 5: Starta Galera Cluster MariaDB

Stoppa MariaDB-tjänsten om den redan körs:

sudo systemctl stop mariadb
shell

Detta kommando startar MariaDB-servern och ini­ti­a­li­se­rar ett nytt Galera-kluster på den första noden:

sudo galera_new_cluster
shell

Kon­trol­le­ra antalet noder i klustret:

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

Du bör få följande utdata:

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

Den första noden startades fram­gångs­rikt.

Aktivera den andra noden:

systemctl start mariadb
shell

Kon­trol­le­ra om antalet noder har ökat:

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

I konsolen ser vi:

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

Nu börjar vi den tredje noden:

systemctl start mariadb
shell

Kon­trol­le­ra om noden fungerar korrekt:

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

Det bör nu finnas tre noder i klustret:

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

Steg 6: Testa re­pli­ke­ring­en

Se till att du kan upprätta en an­slut­ning till varje nod i klustret. Använd MariaDB-klienten för att logga in som root-användare eller som en annan användare med till­räck­li­ga rät­tig­he­ter.

mysql -u root -p
shell

Skapa en ny test­da­ta­bas på en av noderna i klustret:

CREATE DATABASE test_db;
sql

Logga in på de andra noderna och kon­trol­le­ra om test­da­ta­ba­sen är till­gäng­lig:

SHOW DATABASES;
sql

Test­da­ta­ba­sen ska visas i listan över databaser:

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

Lägg till en ny test­ta­bell i test­da­ta­ba­sen:

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

Ange några testdata i kolumn name i test­ta­bel­len:

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

Kon­trol­le­ra de andra noderna för att se om test­ta­bel­len och de infogade upp­gif­ter­na har överförts:

USE test_db;
SELECT * FROM test_table;
sql

Ut­mat­ning­en visar en lista över personer med deras namn och ID:

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

För att uppdatera en datapost i test­ta­bel­len:

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

Försök att radera en datapost:

DELETE FROM test_table WHERE name = 'Bob';
sql

Kon­trol­le­ra de andra noderna för att se om upp­da­te­ring­ar­na och ra­de­ring­ar­na har re­pli­ke­rats:

SELECT * FROM test_table;
sql

Änd­ring­ar­na visas korrekt på alla noder:

+----+------------+
| id | name     |
+----+-----------+
| 1  | David    |
| 3  | Charlie  |
+----+-----------+
sql
Gå till huvudmeny