Almacenamento de clústeres para pequenos clústeres web baseados en drbd+ocfs2

Do que falaremos:
Como implementar rapidamente o almacenamento compartido para dous servidores baseados en solucións drbd+ocfs2.

Para quen lle será útil:
O titorial será útil para os administradores do sistema e para calquera que elixa un método de implementación de almacenamento ou queira probar a solución.

Que decisións rexeitamos e por que?

Moitas veces atopámonos cunha situación na que necesitamos implementar o almacenamento compartido cun bo rendemento de lectura e escritura nun pequeno clúster web. Probamos varias opcións para implementar o almacenamento compartido para os nosos proxectos, pero poucos foron capaces de satisfacernos en varios indicadores á vez. Agora imos dicirche por que.

  • Glusterfs non nos satisfizo co rendemento de lectura e escritura; houbo problemas coa lectura simultánea dun gran número de ficheiros e había unha gran carga na CPU. O problema coa lectura de ficheiros podería resolverse accedendo a eles directamente desde o ladrillo, pero isto non sempre é aplicable e xeralmente é incorrecto.

  • A Ceph non lle gustou a complexidade excesiva, que pode ser prexudicial en proxectos con servidores 2-4, especialmente se o proxecto se mantén posteriormente. De novo, hai serias limitacións de rendemento que nos obrigan a construír clústeres de almacenamento separados, como sucede con glusterfs.

  • Usar un servidor NFS para implementar o almacenamento compartido suscita preguntas en termos de tolerancia a fallos.

  • s3 é unha excelente solución popular para unha determinada gama de tarefas, pero non é un sistema de ficheiros, o que reduce o seu alcance.

  • lsyncd. Se xa comezamos a falar de "sistemas que non son de ficheiros", entón paga a pena repasar esta popular solución. Non só non é axeitado para o intercambio bidireccional (pero se realmente queres, podes), tampouco funciona de forma estable nun gran número de ficheiros. Unha boa adición a todo é que é dun só fío. A razón está na arquitectura do programa: usa inotify para supervisar os obxectos de traballo, que asigna ao inicio e durante a nova exploración. rsync úsase como medio de transferencia.

Titorial: como implementar almacenamento compartido baseado en drbd+ocfs2

Unha das solucións máis convenientes para nós foi a ligazón ocfs2+drbd. Agora dirémosche como podes implementar rapidamente o almacenamento compartido para dous servidores baseados nunha base de datos de solucións. Pero primeiro, un pouco sobre os compoñentes:

DRBD - un sistema de almacenamento da distribución estándar de Linux que permite replicar datos entre servidores en bloques. A aplicación principal é crear almacenamento tolerante a fallos.

OCFS2 - un sistema de ficheiros que proporciona un uso compartido do mesmo almacenamento por varios sistemas. Incluído na distribución de Linux e é un módulo do núcleo e ferramentas de espazo de usuario para traballar co FS. OCFS2 pódese usar non só a través de DRBD, senón tamén a través de iSCSI con conexións múltiples. No noso exemplo usamos DRBD.

Todas as accións realízanse no servidor ubuntu 18.04 nunha configuración mínima.

Paso 1. Configura DRBD:

No ficheiro /etc/drbd.d/drbd0.res describimos o noso dispositivo de bloque 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;
}
}

metadisco interno — use os mesmos dispositivos de bloque para almacenar metadatos
dispositivo /dev/drbd0 — use /dev/drbd0 como camiño ao volume drbd.
disco /dev/vdb1 - use /dev/vdb1
sincronizador {taxa 1000M; } - use ancho de banda de canle de gigabit
permitir-dúas-primarias - unha opción importante que permite aceptar cambios en dous servidores primarios
despois de sb-0pri, despois de sb-1pri, despois de sb-2pri — opcións responsables das accións do nodo cando se detecta splitbrain. Pódense atopar máis detalles na documentación.
converterse-primario-en ambos — establece os dous nodos como primarios.

No noso caso, temos dúas máquinas virtuales absolutamente idénticas, cunha rede virtual dedicada cun rendemento de 10 gigabits.

No noso exemplo, os nomes de rede de dous nodos do clúster son drbd1 e drbd2. Para un funcionamento correcto, cómpre facer coincidir os nomes e enderezos IP dos hosts en /etc/hosts.

10.10.10.192 drbd1
10.10.10.193 drbd2

Paso 2. Configurar os nós:

Nos dous servidores executamos:

drbdadm create-md drbd0

Almacenamento de clústeres para pequenos clústeres web baseados en drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Obtemos o seguinte:

Almacenamento de clústeres para pequenos clústeres web baseados en drbd+ocfs2

Pode iniciar a sincronización. No primeiro nodo cómpre executar:

drbdadm primary --force drbd0

Vexamos o estado:

cat /proc/drbd

Almacenamento de clústeres para pequenos clústeres web baseados en drbd+ocfs2

Xenial, comezou a sincronización. Agardamos ata o final e vemos a imaxe:

Almacenamento de clústeres para pequenos clústeres web baseados en drbd+ocfs2

Paso 3. Inicia a sincronización no segundo nodo:

drbdadm primary --force drbd0

Obtemos o seguinte:

Almacenamento de clústeres para pequenos clústeres web baseados en drbd+ocfs2

Agora podemos escribir en drbd desde dous servidores.

Paso 4. Instalar e configurar ocfs2.

Usaremos unha configuración bastante 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

Hai que anotalo /etc/ocfs2/cluster.conf nos dous nodos.

Creamos un FS en drbd0 en calquera nodo:

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

Aquí creamos un sistema de ficheiros coa etiqueta testVol en drbd0, utilizando os parámetros predeterminados.

Almacenamento de clústeres para pequenos clústeres web baseados en drbd+ocfs2

En /etc/default/o2cb cómpre configurar (como no noso ficheiro de configuración)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

e executar en cada nodo:

o2cb register-cluster ocfs2cluster

Despois acendemos e engadimos todas as unidades que necesitamos para executar automaticamente:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Algúns destes xa se executarán durante o proceso de configuración.

Paso 5. Engade puntos de montaxe a fstab nos dous nodos:

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

Directorio /media/compartido debe ser creado previamente.

Aquí usamos as opcións noauto, o que significa que o ficheiro non se montará ao inicio (prefiro montar ficheiros de rede a través de systemd) e heartbeat=local, o que significa usar o servizo heartbeat en cada nodo. Tamén hai un latido cardíaco global, que é máis axeitado para grandes clústeres.

A continuación podes montar /media/compartido e comprobar a sincronización do contido.

Feito! Como resultado, obtemos un almacenamento máis ou menos tolerante a fallos con escalabilidade e rendemento decente.

Fonte: www.habr.com

Engadir un comentario