Almacenamiento en clúster para pequeños clústeres web basados ​​en drbd + ocfs2

De lo que hablaremos:
Cómo implementar rápidamente el almacenamiento compartido para dos servidores basado en soluciones drbd + ocfs2.

Para quien será útil:
El tutorial será útil para los administradores del sistema y cualquier persona que elija un método de implementación de almacenamiento o quiera probar una solución.

¿Qué decisiones hemos rechazado y por qué?


A menudo nos enfrentamos a una situación en la que necesitamos implementar un almacenamiento común en un pequeño clúster web con un buen rendimiento de lectura y escritura. Probamos varias opciones para implementar un repositorio común para nuestros proyectos, pero poco pudo satisfacernos de inmediato para varios indicadores. Ahora expliquemos por qué.

  • Glusterfs no nos satisfizo con el rendimiento de lectura y escritura, hubo problemas con la lectura simultánea de una gran cantidad de archivos, hubo una gran carga en la CPU. El problema con la lectura de archivos podría resolverse solicitándolos directamente en el ladrillo, pero esto no siempre es aplicable y generalmente es incorrecto.

  • A Ceph no le gustó la excesiva complejidad, que puede ser dañina en proyectos con 2-4 servidores, especialmente si el proyecto es atendido posteriormente. Nuevamente, existen serias limitaciones de rendimiento que lo obligan a construir clústeres de almacenamiento separados, como ocurre con los glusterfs.

  • El uso de un servidor nfs para implementar el almacenamiento compartido genera problemas de tolerancia a fallas.

  • s3 es una excelente solución popular para un cierto rango de tareas, pero no es un sistema de archivos, lo que reduce el alcance.

  • lsyncd. Si ya comenzamos a hablar de "sistemas que no son archivos", entonces vale la pena revisar esta popular solución. No solo no es adecuado para el intercambio bidireccional (sino que si realmente lo desea, puede hacerlo), sino que tampoco funciona de manera estable en una gran cantidad de archivos. Una buena adición a todo será que es de un solo subproceso. La razón está en la arquitectura del programa: usa inotify para monitorear los objetos de trabajo que cuelga al inicio y durante el reescaneo. Rsync se utiliza como medio de transmisión.

Tutorial: cómo implementar almacenamiento compartido basado en drbd + ocfs2


Una de las soluciones más convenientes para nosotros fue un montón de ocfs2 + drbd . Ahora le mostraremos cómo implementar rápidamente el almacenamiento compartido para dos servidores en función de una base de datos de soluciones. Pero primero, un poco sobre los componentes:

DRBD es el sistema de almacenamiento Linux estándar que permite que los datos se repliquen entre bloques de servidores. La aplicación principal es construir almacenamiento tolerante a fallas.

OCFS2 es un sistema de archivos que proporciona el uso compartido del mismo almacenamiento por múltiples sistemas. Se incluye en la distribución de Linux y es un módulo de kernel y herramientas de espacio de usuario para trabajar con FS. OCFS2 puede usarse no solo sobre DRBD, sino también sobre iSCSI con múltiples conexiones. En nuestro ejemplo, usamos DRBD.

Todas las acciones se realizan en el servidor ubuntu 18.04 en una configuración mínima.

Paso 1. Configurar DRBD:

En el archivo /etc/drbd.d/drbd0.res describimos nuestro 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; } } 

meta-disco interno : use los mismos dispositivos de bloque para almacenar metadatos
device / dev / drbd0 : use / dev / drbd0 como la ruta al volumen drbd.
disk / dev / vdb1 - use / dev / vdb1
syncer {tasa 1000M; } - usa el ancho de banda del canal gigabit
allow-two-primaries : una opción importante para permitir la aceptación de cambios en dos servidores principales
after-sb-0pri, after-sb-1pri, after-sb-2pri : opciones responsables de las acciones del nodo cuando se detecta splitbrain. Consulte la documentación para más detalles.
Become-primary-on both : establece ambos nodos en primario.

En nuestro caso, tenemos dos máquinas virtuales absolutamente idénticas, con un ancho de banda de red virtual dedicado de 10 gigabits.

En nuestro ejemplo, los nombres de red de dos nodos del clúster son drbd1 y drbd2. Para un funcionamiento correcto, debe asignar los nombres y las direcciones IP de los nodos en / etc / hosts.

 10.10.10.192 drbd1 10.10.10.193 drbd2 

Paso 2. Configure los nodos:

En ambos servidores ejecutamos:
 drbdadm create-md drbd0 

imagen

 modprobe drbd drbdadm up drbd0 cat /proc/drbd 

Obtenemos lo siguiente:

imagen

Puedes comenzar la sincronización. En el primer nodo que necesita hacer:
 drbdadm primary --force drbd0 

Nos fijamos en el estado:
 cat /proc/drbd 

imagen

Genial, la sincronización ha comenzado. Estamos esperando el final y vemos la imagen:

imagen

Paso 3. Comenzamos la sincronización en la segunda nota:

 drbdadm primary --force drbd0 

Obtenemos lo siguiente:

imagen

Ahora podemos escribir en drbd desde dos servidores.

Paso 4. Instalar y configurar ocfs2.

Usaremos una 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 

Debe escribirse en /etc/ocfs2/cluster.conf en ambos nodos.

Cree FS en drbd0 en cualquier nodo:
 mkfs.ocfs2 -L "testVol" /dev/drbd0 

Aquí creamos un sistema de archivos etiquetado testVol en drbd0 usando la configuración predeterminada.

imagen

En / etc / default / o2cb debe estar configurado (como en nuestro archivo de configuración)
 O2CB_ENABLED=true O2CB_BOOTCLUSTER=ocfs2cluster 

y ejecutar en cada nodo:
 o2cb register-cluster ocfs2cluster 

Después de eso, encienda y agregue al inicio todas las unidades que necesitamos:
 systemctl enable drbd o2cb ocfs2 systemctl start drbd o2cb ocfs2 

Parte de esto ya se estará ejecutando durante el proceso de configuración.

Paso 5. Agregue puntos de montaje a fstab en ambos nodos:

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

El directorio / media / shared debe crearse de antemano.

Aquí usamos las opciones noauto, lo que significa que el FS no se montará al inicio (prefiero montar el FS de red a través de systemd) y heartbeat = local, lo que significa usar el servicio heartbeat en cada nodo. También hay un latido global, que es más adecuado para grandes grupos.

A continuación, puede montar / media / shared y verificar la sincronización del contenido.

Hecho Como resultado, obtenemos un almacenamiento más o menos tolerante a fallas con escalabilidad y rendimiento decente.

Source: https://habr.com/ru/post/445612/


All Articles