Emmagatzematge en clúster per a petits clústers web basats en drbd+ocfs2

De què parlarem:
Com implementar ràpidament l'emmagatzematge compartit per a dos servidors basats en solucions drbd+ocfs2.

A qui serà útil això:
El tutorial serà útil per als administradors del sistema i per a qualsevol persona que esculli un mètode d'implementació d'emmagatzematge o vulgui provar la solució.

Quines decisions vam rebutjar i per què?

Sovint ens trobem davant d'una situació en què hem d'implementar l'emmagatzematge compartit amb un bon rendiment de lectura-escriptura en un petit clúster web. Vam provar diverses opcions per implementar l'emmagatzematge compartit per als nostres projectes, però pocs van poder satisfer-nos amb diversos indicadors alhora. Ara us explicarem per què.

  • Glusterfs no ens va satisfer amb el rendiment de lectura i escriptura, hi havia problemes amb la lectura simultània d'un gran nombre de fitxers i hi havia una càrrega elevada a la CPU. El problema amb la lectura de fitxers es podria resoldre accedint-hi directament des de brick, però això no sempre és aplicable i, en general, és incorrecte.

  • A Ceph no li agradava l'excessiva complexitat, que pot ser perjudicial en projectes amb 2-4 servidors, sobretot si el projecte es manté posteriorment. De nou, hi ha limitacions de rendiment greus que ens obliguen a crear clústers d'emmagatzematge separats, com passa amb els glusterfs.

  • L'ús d'un servidor NFS per implementar l'emmagatzematge compartit planteja preguntes en termes de tolerància a errors.

  • s3 és una excel·lent solució popular per a una determinada gamma de tasques, però no és un sistema de fitxers, cosa que redueix el seu abast.

  • lsyncd. Si ja hem començat a parlar de "sistemes que no són de fitxers", val la pena repassar aquesta solució popular. No només no és adequat per a l'intercanvi bidireccional (però si realment ho voleu, podeu fer-ho), també no funciona de manera estable en un gran nombre de fitxers. Una bona addició a tot és que és d'un sol fil. El motiu està en l'arquitectura del programa: utilitza inotify per supervisar els objectes de treball que assigna a l'inici i durant l'exploració. rsync s'utilitza com a mitjà de transferència.

Tutorial: com implementar l'emmagatzematge compartit basat en drbd+ocfs2

Una de les solucions més convenients per a nosaltres va ser l'enllaç ocfs2+drbd. Ara us explicarem com podeu implementar ràpidament l'emmagatzematge compartit per a dos servidors basats en una base de dades de solucions. Però primer, una mica sobre els components:

DRBD - un sistema d'emmagatzematge de la distribució estàndard de Linux que permet replicar dades entre servidors en blocs. L'aplicació principal és crear emmagatzematge tolerant a errors.

OCFS2 - un sistema de fitxers que proporciona l'ús compartit del mateix emmagatzematge per diversos sistemes. Inclòs a la distribució de Linux i és un mòdul del nucli i eines d'espai d'usuari per treballar amb el FS. OCFS2 es pot utilitzar no només a través de DRBD, sinó també a través d'iSCSI amb múltiples connexions. En el nostre exemple fem servir DRBD.

Totes les accions es realitzen al servidor ubuntu 18.04 en una configuració mínima.

Pas 1. Configura DRBD:

Al fitxer /etc/drbd.d/drbd0.res descrivim el nostre dispositiu de bloc virtual /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;
}
}

metadisc intern — Utilitzeu els mateixos dispositius de bloc per emmagatzemar metadades
dispositiu /dev/drbd0 — utilitzeu /dev/drbd0 com a camí al volum drbd.
disc /dev/vdb1 - utilitzeu /dev/vdb1
syncer { taxa 1000M; } — Utilitzeu ample de banda del canal gigabit
permetre-dues-primàries - una opció important que permet acceptar canvis en dos servidors primaris
després-sb-0pri, després-sb-1pri, després-sb-2pri — opcions responsables de les accions del node quan es detecta splitbrain. Podeu trobar més detalls a la documentació.
esdevenir-primari-en tots dos — estableix els dos nodes com a primaris.

En el nostre cas, tenim dues màquines virtuals absolutament idèntiques, amb una xarxa virtual dedicada amb un rendiment de 10 gigabits.

Al nostre exemple, els noms de xarxa de dos nodes de clúster són drbd1 i drbd2. Per al funcionament correcte, heu de fer coincidir els noms i les adreces IP dels amfitrions a /etc/hosts.

10.10.10.192 drbd1
10.10.10.193 drbd2

Pas 2. Configura els nodes:

Als dos servidors executem:

drbdadm create-md drbd0

Emmagatzematge en clúster per a petits clústers web basats en drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Obtenim el següent:

Emmagatzematge en clúster per a petits clústers web basats en drbd+ocfs2

Podeu iniciar la sincronització. Al primer node, heu d'executar:

drbdadm primary --force drbd0

Vegem l'estat:

cat /proc/drbd

Emmagatzematge en clúster per a petits clústers web basats en drbd+ocfs2

Genial, la sincronització ha començat. Esperem fins al final i veiem la imatge:

Emmagatzematge en clúster per a petits clústers web basats en drbd+ocfs2

Pas 3. Inicieu la sincronització al segon node:

drbdadm primary --force drbd0

Obtenim el següent:

Emmagatzematge en clúster per a petits clústers web basats en drbd+ocfs2

Ara podem escriure a drbd des de dos servidors.

Pas 4. Instal·leu i configureu ocfs2.

Utilitzarem una configuració bastant trivial:

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

Cal anotar-lo /etc/ocfs2/cluster.conf als dos nodes.

Creem un FS a drbd0 en qualsevol node:

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

Aquí hem creat un sistema de fitxers amb l'etiqueta testVol a drbd0, utilitzant els paràmetres per defecte.

Emmagatzematge en clúster per a petits clústers web basats en drbd+ocfs2

A /etc/default/o2cb cal configurar (com al nostre fitxer de configuració)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

i executeu a cada node:

o2cb register-cluster ocfs2cluster

A continuació, encenem i afegim totes les unitats que necessitem per executar automàticament:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Part d'això ja s'executarà durant el procés de configuració.

Pas 5. Afegiu punts de muntatge a fstab als dos nodes:

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

Directori /media/compartit s'ha de crear amb antelació.

Aquí fem servir les opcions noauto, que vol dir que el fitxer no es muntarà a l'inici (prefereixo muntar fitxers de xarxa mitjançant systemd) i heartbeat=local, que significa utilitzar el servei heartbeat a cada node. També hi ha un batec global del cor, que és més adequat per a grups grans.

A continuació pots muntar /media/compartit i comproveu la sincronització del contingut.

Fet! Com a resultat, obtenim un emmagatzematge més o menys tolerant a errors amb escalabilitat i un rendiment decent.

Font: www.habr.com

Afegeix comentari