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)