Slik konfigurerer du DRBD for å replikere lagring på to CentOS 7-servere


DRBD (står for Distributed Replicated Block Device) er en distribuert, fleksibel og allsidig replikert lagringsløsning for Linux. Den speiler innholdet i blokkenheter som harddisker, partisjoner, logiske volumer etc. mellom servere. Det innebærer en kopi av data på to lagringsenheter, slik at hvis den ene svikter, kan dataene på den andre brukes.

Du kan tenke på det litt som en nettverks RAID 1-konfigurasjon med diskene speilet på tvers av servere. Den fungerer imidlertid på en helt annen måte enn RAID og til og med nettverks-RAID.

Opprinnelig ble DRBD hovedsakelig brukt i datamaskinklynger med høy tilgjengelighet (HA), men fra og med versjon 9 kan den brukes til å distribuere skylagringsløsninger.

I denne artikkelen vil vi vise hvordan du installerer DRBD i CentOS og kort demonstrere hvordan du bruker den til å replikere lagring (partisjon) på to servere. Dette er den perfekte artikkelen for å komme i gang med å bruke DRBD i Linux.

Testmiljø

For formålet med denne artikkelen bruker vi to node-klynge for dette oppsettet.

  • Node1: 192.168.56.101 – tecmint.tecmint.lan
  • Node2: 192.168.56.102 – server1.tecmint.lan

Trinn 1: Installere DRBD-pakker

DRBD er implementert som en Linux-kjernemodul. Den utgjør nettopp en driver for en virtuell blokkenhet, så den er etablert rett nær bunnen av systemets I/O-stabel.

DRBD kan installeres fra ELRepo- eller EPEL-lagrene. La oss starte med å importere ELRepo-pakkesigneringsnøkkelen, og aktivere depotet som vist på begge noder.

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

Deretter kan vi installere DRBD-kjernemodulen og verktøyene på begge noder ved å kjøre:

yum install -y kmod-drbd84 drbd84-utils

Hvis du har SELinux aktivert, må du endre retningslinjene for å frita DRBD-prosesser fra SELinux-kontroll.

semanage permissive -a drbd_t

I tillegg, hvis systemet ditt har en brannmur aktivert (brannmur), må du legge til DRBD-porten 7789 i brannmuren for å tillate synkronisering av data mellom de to nodene.

Kjør disse kommandoene på den første noden:

firewall-cmd --permanent --add-rich-rule='rule family="ipv4"  source address="192.168.56.102" port port="7789" protocol="tcp" accept'
firewall-cmd --reload

Kjør deretter disse kommandoene på den andre noden:

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.56.101" port port="7789" protocol="tcp" accept'
firewall-cmd --reload

Trinn 2: Forberedelse av lagring på lavere nivå

Nå som vi har DRBD installert på de to klyngenodene, må vi forberede et lagringsområde av omtrent samme størrelse på begge nodene. Dette kan være en harddiskpartisjon (eller en full fysisk harddisk), en programvare-RAID-enhet, et LVM Logical Volume eller en annen blokkenhetstype som finnes på systemet ditt.

For formålet med denne artikkelen vil vi lage en dummy-blokkenhet med størrelse 2GB ved å bruke dd-kommandoen.

 
dd if=/dev/zero of=/dev/sdb1 bs=2024k count=1024

Vi vil anta at dette er en ubrukt partisjon (/dev/sdb1) på en andre blokkenhet (/dev/sdb) koblet til begge nodene.

Trinn 3: Konfigurere DRBD

DRBDs hovedkonfigurasjonsfil ligger på /etc/drbd.conf, og flere konfigurasjonsfiler kan finnes i katalogen /etc/drbd.d.

For å replikere lagring, må vi legge til de nødvendige konfigurasjonene i /etc/drbd.d/global_common.conf-filen som inneholder de globale og vanlige delene av DRBD-konfigurasjonen, og vi kan definere ressurser i .res-filer.

La oss ta en sikkerhetskopi av den originale filen på begge nodene, og åpne deretter en ny fil for redigering (bruk et tekstredigeringsprogram du liker).

mv /etc/drbd.d/global_common.conf /etc/drbd.d/global_common.conf.orig
vim /etc/drbd.d/global_common.conf 

Legg til følgende linjer i begge filene:

global {
 usage-count  yes;
}
common {
 net {
  protocol C;
 }
}

Lagre filen, og lukk deretter redigeringsprogrammet.

La oss kort skygge mer lys på linjen protokoll C. DRBD støtter tre distinkte replikeringsmoduser (dermed tre grader av replikeringssynkronisitet) som er:

  • protokoll A: Asynkron replikeringsprotokoll; det brukes oftest i langdistanse replikeringsscenarier.
  • protokoll B: Halvsynkron replikeringsprotokoll aka Minnesynkronprotokoll.
  • protokoll C: ofte brukt for noder i kortdistansenettverk; det er uten tvil den mest brukte replikeringsprotokollen i DRBD-oppsett.

Viktig: Valget av replikeringsprotokoll påvirker to faktorer ved distribusjonen din: beskyttelse og latency. Og gjennomstrømming er derimot stort sett uavhengig av replikeringsprotokollen som er valgt.

Trinn 4: Legge til en ressurs

En ressurs er samlebegrepet som refererer til alle aspekter ved et bestemt replikert datasett. Vi vil definere ressursen vår i en fil som heter /etc/drbd.d/test.res.

Legg til følgende innhold i filen, på begge noder (husk å erstatte variablene i innholdet med de faktiske verdiene for miljøet ditt).

Legg merke til vertsnavnene, vi må spesifisere nettverkets vertsnavn som kan fås ved å kjøre kommandoen uname -n.

resource test {
        on tecmint.tecmint.lan {
 		device /dev/drbd0;
       		disk /dev/sdb1;
        		meta-disk internal;	
                	address 192.168.56.101:7789;
        }
        on server1.tecmint.lan  {
		device /dev/drbd0;
        		disk /dev/sdb1;
        		meta-disk internal;
                	address 192.168.56.102:7789;
        }
}
}

hvor :

  • på vertsnavn: On-delen angir hvilken vert de vedlagte konfigurasjonssetningene gjelder for.
  • test: er navnet på den nye ressursen.
  • enhet /dev/drbd0: spesifiserer den nye virtuelle blokkenheten som administreres av DRBD.
  • disk /dev/sdb1: er blokkeringsenhetspartisjonen som er støtteenheten for DRBD-enheten.
  • meta-disk: Definerer hvor DRBD lagrer metadataene sine. Å bruke intern betyr at DRBD lagrer metadataene sine på den samme fysiske enheten på lavere nivå som de faktiske produksjonsdataene.
  • adresse: spesifiserer IP-adressen og portnummeret til den respektive noden.

Vær også oppmerksom på at hvis alternativene har like verdier på begge vertene, kan du spesifisere dem direkte i ressursdelen.

For eksempel kan konfigurasjonen ovenfor omstruktureres til:

resource test {
	device /dev/drbd0;
	disk /dev/sdb1;
        	meta-disk internal;	
        	on tecmint.tecmint.lan {
 		address 192.168.56.101:7789;
        	}
        	on server1.tecmint.lan  {
		address 192.168.56.102:7789;
        		}
}

Trinn 5: Initialisering og aktivering av ressurs

For å samhandle med DRBD, vil vi bruke følgende administrasjonsverktøy som kommuniserer med kjernemodulen for å konfigurere og administrere DRBD-ressurser:

  • drbdadm: et administrasjonsverktøy på høyt nivå for DRBD.
  • drbdsetup: et administrasjonsverktøy på lavere nivå for å koble til DRBD-enheter med deres støtteblokkenheter, for å sette opp DRBD-enhetspar for å speile støtteblokkenhetene deres, og for å inspisere konfigurasjonen av kjørende DRBD-enheter.
  • Drbdmeta: er verktøyet for administrasjon av metadata.

Etter å ha lagt til alle de innledende ressurskonfigurasjonene, må vi hente opp ressursen på begge nodene.

drbdadm create-md test

Deretter bør vi aktivere ressursen, som kobler ressursen til sin støtteenhet, deretter setter den replikeringsparametere og kobler ressursen til sin peer:

drbdadm up test

Hvis du nå kjører lsblk-kommandoen, vil du legge merke til at DRBD-enheten/volumet drbd0 er knyttet til støtteenheten /dev/sdb1:

lsblk

For å deaktivere ressursen, kjør:

drbdadm down test

For å sjekke ressursstatusen, kjør følgende kommando (merk at Inkonsistent/Inkonsistent-disktilstanden forventes på dette tidspunktet):

drbdadm status test
OR
drbdsetup status test --verbose --statistics 	#for  a more detailed status 

Trinn 6: Angi primærressurs/kilde for innledende enhetssynkronisering

På dette stadiet er DRBD nå klar for drift. Vi må nå fortelle hvilken node som skal brukes som kilden til den første enhetssynkroniseringen.

Kjør følgende kommando på bare én node for å starte den første fulle synkroniseringen:

drbdadm primary --force test
drbdadm status test

Når synkroniseringen er fullført, skal statusen til begge diskene være UpToDate.

Trinn 7: Testing av DRBD-oppsett

Til slutt må vi teste om DRBD-enheten vil fungere bra for replikert datalagring. Husk at vi brukte et tomt diskvolum, derfor må vi opprette et filsystem på enheten og montere det for å teste om vi kan bruke det til replikert datalagring.

Vi kan opprette et filsystem på enheten med følgende kommando, på noden der vi startet den første fulle synkroniseringen (som har ressursen med primærrolle):

mkfs -t ext4 /dev/drbd0 

Monter den deretter som vist (du kan gi monteringspunktet et passende navn):

mkdir -p /mnt/DRDB_PRI/
mount /dev/drbd0 /mnt/DRDB_PRI/

Kopier eller lag noen filer i monteringspunktet ovenfor og gjør en lang liste med ls-kommandoen:

cd /mnt/DRDB_PRI/
ls -l 

Deretter avmonter enheten (sørg for at festet ikke er åpent, endre katalog etter avmontering for å forhindre feil) og endre rollen til noden fra primær til sekundær:

umount /mnt/DRDB_PRI/
cd
drbdadm secondary test

På den andre noden (som har ressursen med en sekundær rolle), gjør den til primær, monter deretter enheten på den og utfør en lang liste over monteringspunktet. Hvis oppsettet fungerer bra, bør alle filene som er lagret i volumet være der:

drbdadm primary test
mkdir -p /mnt/DRDB_SEC/
mount /dev/drbd0 /mnt/DRDB_SEC/
cd /mnt/DRDB_SEC/
ls  -l 

For mer informasjon, se man-sidene til administrasjonsverktøyene for brukerplass:

man drbdadm
man drbdsetup
man drbdmeta
Sammendrag

DRBD er ekstremt fleksibel og allsidig, noe som gjør den til en lagringsreplikeringsløsning som er egnet for å legge til HA til omtrent alle applikasjoner. I denne artikkelen har vi vist hvordan du installerer DRBD i CentOS 7 og kort demonstrert hvordan du bruker den til å replikere lagring. Del gjerne tankene dine med oss via tilbakemeldingsskjemaet nedenfor.