Klusterlagring för smÄ webbkkluster baserat pÄ drbd+ocfs2

Vad vi kommer att berÀtta om:
Hur snabbt man kan implementera en gemensam lagring för tvÄ servrar baserat pÄ lösningarna drbd+ocfs2.

Vem detta kommer att vara anvÀndbart för:
Denna tutorial kommer att vara anvÀndbar för systemadministratörer och alla som vÀljer en metod för att implementera lagring eller vill prova en lösning.

Vilka lösningar vi avstod frÄn och varför

Ofta stöter vi pÄ situationer dÀr vi behöver implementera en gemensam lagring med bra prestanda för lÀsning och skrivning pÄ en liten webbklyft. Vi har försökt olika alternativ för att implementera gemensam lagring för vÄra projekt, men fÄ av dem har kunnat tillfredsstÀlla oss pÄ flera punkter. Nu berÀttar vi varför.

  • Glusterfs gav oss inte tillrĂ€cklig prestanda för lĂ€sning och skrivning, det uppstod problem med att lĂ€sa stora mĂ€ngder filer samtidigt, och CPU-belastningen var hög. Problemet med att lĂ€sa filer kunde lösas genom att direkt gĂ„ till brickorna, men detta Ă€r inte alltid tillĂ€mpligt och överlag fel.

  • Ceph tilltalade oss inte pĂ„ grund av dess överdrivna komplexitet, vilket kan vara skadligt för projekt med 2-4 servrar, sĂ€rskilt om projektet senare underhĂ„lls. Dessutom finns det allvarliga prestandabegrĂ€nsningar som tvingar oss att bygga separata lagringskluster, precis som med glusterfs.

  • Att anvĂ€nda en enda nfs-server för att implementera gemensam lagring vĂ€cker frĂ„gor angĂ„ende avbrottssĂ€kerhet.

  • s3 — en utmĂ€rkt populĂ€r lösning för vissa typer av uppgifter, men det Ă€r inte heller ett filsystem, vilket inskrĂ€nker anvĂ€ndningsomrĂ„det.

  • lsyncd. Om vi redan har börjat prata om "icke-filsystem", sĂ„ bör vi ta en titt pĂ„ denna populĂ€ra lösning. Det faktum att den inte Ă€r lĂ€mplig för tvĂ„vĂ€gskommunikation (men om man verkligen vill kan det göras) Ă€r dessutom en annan faktor; den fungerar inte heller stabilt med ett stort antal filer. En trevlig egenskap Ă€r att den Ă€r enkeltrĂ„dad. Anledningen Ă€r programmets arkitektur: den anvĂ€nder inotify för att övervaka arbetets objekt, som den fĂ€ster vid uppstart och vid omscanning. För överföring anvĂ€nds rsync.

Tutorial: hur man implementerar gemensam lagring baserat pÄ drbd+ocfs2

En av de mest praktiska lösningarna för oss blev kombinationen ocfs2+drbd. Nu ska vi berÀtta hur man snabbt kan implementera en gemensam lagring för tvÄ. servrar baserat pÄ lösningar. Men först lite om komponenterna:

DRBD — ett lagringssystem levererat med standardversionen av Linux som möjliggör replikering av data mellan servrar block för block. Huvudsyftet Ă€r att bygga redundanta lagringslösningar.

OCFS2 — ett filsystem som erbjuder delning av samma lagring mellan flera system. Det ingĂ„r i Linux-distributionen och bestĂ„r av en kĂ€rnmodul och anvĂ€ndarutrymmeverktyg för att arbeta med FS. OCFS2 kan anvĂ€ndas inte bara ovanpĂ„ DRBD, utan Ă€ven ovanpĂ„ iSCSI med multipla anslutningar. I vĂ„rt exempel anvĂ€nder vi DRBD.

Alla ÄtgÀrder utförs pÄ ubuntu server 18.04 i minimal konfiguration.

Steg 1. Konfigurera DRBD:

I filen /etc/drbd.d/drbd0.res beskriver vi vÄr virtuella blockenhet /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;
}
}

meta-disk internal — anvĂ€nda samma blockenheter för att lagra metadata
device /dev/drbd0 — anvĂ€nda /dev/drbd0 som vĂ€g till drbd.
disk /dev/vdb1 — anvĂ€nda /dev/vdb1
syncer { rate 1000M; } — anvĂ€nda gigabit bandbredd frĂ„n kanalen
allow-two-primaries — en viktig instĂ€llning som tillĂ„ter att Ă€ndringar accepteras pĂ„ tvĂ„ primĂ€ra servrar
after-sb-0pri, after-sb-1pri, after-sb-2pri — alternativ som anger vad noden ska göra vid splitbrain-situationer. Mer information finns i dokumentationen.
become-primary-on both — stĂ€ller in bĂ„da noderna som primĂ€ra.

I vÄrt fall har vi tvÄ helt identiska VM:er, med ett dedikerat virtuellt nÀtverk med en bandbredd pÄ 10 gigabit.

I vÄrt exempel Àr nÀtverksnamnen för de tvÄ noderna i klustret drbd1 och drbd2. För korrekt funktion mÄste namnen och IP-adresserna för noderna matchas i /etc/hosts.

10.10.10.192 drbd1
10.10.10.193 drbd2

Steg 2. Konfigurera noder:

PÄ bÄda servrarna kör vi:

drbdadm create-md drbd0

Klusterlagring för smÄ webbkkluster baserat pÄ drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Vi fÄr följande:

Klusterlagring för smÄ webbkkluster baserat pÄ drbd+ocfs2

Vi kan börja synkroniseringen. PÄ den första noden mÄste vi köra:

drbdadm primary --force drbd0

Kolla status:

cat /proc/drbd

Klusterlagring för smÄ webbkkluster baserat pÄ drbd+ocfs2

UtmÀrkt, synkroniseringen har pÄbörjats. VÀnta tills den Àr klar och se resultatet:

Klusterlagring för smÄ webbkkluster baserat pÄ drbd+ocfs2

Steg 3. Starta synkroniseringen pÄ den andra noden:

drbdadm primary --force drbd0

Vi fÄr följande:

Klusterlagring för smÄ webbkkluster baserat pÄ drbd+ocfs2

Nu kan vi skriva till drbd frÄn tvÄ servrar.

Steg 4. Installation och konfiguration av ocfs2.

Vi kommer att anvÀnda en ganska trivial konfiguration:

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

Den mÄste skrivas till /etc/ocfs2/cluster.conf pÄ bÄda noderna.

Vi skapar filsystem pÄ drbd0 pÄ vilken nod som helst:

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

HÀr har vi skapat ett filsystem med etiketten testVol pÄ drbd0, med standardinstÀllningarna.

Klusterlagring för smÄ webbkkluster baserat pÄ drbd+ocfs2

I /etc/default/o2cb mÄste vi stÀlla in (som i vÄr konfigurationsfil)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

och utföra pÄ varje nod:

o2cb register-cluster ocfs2cluster

DÀrefter aktiverar vi och lÀgger till alla nödvÀndiga enheter för autostart:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

En del av detta kommer redan att köras under installationsprocessen.

Steg 5. LÀgger till monteringspunkter i fstab pÄ bÄda noderna:

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

Katalog /media/shared dessa mÄste vara skapade i förvÀg.

HÀr anvÀnder vi alternativet noauto, vilket innebÀr att filsystemet inte kommer att monteras vid start (jag föredrar att montera nÀtverksfilsystem via systemd) och heartbeat=local, vilket betyder att tjÀnsten heartbeat anvÀnds pÄ varje nod. Det finns Àven global heartbeat, som passar bÀttre för större kluster.

DÀrefter kan vi montera /media/shared och kontrollera synkronisering av innehÄllet.

Klart! Resultatet blir ett mer eller mindre felsÀkert lagringssystem med möjlighet till skalning och bra prestanda.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster