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 drbd2Steg 2. Konfigurera noder:
PÄ bÄda servrarna kör vi:
drbdadm create-md drbd0 
modprobe drbd
drbdadm up drbd0
cat /proc/drbdVi fÄr följande:

Vi kan börja synkroniseringen. PÄ den första noden mÄste vi köra:
drbdadm primary --force drbd0Kolla status:
cat /proc/drbd 
UtmÀrkt, synkroniseringen har pÄbörjats. VÀnta tills den Àr klar och se resultatet:

Steg 3. Starta synkroniseringen pÄ den andra noden:
drbdadm primary --force drbd0
Vi fÄr följande:

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.

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 ocfs2clusterDÀrefter aktiverar vi och lÀgger till alla nödvÀndiga enheter för autostart:
systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2En 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 0Katalog /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
