GNU/Linux >> Znalost Linux >  >> Debian

Nainstalujte a nakonfigurujte DRDB pro síťovou replikaci souborového systému v Debianu 8

Promluvme si o Network Filesystem Replication.

Síťová replikace souborového systému se dnes často používá v mnoha scénářích:

  • Replikace souborového systému z bezpečnostních důvodů:pokud jeden uzel selže, druhý uzel je přístupný.
  • K replikaci souborového systému do jiného ústředí společnosti, aby každý zaměstnanec měl přístup ke svým datům lokálně a ne prostřednictvím veřejné sítě. Ale pokud přejde do druhého ústředí, má všechna svá data a opět může přistupovat lokálně.

Jak si dokážete představit, tento druh systému se často používá k vytváření souborových systémů pro prostředí clusteru.

Rozhodli jsme se implementovat řešení s DRDB. Jeho hlavním cílem je (stejně jako ostatní systémy jako tento) Vysoká dostupnost a zotavení po havárii pro souborové systémy.

Řešení implementujeme s Debianem 8, ale mělo by fungovat i na Ubuntu.

Předpoklady

Než začneme, zde jsou předpoklady:

  • Alespoň 2 servery Debian.
  • Debian se instaluje jako minimální instalace (vůbec není nutná, pokud víte, co děláte na produkčních systémech), doporučená příručka https://www.howtoforge.com/tutorial/debian-8-jessie-minimal-server/
  • Minimálně 2 linuxové disky na každém serveru:/dev/sda pro linuxovou instalaci, /dev/sdb pro instalaci DRDB.

POZOR!!!:Během instalace budou všechna data na disku /dev/sdb zničena, proto nepracujte na disku s daty uvnitř.

Instalace DRBD

V našem příkladu použiji dva uzly, kterými jsou:

  • 192.168.152.100 mysql1.local.vm
  • 192.168.152.110 mysql2.local.vm

Na všech uzlech upravte soubor /etc/hosts následovně:

127.0.0.1 localhost
192.168.152.100 mysql1.local.vm mysql1
192.168.152.110 mysql2.local.vm mysql2

# Následující řádky jsou vhodné pro IPv6 hostitelé
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Poté spusťte následující příkazy pro instalaci DRDB:

apt-get update
apt-get -y upgrade
apt-get install drbd-utils

Konfigurace primární/sekundární – zotavení po havárii

Hlavní konfigurační soubor je /etc/drbd.conf, který vypadá takto:

include "drbd.d/global_common.conf";
include "drbd.d/*.res";

Podle konvence /etc/drbd.d/global_common.conf obsahuje globální a společné části konfigurace DRBD, zatímco .res soubory obsahují v každé sekci jeden zdroj.

V našem příkladu provádíme minimální nastavení, které replikuje data na dvou uzlech. Na každém uzlu proveďte následující úpravu:

Začneme upravovat soubor /etc/drbd.d/global_common.conf modify the default line from

global {
usage-count yes;
# minor-count dialog-refresh disable-ip-verification
}
...
net {
protokol C;
# timeout protokolu max-epoch-size max-buffers unplug-watermark
# connect-int ping-int sndbuf-size rcvbuf-size ko-count
# allow- two-primaries cram-hmac-alg shared-secret after-sb-0pri
# after-sb-1pri after-sb-2pri always-asbp rr-conflict
# ping-timeout data-integrity-alg tcp-cork on-congestion
# congestion-fill congestion-extents csums-alg ověřit-alg
# use-rle
}
...

Nyní pro náš zdroj vytvoříme konfigurační soubor /etc/drbd.d/r0.res. Vytvořte soubor na všech uzlech a přidejte jej dovnitř:

zdroj r0 { na mysql1.local.vm { zařízení /dev/drbd1; disk /dev/sdb; adresa 192.168.152.100:7789; interní meta-disk; } na mysql2.local.vm { zařízení /dev/drbd1; disk /dev/sdb; adresa 192.168.152.110:7789; interní meta-disk; }}

Dosud jsme udělali následující:

  • Přihlásíte se k tomu, abyste byli zahrnuti do statistik využití DRBD pomocí parametru use-count.
  • Prostředky jsou nakonfigurovány pro použití plně synchronní replikace s protokolem Cun, pokud není výslovně uvedeno jinak.
  • Náš cluster se skládá ze dvou uzlů: mysql1 a mysql2.
  • Máme zdroj s libovolným názvem r0 který používá /dev/sdb jako zařízení nižší úrovně a je nakonfigurován s interními metadaty.
  • Prostředek používá pro svá síťová připojení port TCP 7789 a váže se k IP adresám 192.168.152.100 a 192.168.152.110 v tomto pořadí.

Na všech uzlech inicializujte metadata následujícím příkazem:

drbdadm create-md r0

Měli byste vidět něco takového:

--==Děkujeme za účast v globálním průzkumu používání ==--
Odpověď serveru je:

jste 2963. uživatelem, který si tuto verzi nainstaloval
inicializace protokolu aktivit
NEInicializuje se bitmapa
Zapisování metadat...
Nový blok metadat DRBD byl úspěšně vytvořen.
úspěch

Dále povolíme prostředek a inicializujeme první běh replikace, pouze na prvním uzlu by se měl začít replikovat:

drbdadm nahoru r0
primární drbdadm --force r0

Chcete-li zkontrolovat, zda vše funguje dobře, můžete zkontrolovat soubor /proc/drbd na obou uzlech a uvidíte něco takového:

Mysql1

[e-mail chráněný]:# cat /proc/drbd
verze:8.4.3 (api:1/proto:86-101)
srcversion:1A9F77B1CA5FF92235C2213
1:cs:SyncSource ro:Primární/Sekundární ds:UpToDate/Nekonzistentní C r-----
ns:54624 nr:0 dw:0 dr:55536 al:0 bm:3 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:5188060
[>.......................] synchronizováno:1,1 % (5064/5116)Mfinish:0:17:21 rychlost:4 964 (4 964) K/s

Mysql2 

[e-mail chráněný]:# cat /proc/drbd
verze:8.4.3 (api:1/proto:86-101)
srcversion:1A9F77B1CA5FF92235C2213
1:cs:SyncTarget ro:Sekundární/Primární ds:Nekonzistentní/UpToDate C r-----
ns:0 nr:17496 dw:17496 dr:0 al:0 bm:1 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:5225188
[>..................] synchronizováno:0,4 % (5100/5116) Mfinish:0:29:41 rychlost:2 916 (2 916) chtít:5 160 K/s

Během fáze sestavování si můžete všimnout Aktualizace/Nekonzistence , je to správné, protože se jedná o první synchronizaci dat.

Po synchronizaci filsystemu se tento shloud změní na UpToDate/UpToDate jako v následujícím protokolu:

[e-mail chráněný]:/home/sysop# cat /proc/drbd
verze:8.4.3 (api:1/proto:86-101)
srcversion:1A9F77B1CA5FF92235C2213
1 :cs:Connected ro:Primární/Sekundární ds:UpToDate/UpToDate C r-----
ns:5242684 nr:0 dw:0 dr:5243596 al:0 bm:320 lo:0 pe:0 ua :0 ap:0 ep:1 wo:f oos:0

Nyní máme nové blokové zařízení s názvem /dev/drbd1, které můžeme naformátovat pomocí preferovaného typu souborového systému. Například, pokud jej chceme naformátovat v ext4 a připojit jej na /var/www, můžeme jednoduše: 

[e-mail chráněný]:/home/sysop# mkfs.ext4 /dev/drbd1
mke2fs 1.42.12 (29. srpna 2014)
Creazione del file system con 1310671 4k blocchi e 327
Etichetta del file system=ab3e18c9-e8cb-42c8-977a-ab79bdb18aea
Backup del superblocco salvati nei blocchi:
32768, 98304, 163840, 2819376, 2729376, 2729376, 4819376, 2729376 Přidělování tabulek skupin:fatto
Scrittura delle tavole degli inode:fatto
Vytváření deníku (32768 bloků):fatto
Scrittura delle informazioni dei super-blocchi a dell'accounting systému souborů:fatto

Poté můžeme připojit náš souborový systém:

mkdir /var/www
připojit /dev/drbd1 /var/www

Adresář /var/www je nyní připojen prostřednictvím systému drbd.

V tomto scénáři s primární/sekundární konfigurací jsme implementovali systém obnovy po havárii.

V tomto případě, pokud se pokusíte připojit souborový systém na druhý uzel, zobrazí se chyba:

[e-mail chráněno]:~# mount /dev/drbd1 /var/www/
mount:/dev/drbd1 je chráněn proti zápisu, připojení pouze pro čtení
mount:mount /dev/drbd1 na /var/www se nezdařilo:Tipo di supporto errato

To je normální a očekávané kvůli naší konfiguraci.

Nyní můžeme simulovat selhání na mysql1, takže jej vypněte příkazem poweroff.

Na mysql2 můžeme vidět, co se děje:

Oct 5 13:52:14 mysql2 kernel:[13458.629215] drbd r0:PingAck nedorazil včas.
Oct 5 13:52:14 mysql2 kernel:[13458.629587] Primary> Neznámé ) conn( Connected -> NetworkFailure ) pdsk( UpToDate -> DUnknown )
Oct 5 13:52:14 mysql2 kernel:[13458.629919] drbd r0:asender ukončen
Oct 5:14 13 mysql2 kernel:[13458.629921] drbd r0:Ukončení drbd_a_r0
Oct 5 13:52:14 mysql2 kernel:[13458.630028] drbd r0:Připojení uzavřeno
Oct 85.3.5 drbd r0:conn( NetworkFailure -> Unconnected )
5. října 13:52:14 jádro mysql2:[13458.630035] drbd r0:přijímač ukončen
5. října 13:52:14 mysql2 drbd500 mysql2.630035 r0:Restartování vlákna přijímače
5. října 13:52:14 jádro mysql2:[13458.630037] drbd r0:přijímač (re)spuštěn
5. října 13:52:14 jádro mysql2:[1300418.63] conn( Unconnected -> WFConnection )

Uzel mysql2 detekuje, že mysql1 je mrtvý, a pokud zkontrolujeme /proc/drbd:

[e-mail chráněný]:~# cat /proc/drbd
verze:8.4.3 (api:1/proto:86-101)
srcversion:1A9F77B1CA5FF92235C2213
1:cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown C r-----
ns:0 nr:5457236 dw:5457236 dr:0 al:0 bm:320 lo:0 pe:0 ua:0 ap :0 ep:1 wo:f oos:0

můžeme vidět změnu stavu z Sekundární/primární na Sekundární/neznámý. Takže teď uděláme trik a propagujeme mysql2 jako primární. Na mysql2 jednoduše spusťte:

drbdadm primární r0

zkontrolujeme znovu /proc/drbd a uvidíme kouzlo...

[e-mail chráněný]:~# cat /proc/drbd
verze:8.4.3 (api:1/proto:86-101)
srcversion:1A9F77B1CA5FF92235C2213
1:cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r-----
ns:0 nr:5457236 dw:5457236 dr:912 al:0 bm:320 lo:0 pe:0 ua:0 ap :0 ep:1 wo:f oos:0

Jak můžete vidět, náš uzel je nyní primární a lze jej pravidelně připojovat.

[chráněno e-mailem]:~# mount /dev/drbd1 /var/www/
[chráněno e-mailem]:~# df -h
Systém souborů Dim. Usati Dispon. Uso% Montato su
/dev/sda1 9,3G 1,4G 7,5G 16% /
udev 10M 0 10M 0% /dev
tmpfs 97M 4,6M 92M 5% /běh
tmpfs 241M 0 241M 0% /dev/shm
tmpfs 5,0M 4,0K 5,0M 1% /run/lock
tmpfs 241M 0 241M 0% /sys/fs/cgroup
/dev/drbd1 4,8G 10M 4,6G 1% /var/www

Nyní předpokládáme, že chceme znovu začít používat mysql1, pokud začneme nyní, dojdeme k rozdělení mozku, ve skutečnosti můžete zkontrolovat protokol a vidět tyto chyby:

Oct 5 14:26:04 mysql1 kernel:[ 7.760588] drbd r0:conn( StandAlone -> Unconnected )
Oct 5 14:26:04 mysql1 kernel:[ 7.760599:Starting drbd receiver od drbd_w_r0 [458])
5. října 14:26:04 mysql1 drbdadm[435]:upravit síť:r0
5. října 14:26:04 mysql1 drbdadm[435]:]
říj 5 14:26:04 mysql1 kernel:[ 7.769318] drbd r0:receiver (re)started
Oct 5 14:26:04 mysql1 kernel:[ 7.769327] drbd r0:conn( Unconnected -> WFC Unconnected ->>5. října 14:26:04 mysql1 /etc/init.d/mysql[485]:MySQL PID nenalezeno, pid_file zjištěn/uhádán:/var/run/mysqld/mysqld.pid
5. října 14:26 :04 mysql1 acpid:spuštění s netlinkem a vstupní vrstvou
5. října 14:26:04 mysql1 acpid:1 pravidlo načteno
5. října 14:26:04 mysql1 acpid:čekání na události:protokolování událostí je vypnuto
Oct 5 14:26:05 mysql1 kernel:[ 8.270578] drbd r0:Handshake úspěšný:Dohodnutá verze síťového protokolu 101
Oct 5 14:26:05 mysql1 kernel:[ 8.270581] Souhlasil s podporou TRIM na úrovni protokolu
Oct 5 14:26:05 mysql1 kernel:[ 8.270770] drbd r0:conn( WFConnection -> WFReportParams )
Oct 5 14:26:05 mysql1 kernel:[ 71:2707 starting threadu (od drbd_r_r0 [461])
5. října 14:26:05 jádro mysql1:[ 8.272594] blok drbd1:drbd_sync_handshake:
5. října 14:26:05 blok mysql1 17 selfie:[drbd1.27 self] 242B364F4A5B9C68:525CC995A3CFBA2B:44A1DE193A6C6701:0000000000000004 bity:64463 příznaky:0
Říj 5 14:26:05 mysql1 jádra:[8,272598] blok drbd1:peer 6903F6042F95F5FF:525CC995A3CFBA2A:44A1DE193A6C6700:0000000000000004 bity:4 příznaky:0
Oct 5 14:26:05 mysql1 kernel:[ 8.272599] block drbd1:uuid_compare()=100 podle pravidla 90
Oct 5 14:26:05 mysql1 kernel:[ 8.272601 kernel:[ 8.272601] block drbd1s:block drbd1s help /drbdadm initial-split-brain minor-1
Oct 5 14:26:05 mysql1 kernel:[ 8.272692] drbd r0:meta connection off by peer.
Oct 5 14:26:05 mysql1 kernel :[ 8.272720] drbd r0:conn( WFReportParams -> NetworkFailure )
5. října 14:26:05 mysq l1 kernel:[ 8.272722] drbd r0:asender ukončen
Oct 5 14:26:05 mysql1 kernel:[ 8.272722] drbd r0:Ukončení drbd_a_r0
Oct 5:5 185 myqsq:26 block drbd1:pomocný příkaz:/sbin/drbdadm initial-split-brain minor-1 výstupní kód 0 (0x0)
Oct 5 14:26:05 mysql1 kernel:[ 8.279173] block drbd1:Split-Brain detekován, ale nevyřešen , rušení připojení!
Oct 5 14:26:05 mysql1 kernel:[ 8.279197] block drbd1:helper command:/sbin/drbdadm split-brain minor-1
Oct 5 14:26:05 mysql1 kernel :[ 8.286125] blok drbd1:pomocný příkaz:/sbin/drbdadm split-brain minor-1 výstupní kód 0 (0x0)
Oct 5 14:26:05 mysql1 kernel:[ 8.286144] drbd r0:conn -( NetworkF> Disconnecting )
Oct 5 14:26:05 mysql1 kernel:[ 8.286146] drbd r0:Chyba při příjmu ReportState, e:-5 l:0!
Oct 5 14:26:05 mysql1 kernel:[ 8.287009] drbd r0:Připojení uzavřeno
Oct 5 14:26:05 mysql1 kernel:[ 8.287017] drbd r0:conn( Disconnecting -> StandAlone )
Oct 5 14:26:05 mysql1 kernel:[ 8.287018] drbd r0:přijímač ukončen
Oct 5 14:26:05 mysql1 kernel:[ 8.287019] drbd r0:Ukončení drbd_r_r0

Je to proto, že nyní máme dva primární uzly, což není možné v primární/sekundární konfiguraci. Takže za předpokladu, že ID čerstvých dat na mysql2, musíme snížit úroveň mysql1 na sekundární.

Takže při spuštění mysql1:

[e-mail chráněný]:~# drbdadm sekundární r0
[e-mail chráněný]:~# drbdadm connect --discard-my-data r0

Místo toho na mysql2, což je přeživší rozdělený mozek , musíme provést:

[e-mail chráněn]:~# drbdadm connect r0

nyní můžete zkontrolovat a vidět, že se vše přestavuje správně, ale nyní je mysql1 sekundární a mysql2 primární.

[e-mail chráněný]:~# cat /proc/drbd
verze:8.4.3 (api:1/proto:86-101)
srcversion:1A9F77B1CA5FF92235C2213
1:cs:SyncTarget ro:Sekundární/Primární ds:Nekonzistentní/UpToDate C r-----
ns:0 nr:28224 dw:28224 dr:0 al:0 bm:1 lo:0 pe:0 ua:0 ap :0 ep:1 wo:f oos:229628
[=>..................] synchronizace:11,2 % (229628/257852)K
dokončení:0:01:04 rychlost:3 528 (3 528) požadované:6 600 K/s

Debian
  1. Jak nainstalovat a nakonfigurovat Redis 6.0 na Debian 11

  2. Jak nainstalovat a nakonfigurovat docker na Debian 11

  3. Jak nainstalovat a nakonfigurovat Mariadb 10 v Debianu 11

  1. Nainstalujte a nakonfigurujte Fail2ban na Debian 10

  2. Jak nainstalovat a nakonfigurovat MongoDB 5 na Debian 11

  3. Jak nainstalovat a nakonfigurovat Redis 6 na Debian 11

  1. Jak nainstalovat a nakonfigurovat VNC na Debian 9

  2. Jak nainstalovat a nakonfigurovat Redis na Debian 9

  3. Jak nainstalovat a nakonfigurovat Nagios na Debian 9