Groepberging vir klein webklusters gebaseer op drbd+ocfs2

Waaroor ons sal praat:
Hoe om gedeelde berging vinnig vir twee bedieners te ontplooi gebaseer op drbd+ocfs2-oplossings.

Vir wie dit nuttig sal wees:
Die tutoriaal sal nuttig wees vir stelseladministrateurs en enigiemand wat 'n bergingsimplementeringsmetode kies of 'n oplossing wil probeer.

Watter besluite het ons laat vaar en hoekom?

Dikwels word ons gekonfronteer met 'n situasie waar ons gedeelde berging met goeie lees-skryfprestasie op 'n klein webgroep moet implementeer. Ons het verskeie gedeelde bergingsimplementerings vir ons projekte probeer, maar min kon ons op verskeie maniere gelyktydig tevrede stel. Nou sal ons jou vertel hoekom.

  • Glusterfs het ons nie gepas met lees- en skryfprestasie nie, daar was probleme met die gelyktydige lees van 'n groot aantal lêers, daar was 'n hoë las op die SVE. Die probleem met die lees van lêers kan opgelos word deur dit direk in die stene te vra, maar dit is nie altyd van toepassing nie en is oor die algemeen verkeerd.

  • Ceph het nie van die ekstra kompleksiteit gehou nie, wat nadelig kan wees op projekte met 2-4 bedieners, veral as die projek daarna onderhou word. Weereens, daar is ernstige prestasiebeperkings, wat jou dwing om afsonderlike bergingsklusters te bou, net soos met glusterfs.

  • Die gebruik van 'n enkele nfs-bediener om gedeelde berging te implementeer, veroorsaak probleme in terme van fouttoleransie.

  • s3 is 'n baie gewilde oplossing vir 'n sekere reeks take, maar dit is nie 'n lêerstelsel nie, wat die omvang verklein.

  • lsyncd. As ons reeds oor "nie-lêerstelsels" begin praat het, dan is dit die moeite werd om deur hierdie gewilde oplossing te gaan. Nie net is dit nie geskik vir tweerigting-uitruiling nie (maar as jy regtig wil, dan kan jy), dit werk ook nie stabiel op 'n groot aantal lêers nie. 'n Lekker toevoeging tot alles is dat dit enkeldraad is. Die rede is in die argitektuur van die program: dit gebruik inotify om werkvoorwerpe te monitor wat dit hang tydens opstart en wanneer dit herskandeer word. Die oordragmedium is rsync.

Tutoriaal: Hoe om gedeelde berging te ontplooi gebaseer op drbd+ocfs2

Een van die gerieflikste oplossings vir ons was 'n bondel ocfs2+drbd. Nou sal ons jou wys hoe jy vinnig gedeelde berging vir twee oplossingsdatabasisbedieners kan ontplooi. Maar eers 'n bietjie oor die komponente:

DRBD - 'n bergingstelsel van die standaardverspreiding van Linux, wat jou toelaat om data tussen bedienerblokke te repliseer. Die hooftoepassing is om foutverdraagsame bergings te bou.

OCFS2 - 'n lêerstelsel wat gedeelde gebruik van dieselfde berging deur verskeie stelsels bied. Dit is ingesluit in die verspreiding van Linux en is 'n kernmodule en gebruikersruimte-nutsmiddelstel om met FS te werk. OCFS2 kan nie net oor DRBD gebruik word nie, maar ook oor iSCSI met veelvuldige verbindings. In ons voorbeeld gebruik ons ​​DRBD.

Alle aksies word uitgevoer op ubuntu-bediener 18.04 in 'n minimale konfigurasie.

Stap 1. Stel DRBD op:

In die lêer /etc/drbd.d/drbd0.res beskryf ons ons virtuele blok toestel /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-skyf intern - gebruik dieselfde blok toestelle vir die stoor van metadata
toestel /dev/drbd0 - gebruik /dev/drbd0 as die pad na die drbd-volume.
skyf /dev/vdb1 - gebruik /dev/vdb1
sinchroniseer { koers 1000M; } - gebruik gigabit bandwydte
toelaat-twee-primêre - 'n belangrike opsie wat toelaat dat veranderinge op twee primêre bedieners aanvaar word
na-sb-0pri, na-sb-1pri, na-sb-2pri - opsies wat verantwoordelik is vir die aksies van die nodus wanneer 'n gesplete brein opgespoor word. Meer besonderhede kan in die dokumentasie gevind word.
word-primêr-op beide - stel beide nodusse op primêre.

In ons geval het ons twee absoluut identiese VM's, met 'n toegewyde virtuele netwerk met 'n bandwydte van 10 gigabit.

In ons voorbeeld is die netwerkname van twee cluster nodusse drbd1 en drbd2. Vir behoorlike werking is dit nodig om die name en IP-adresse van gashere in /etc/hosts te pas.

10.10.10.192 drbd1
10.10.10.193 drbd2

Stap 2. Stel die nodusse op:

Op beide bedieners, hardloop:

drbdadm create-md drbd0

Groepberging vir klein webklusters gebaseer op drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Ons kry die volgende:

Groepberging vir klein webklusters gebaseer op drbd+ocfs2

Jy kan begin sinkroniseer. Op die eerste nodus moet jy doen:

drbdadm primary --force drbd0

Kom ons kyk na die status:

cat /proc/drbd

Groepberging vir klein webklusters gebaseer op drbd+ocfs2

Wonderlik, sinkronisering het begin. Ons wag vir die einde en sien die prentjie:

Groepberging vir klein webklusters gebaseer op drbd+ocfs2

Stap 3. Begin sinchronisasie op die tweede nodus:

drbdadm primary --force drbd0

Ons kry die volgende:

Groepberging vir klein webklusters gebaseer op drbd+ocfs2

Nou kan ons vanaf twee bedieners na drbd skryf.

Stap 4. Installeer en konfigureer ocfs2.

Ons sal 'n redelik triviale konfigurasie gebruik:

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

Dit moet in geskryf word /etc/ocfs2/cluster.conf op beide nodusse.

Skep FS op drbd0 op enige nodus:

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

Hier het ons 'n lêerstelsel met die naam testVol op drbd0 geskep met die verstekparameters.

Groepberging vir klein webklusters gebaseer op drbd+ocfs2

In /etc/default/o2cb moet gestel word (soos in ons konfigurasielêer)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

en voer op elke nodus uit:

o2cb register-cluster ocfs2cluster

Dan skakel ons aan en voeg al die eenhede wat ons nodig het by outorun:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Sommige hiervan sal reeds in die opstelproses loop.

Stap 5. Voeg monteerpunte by fstab op beide nodusse:

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

Gids /media/gedeel en moet vooraf geskep word.

Hier gebruik ons ​​die opsies noauto, wat beteken dat die lêerstelsel nie by opstart gemonteer sal word nie (ek verkies om netwerklêers via systemd te monteer) en heartbeat=local, wat beteken dat die hartklopdiens op elke nodus gebruik word. Daar is ook wêreldwye hartklop, wat meer geskik is vir groot trosse.

Volgende kan jy berg /media/gedeel en gaan die inhoudsinkronisering na.

Gedoen! As gevolg hiervan kry ons 'n min of meer foutverdraagsame berging met skaalbaarheid en ordentlike werkverrigting.

Bron: will.com

Voeg 'n opmerking