GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak nastavit vysokou dostupnost MariaDB s Heartbeat a DRBD na Ubuntu 16.04 LTS

Heartbeat a DRBD se používají pro clusterové řešení pro jakoukoli aplikaci využívající dva servery. Oba servery pracují v aktivním i pasivním režimu, jeden server bude pracovat současně a druhý server jako záložní server. DRBD (Distributed Replicated Block Device) je služba na úrovni jádra, která synchronizuje data mezi dvěma servery v reálném čase. Heartbeat je program s otevřeným zdrojovým kódem, který umožňuje primárnímu a záložnímu linuxovému serveru určit, zda je druhý „živý“, a pokud primární není, převzít zdroje do zálohy při selhání. Bude také spravovat vysokou dostupnost IP a další služby na vašich serverech.

V tomto tutoriálu se naučíme, jak dosáhnout vysoké dostupnosti MariaDB pomocí Heartbeat a DRBD na serveru Ubuntu 16.04.

Požadavky

  • Dva uzly s nainstalovaným serverem Ubuntu 16.04.
  • Na každém uzlu jsou nainstalovány dvě síťové karty.
  • Na každém uzlu je nainstalován další pevný disk bez oddílů.
  • Uživatel bez oprávnění root s nastavením oprávnění sudo na každém uzlu.

Začínáme

Před spuštěním budete muset nastavit IP adresu na každém uzlu. V každém uzlu použijte následující adresu IP:

Uzel1 :

172.16.0.1 na eth0 a 192.168.0.101 na eth1

Uzel2:

172.16.0.2 na eth0 a 192.168.0.102 na eth1

IP 192.168.0.103 bude IP s vysokou dostupností.

Dále budete také muset nastavit rozlišení názvu hostitele a názvu hostitele na každém uzlu. Každý uzel tedy může mezi sebou komunikovat. Na prvním uzlu otevřete soubor /etc/hosts a soubor /etc/hostname:

sudo nano /etc/hosts

Na konec souboru přidejte následující řádky:

172.16.0.1  Node1
172.16.0.2  Node2
sudo nano /etc/hostname

Změňte soubor, jak je znázorněno níže:

Node1

Po dokončení uložte a zavřete soubor.

Na druhém uzlu otevřete soubor /etc/hosts a soubor /etc/hostname:

sudo nano /etc/hosts

Na konec souboru přidejte následující řádky:

172.16.0.1  Node1
172.16.0.2  Node2
sudo nano /etc/hostname

Změňte soubor, jak je znázorněno níže:

Node2

Po dokončení uložte a zavřete soubor.

Dále aktualizujte každý uzel nejnovější verzí pomocí následujícího příkazu:

sudo apt-get update -y
sudo apt-get upgrade -y

Jakmile je váš systém aktualizován, restartujte systém, aby se tyto změny projevily.

Instalovat DRBD a Heartbeat

Dále budete muset nainstalovat DRBD a Heartbeat na oba uzly. Ve výchozím nastavení jsou oba dostupné ve výchozím úložišti Ubuntu 16.04. Můžete je nainstalovat pouhým spuštěním následujícího příkazu na obou uzlech:

sudo apt-get install drbd8-utils heartbeat -y

Dále spusťte službu DRBD a Heartbeat a povolte jejich spuštění při spouštění:

sudo systemctl start drbd
sudo systemctl start heartbeat
systemctl enable drbd
systemctl enable heartbeat

Konfigurace DRBD a Heartbeat

Dále budete muset nastavit zařízení DRBD na každém uzlu. Vytvořte jeden oddíl na druhém nerozděleném disku /dev/sdb na každém uzlu.

Můžete to udělat pouhým spuštěním následujícího příkazu na každém uzlu:

sudo echo -e 'n\np\n1\n\n\nw' | fdisk /dev/sdb

Dále budete muset nakonfigurovat DRBD na obou uzlech. Můžete to udělat vytvořením souboru /etc/drbd.d/r0.res v každém uzlu.

sudo nano /etc/drbd.d/r0.res

Přidejte následující řádky:

global {
usage-count no;
}
resource r0 {
protocol C;
startup {
degr-wfc-timeout 60;
}
disk {
}
syncer {
rate 100M;
}
net {
cram-hmac-alg sha1;
shared-secret "aBcDeF";
}
on Node1 {
device /dev/drbd0;
disk /dev/sdb1;
address 172.16.0.1:7789;
meta-disk internal;
}
on Node2 {
device /dev/drbd0;
disk /dev/sdb1;
address 172.16.0.2:7789;
meta-disk internal;
}
}

Po dokončení uložte a zavřete soubor a poté otevřete další konfigurační soubor na každém uzlu:

sudo nano /etc/ha.d/ha.cf

Přidejte následující řádky:

# Check Interval
keepalive 1
# Time before server declared dead
deadtime 10
# Secondary wait delay at boot
initdead 60
# Auto-failback
auto_failback off
# Heartbeat Interface
bcast eth1
# Nodes to monitor
node Node1
node Node2

Uložte a zavřete soubor.

Dále otevřete zdrojový soubor /etc/ha.d/haresources na každém uzlu:

sudo nano /etc/ha.d/haresources

Přidejte následující řádky:

Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime

Zde je Node1 název hostitele vašeho hlavního aktivního uzlu, 192.168.0.103 je adresa IP s pohyblivou řádovou čárkou, /var/lib/mysql je bod připojení a /dev/drbd0 je zařízení DRBD.

Dále budete muset definovat a uložit identické autorizační klíče na obou uzlech. Můžete to udělat pomocí souboru /etc/ha.d/authkeys na každém uzlu:

sudo nano /etc/ha.d/authkeys

Přidejte následující řádky:

auth1
1 sha1 your-secure-password

Zde je vaše zabezpečené heslo vaše bezpečné heslo. Použijte stejné heslo na obou uzlech.

Dále vytvořte a spusťte DRBD spuštěním následujícího příkazu na Node1:

sudo drbdadm create-md r0
sudo systemctl restart drbd
sudo drbdadm outdate r0
sudo drbdadm -- --overwrite-data-of-peer primary all
sudo drbdadm primary r0
sudo mkfs.ext4 /dev/drbd0
sudo chmod 600 /etc/ha.d/authkeys
sudo mkdir /var/lib/mysql

Jakmile je disk DRBD vytvořen v Node1, vytvořte disk DRBD v Node2 pomocí následujícího příkazu:

sudo drbdadm create-md r0
sudo systemctl restart drbd
sudo chmod 600 /etc/ha.d/authkeys
sudo mkdir /var/lib/mysql

Nyní můžete ověřit, že je disk DRBD připojen a zda se správně synchronizuje spuštěním následujícího příkazu:

sudo cat /proc/drbd

Pokud je vše v pořádku, měli byste vidět následující výstup:

version: 8.4.5 (api:1/proto:86-101)
srcversion: F446E16BFEBS8B115AJB14H
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:210413 nr:0 dw:126413 dr:815311 al:35 bm:0 lo:0 pe:11 ua:0 ap:0 ep:1 wo:f oos:16233752
[>....................] sync'ed: 3.3% (14752/14350)M
finish: 0:12:23 speed: 12,156 (16,932) K/sec

Dále spusťte prezenční signál na obou uzlech, abyste povolili část vašeho nastavení s převzetím služeb při selhání.

sudo systemctl start heartbeat

Dále ověřte připojený oddíl DRBD pomocí následujícího příkazu na Node1:

sudo mount | grep drbd

Měli byste vidět následující výstup:

/dev/drbd0 on /var/lib/mysql type ext4 (rw,noatime,data=ordered)

Dále ověřte, že plovoucí IP adresa je vázána pouze na Node1 pomocí následujícího příkazu:

sudo ip addr show | grep 192.168.0.103

Měli byste vidět následující výstup:

inet 192.168.0.103/24 brd 192.168.0.255 scope global secondary eth1:0

Instalace a konfigurace MariaDB

Jakmile je vše správně nakonfigurováno na obou uzlech, je čas nainstalovat server MariaDB na oba uzly.

Spuštěním následujícího příkazu na obou uzlech nainstalujte server MariaDB:

sudo apt-get install mariadb-server -y

Dále budete muset zakázat službu MariaDB na obou uzlech:

sudo systemctl disable mysql

Zde použijeme Node1 jako primární a databáze na Node2 by měly být vytvořeny a naplněny prostřednictvím synchronizace s Node1. Takže budete muset zastavit službu MariaDB a odstranit obsah uvnitř /var/lib/mysql na Node2. Můžete to provést pomocí následujícího příkazu:

sudo systemctl stop mysql
sudo rm -rf /var/lib/mysql/*

Dále budete muset zkopírovat konfigurační soubor údržby MySQL z Node1 do Node2. Můžete to provést spuštěním následujícího příkazu:

sudo scp /etc/mysql/debian.cnf [email protected]:/etc/mysql/debian.cnf

Dále budete muset vytvořit uživatele root pro vzdálenou správu a přístup k databázím na vysoce dostupné instanci MySQL.

Můžete to provést spuštěním následujícího příkazu na Node1:

mysql -u root -p

Zadejte heslo uživatele root a pomocí následujícího příkazu vytvořte uživatele root:

MariaDB [(none)]> CREATE USER 'root'@'192.168.0.%' IDENTIFIED BY 'password';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0..%' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> QUIT;

Dále nastavte adresu vazby pro MySQL na obou uzlech pomocí následujícího příkazu:

sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/mariadb.conf.d/*.cnf

Spustit Heartbeat pro službu MariaDB

Dále budete muset přidat službu MariaDB do instancí srdečního tepu na obou uzlech. Můžete to udělat úpravou souboru /etc/ha.d/haresources:

sudo nano /etc/ha.d/haresources

Upravte následující řádky:

Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime mysql

Po dokončení uložte a zavřete soubor.

Jakmile je prezenční signál nakonfigurován, budete jej muset restartovat na obou uzlech.

Nejprve restartujte heartbea na Node1:

sudo systemctl restart heartbeat

Dále počkejte 50 sekund a poté restartujte službu prezenčního signálu na Node2:

sudo systemctl restart heartbeat

Test prezenčního signálu a DRBD

Nyní je vše správně nakonfigurováno, je čas provést sérii testů, abychom ověřili, že heartbeat skutečně spustí přenos z aktivního serveru na pasivní server, když aktivní server nějakým způsobem selže.

Nejprve ověřte, že Node1 je primární uzel drbd pomocí následujícího příkazu na Node1:

sudo cat /proc/drbd

Měli byste vidět následující výstup:

version: 8.4.5 (api:1/proto:86-101)
srcversion: F446E16BFEBS8B115AJB14H
O cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:22764644 nr:256 dw:529232 dr:22248299 al:111 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

Dále ověříme, že je DRBD disk připojen pomocí následujícího příkazu:

sudo mount | grep drbd
/dev/drbd0 on /var/lib/mysql type ext4 (rw,noatime,data=ordered)

Dále ověřte službu MariaDB pomocí následujícího příkazu:

sudo systemctl status mysql

Dále přejděte na server MariaDB ze vzdáleného počítače pomocí pohyblivé IP a vytvořte testovací databázi:

mysql -h 192.168.0.103 -u root -p
MariaDB [(none)]> create database test;
MariaDB [(none)]> quit

Dále restartujte prezenční signál na Node1:

sudo systemctl restart heartbeat

Heartbeat nyní bude tento restart interpretovat jako selhání MariaDB na Node1 a měl by spustit převzetí služeb při selhání, aby se Node2 stal primárním serverem.

Můžete zkontrolovat, že DRBD nyní zachází s Node1 jako se sekundárním serverem pomocí následujícího příkazu na Node1:

sudo cat /proc/drbd

Měli byste vidět následující výstup:

version: 8.4.5 (api:1/proto:86-101)
srcversion: F446E16BFEBS8B115AJB14H
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
ns:22764856 nr:388 dw:529576 dr:22248303 al:112 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

Nyní ověřte, že Node2 je primární uzel drbd spuštěním následujícího příkazu na Node2:

sudo cat /proc/drbd

Měli byste vidět následující výstup:

version: 8.4.5 (api:1/proto:86-101)
srcversion: F446E16BFEBS8B115AJB14H
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:412 nr:20880892 dw:20881304 dr:11463 al:7 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

Dále se ujistěte, že MariaDB běží na Node2:

sudo systemctl status mysql

Nyní se připojte k serveru MariaDB pomocí plovoucí IP na Node2 od vzdáleného uživatele.

mysql -h 192.168.0.103 -u root -p

Dále si prohlédněte testovací databázi, kterou jsme vytvořili dříve, když byl Node1 primárním serverem.

MariaDB [(none)]> show databases;

Měli byste vidět následující výstup:

 +--------------------+
| Database |
+--------------------+
| test |
| information_schema |
| lost+found |
| mysql |
| performance_schema |
+--------------------+
5 rows in set (0.04 sec)

Ubuntu
  1. Jak nainstalovat MariaDB v Ubuntu 20.04 LTS

  2. Jak nastavit server a klienta Kerberos na Ubuntu 18.04 LTS

  3. Jak nainstalovat Seafile s Nginx na Ubuntu 20.04 LTS

  1. Jak nastavit vysokou dostupnost Nginx pomocí Pacemaker, Corosync a Crmsh na Ubuntu 16.04

  2. Jak nainstalovat Wordpress s Nginx, MariaDB a HHVM na Ubuntu 16.04 LTS

  3. Jak nastavit Jenkins Master and Slave na Ubuntu 18.04 LTS

  1. Jak nastavit Magento 2 s lakem a Apache na Ubuntu 16.04

  2. Jak nainstalovat a nakonfigurovat OrangeScrum na Ubuntu 18.04 LTS

  3. Jak nainstalovat Lighttpd s PHP-FPM 7 a MySQL 5.7 na Ubuntu 18.04 LTS