Klyngelagring for små nettklynger basert på drbd+ocfs2

Hva vi skal snakke om:
Hvordan raskt distribuere delt lagring for to servere basert på drbd+ocfs2-løsninger.

Hvem vil dette være nyttig for:
Opplæringen vil være nyttig for systemadministratorer og alle som velger en lagringsimplementeringsmetode eller ønsker å prøve løsningen.

Hvilke avgjørelser nektet vi og hvorfor?

Ofte står vi overfor en situasjon hvor vi må implementere delt lagring med god lese-skrive-ytelse på en liten nettklynge. Vi prøvde ulike alternativer for å implementere delt lagring for våre prosjekter, men få klarte å tilfredsstille oss på flere indikatorer samtidig. Nå skal vi fortelle deg hvorfor.

  • Glusterfs tilfredsstilte oss ikke med lese- og skriveytelse; det var problemer med samtidig lesing av et stort antall filer, og det var høy belastning på CPU. Problemet med å lese filer kan løses ved å få tilgang til dem direkte fra murstein, men dette er ikke alltid aktuelt og er generelt feil.

  • Ceph likte ikke den overdrevne kompleksiteten, som kan være skadelig på prosjekter med 2-4 servere, spesielt hvis prosjektet deretter vedlikeholdes. Igjen, det er alvorlige ytelsesbegrensninger som tvinger oss til å bygge separate lagringsklynger, som med glusterfs.

  • Å bruke én NFS-server for å implementere delt lagring reiser spørsmål når det gjelder feiltoleranse.

  • s3 er en utmerket populær løsning for et visst spekter av oppgaver, men det er ikke et filsystem, noe som begrenser omfanget.

  • lsyncd. Hvis vi allerede har begynt å snakke om "ikke-filsystemer", så er det verdt å gå over denne populære løsningen. Ikke bare er det ikke egnet for toveis utveksling (men hvis du virkelig vil, så kan du det), det fungerer heller ikke stabilt på et stort antall filer. Et fint tillegg til det hele er at den er entrådet. Årsaken er i arkitekturen til programmet: det bruker inotify for å overvåke arbeidsobjekter, som det tilordner ved oppstart og under reskanning. rsync brukes som overføringsmedium.

Veiledning: hvordan distribuere delt lagring basert på drbd+ocfs2

En av de mest praktiske løsningene for oss var koblingen ocfs2+drbd. Nå skal vi fortelle deg hvordan du raskt kan distribuere delt lagring for to servere basert på en løsningsdatabase. Men først, litt om komponentene:

DRBD - et lagringssystem fra standard Linux-distribusjonen som lar deg replikere data mellom servere i blokker. Hovedapplikasjonen er å bygge feiltolerant lagring.

OCFS2 - et filsystem som gir delt bruk av samme lagring av flere systemer. Inkludert i Linux-distribusjonen og er en kjernemodul og brukerområdeverktøy for å jobbe med FS. OCFS2 kan brukes ikke bare over DRBD, men også over iSCSI med flere tilkoblinger. I vårt eksempel bruker vi DRBD.

Alle handlinger utføres på ubuntu-server 18.04 i en minimal konfigurasjon.

Trinn 1. Konfigurer DRBD:

I filen /etc/drbd.d/drbd0.res beskriver vi vår virtuelle blokkeringsenhet /dev/drbd0:

resource drbd0 {
    syncer { rate 1000M; }
    net {
        allow-two-primaries;
        after-sb-0pri discard-zero-changes;
        after-sb-1pri discard-secondary;
        after-sb-2pri disconnect;
    }
    startup { become-primary-on both; }
    on drbd1 {
        meta-disk internal;
        device /dev/drbd0;
        disk /dev/vdb1;
        address 10.10.10.192:7789;
}
    on drbd2 {
        meta-disk internal;
        device /dev/drbd0;
        disk /dev/vdb1;
        address 10.10.10.193:7789;
}
}

intern meta-disk — bruk de samme blokkenhetene til å lagre metadata
enhet /dev/drbd0 — bruk /dev/drbd0 som banen til drbd-volumet.
disk /dev/vdb1 - bruk /dev/vdb1
syncer { rate 1000M; } — bruk gigabit-kanalbåndbredde
tillate-to-primærer - et viktig alternativ som gjør at endringer kan aksepteres på to primære servere
etter-sb-0pri, etter-sb-1pri, etter-sb-2pri - alternativer som er ansvarlige for nodens handlinger når splitbrain oppdages. Flere detaljer finner du i dokumentasjonen.
bli-primær-på begge — setter begge nodene til primær.

I vårt tilfelle har vi to helt identiske VM-er, med et dedikert virtuelt nettverk med en båndbredde på 10 gigabit.

I vårt eksempel er nettverksnavnene til to klyngenoder drbd1 og drbd2. For riktig drift må du matche navnene og IP-adressene til verter i /etc/hosts.

10.10.10.192 drbd1
10.10.10.193 drbd2

Trinn 2. Sett opp noder:

På begge serverne kjører vi:

drbdadm create-md drbd0

Klyngelagring for små nettklynger basert på drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Vi får følgende:

Klyngelagring for små nettklynger basert på drbd+ocfs2

Du kan starte synkronisering. På den første noden må du utføre:

drbdadm primary --force drbd0

La oss se på statusen:

cat /proc/drbd

Klyngelagring for små nettklynger basert på drbd+ocfs2

Flott, synkroniseringen har startet. Vi venter til slutten og ser bildet:

Klyngelagring for små nettklynger basert på drbd+ocfs2

Trinn 3. Start synkronisering på den andre noden:

drbdadm primary --force drbd0

Vi får følgende:

Klyngelagring for små nettklynger basert på drbd+ocfs2

Nå kan vi skrive til drbd fra to servere.

Trinn 4. Installer og konfigurer ocfs2.

Vi vil bruke en ganske triviell konfigurasjon:

cluster:
     node_count = 2
     name = ocfs2cluster

node:
     number = 1
     cluster = ocfs2cluster
     ip_port = 7777
     ip_address = 10.10.10.192
     name = drbd1

node:
     number = 2
     cluster = ocfs2cluster
     ip_port = 7777
     ip_address = 10.10.10.193
     name = drbd2

Det må skrives ned /etc/ocfs2/cluster.conf på begge noder.

Vi lager en FS på drbd0 på hvilken som helst node:

mkfs.ocfs2 -L "testVol" /dev/drbd0

Her har vi laget et filsystem med etiketten testVol på drbd0, ved å bruke standardparametrene.

Klyngelagring for små nettklynger basert på drbd+ocfs2

I /etc/default/o2cb må du angi (som i vår konfigurasjonsfil)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

og kjør på hver node:

o2cb register-cluster ocfs2cluster

Deretter slår vi på og legger til alle enhetene vi trenger for å kjøre automatisk:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Noe av dette vil allerede kjøre under installasjonsprosessen.

Trinn 5. Legg til monteringspunkter til fstab på begge nodene:

/dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0

Katalog /media/delt den må opprettes på forhånd.

Her bruker vi noauto-alternativene, som betyr at filen ikke blir montert ved oppstart (jeg foretrekker å montere nettverksfiler via systemd) og heartbeat=local, som betyr å bruke hjerteslag-tjenesten på hver node. Det er også global hjerterytme, som er mer egnet for store klynger.

Deretter kan du montere /media/delt og kontroller innholdssynkronisering.

Ferdig! Som et resultat får vi mer eller mindre feiltolerant lagring med skalerbarhet og grei ytelse.

Kilde: www.habr.com

Legg til en kommentar