Cluster opslach foar lytse webklusters basearre op drbd + ocfs2

Wat wy sille prate oer:
Hoe dielde opslach fluch ynsette foar twa servers basearre op drbd + ocfs2-oplossingen.

Foar wa sil dit nuttich wêze:
De tutorial sil nuttich wêze foar systeembehearders en elkenien dy't in metoade foar opslach ymplemintaasje kiest of de oplossing wol besykje.

Hokker besluten hawwe wy wegere en wêrom?

Faak wurde wy konfrontearre mei in situaasje wêr't wy dielde opslach moatte ymplementearje mei goede lês-skriuwprestaasjes op in lyts webkluster. Wy hawwe ferskate opsjes besocht foar it ymplementearjen fan dielde opslach foar ús projekten, mar in pear wiene yn steat om ús tagelyk te foldwaan oan ferskate yndikatoaren. No sille wy jo fertelle wêrom.

  • Glusterfs foldie ús net mei lês- en skriuwprestaasjes; d'r wiene problemen mei it simultane lêzen fan in grut oantal bestannen, en d'r wie in hege lading op 'e CPU. It probleem mei it lêzen fan triemmen koe wurde oplost troch tagong se direkt fan bakstien, mar dit is net altyd fan tapassing en is oer it algemien ferkeard.

  • Ceph hâldde net fan 'e oerstallige kompleksiteit, dy't skealik wêze kin op projekten mei 2-4-tsjinners, foaral as it projekt dêrnei wurdt ûnderhâlden. Nochris binne d'r serieuze prestaasjesbeheiningen dy't ús twinge om aparte opslachklusters te bouwen, lykas by glusterfs.

  • It brûken fan ien NFS-tsjinner om dielde opslach út te fieren ropt fragen op yn termen fan fouttolerânsje.

  • s3 is in poerbêste populêre oplossing foar in bepaald oanbod fan taken, mar it is gjin bestânsysteem, dat syn omfang beheint.

  • lsyncd. As wy al binne begon te praten oer "net-bestânsystemen", dan is it wurdich om dizze populêre oplossing te gean. Net allinnich is it net geskikt foar twa-wei útwikseling (mar as jo echt wolle, dan kinne jo), it wurket ek net stabyl op in grut oantal triemmen. In moaie oanfolling op it gehiel is dat it single-threaded is. De reden is yn 'e arsjitektuer fan it programma: it brûkt inotify om wurkobjekten te kontrolearjen, dy't it tawize by it opstarten en by it opnij skennen. rsync wurdt brûkt as it oerdracht medium.

Tutorial: hoe't jo dielde opslach kinne ynsette basearre op drbd + ocfs2

Ien fan 'e meast handige oplossingen foar ús wie de keppeling ocfs2+drbd. No sille wy jo fertelle hoe't jo dielde opslach fluch kinne ynsette foar twa servers basearre op in oplossingsdatabase. Mar earst in bytsje oer de komponinten:

DRBD - in opslachsysteem fan 'e standert Linux-distribúsje wêrmei jo gegevens kinne replikearje tusken servers yn blokken. De haadapplikaasje is om fouttolerante opslach te bouwen.

OCFS2 - in bestânsysteem dat dield gebrûk leveret fan deselde opslach troch ferskate systemen. Opnaam yn 'e Linux-distribúsje en is in kernelmodule en ark foar brûkersromte foar wurkjen mei de FS. OCFS2 kin brûkt wurde net allinnich oer DRBD, mar ek oer iSCSI mei meardere ferbinings. Yn ús foarbyld brûke wy DRBD.

Alle aksjes wurde útfierd op Ubuntu-tsjinner 18.04 yn in minimale konfiguraasje.

Stap 1. Konfigurearje DRBD:

Yn it bestân /etc/drbd.d/drbd0.res beskriuwe wy ús firtuele blokapparaat /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-skiif ynterne - brûk deselde blokapparaten om metadata op te slaan
apparaat /dev/drbd0 - brûk /dev/drbd0 as it paad nei it drbd-folume.
skiif /dev/vdb1 - brûke /dev/vdb1
syncer {rate 1000M; } - brûke bânbreedte fan gigabit-kanaal
tastean-twa-primarys - in wichtige opsje wêrmei feroarings wurde akseptearre op twa primêre tsjinners
after-sb-0pri, after-sb-1pri, after-sb-2pri - opsjes ferantwurdlik foar de aksjes fan 'e knooppunt as splitbrain wurdt ûntdutsen. Mear details kinne fûn wurde yn 'e dokumintaasje.
wurde-primêr-op beide - stelt beide knopen yn op primêr.

Yn ús gefal hawwe wy twa absolút identike VM's, mei in tawijd firtuele netwurk mei in bânbreedte fan 10 gigabits.

Yn ús foarbyld binne de netwurknammen fan twa klusterknooppunten drbd1 en drbd2. Foar goede operaasje moatte jo de nammen en IP-adressen fan hosts yn /etc/hosts oerienkomme.

10.10.10.192 drbd1
10.10.10.193 drbd2

Stap 2. Knooppunten ynstelle:

Op beide servers rinne wy:

drbdadm create-md drbd0

Cluster opslach foar lytse webklusters basearre op drbd + ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Wy krije it folgjende:

Cluster opslach foar lytse webklusters basearre op drbd + ocfs2

Jo kinne syngronisaasje begjinne. Op it earste knooppunt moatte jo útfiere:

drbdadm primary --force drbd0

Litte wy nei de status sjen:

cat /proc/drbd

Cluster opslach foar lytse webklusters basearre op drbd + ocfs2

Geweldich, syngronisaasje is begûn. Wy wachtsje oant it ein en sjogge de foto:

Cluster opslach foar lytse webklusters basearre op drbd + ocfs2

Stap 3. Start syngronisaasje op it twadde knooppunt:

drbdadm primary --force drbd0

Wy krije it folgjende:

Cluster opslach foar lytse webklusters basearre op drbd + ocfs2

No kinne wy ​​skriuwe nei drbd fan twa servers.

Stap 4. Ynstallearje en konfigurearje ocfs2.

Wy sille in frij triviale konfiguraasje brûke:

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

It moat opskreaun wurde yn /etc/ocfs2/cluster.conf op beide knooppunten.

Wy meitsje in FS op drbd0 op elke node:

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

Hjir hawwe wy in bestânsysteem makke mei it label testVol op drbd0, mei de standertparameters.

Cluster opslach foar lytse webklusters basearre op drbd + ocfs2

Yn /etc/default/o2cb moatte jo ynstelle (lykas yn ús konfiguraasjetriem)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

en útfiere op elke knooppunt:

o2cb register-cluster ocfs2cluster

Dan skeakelje wy yn en foegje alle ienheden ta dy't wy nedich binne foar autorun:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Guon fan dit sil al rinne tidens it opsetproses.

Stap 5. Foegje berchpunten ta oan fstab op beide knopen:

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

Directory /media/dield it moat fan tefoaren makke wurde.

Hjir brûke wy de noauto-opsjes, wat betsjuttet dat it bestân net wurdt monteard by it opstarten (ik leaver netwurkbestannen fia systemd te mount) en heartbeat=local, wat betsjut dat de hertslachtsjinst op elke knooppunt brûkt wurdt. D'r is ek wrâldwide hertslach, dy't mear geskikt is foar grutte klusters.

Folgjende kinne jo mount /media/dield en kontrolearje ynhâld syngronisaasje.

Done! As gefolch krije wy mear of minder fouttolerante opslach mei skalberens en fatsoenlike prestaasjes.

Boarne: www.habr.com

Add a comment