Evitar SPOFS con GlusterFS y Windows

10

Tenemos un clúster GlusterFS que utilizamos para nuestra función de procesamiento. Queremos integrar Windows en él, pero estamos teniendo problemas para descubrir cómo evitar el punto único de falla que es un servidor Samba que sirve un volumen GlusterFS.

Nuestro flujo de archivos funciona así:

Flujo de documentos de GlusterFS

  1. Los archivos son leídos por un nodo de procesamiento de Linux.
  2. Los archivos son procesados.
  3. Los resultados (pueden ser pequeños, pueden ser bastante grandes) se vuelven a escribir en el volumen de GlusterFS a medida que se realizan.
    • Los resultados pueden escribirse en una base de datos, o pueden incluir varios archivos de varios tamaños.
  4. El nodo de procesamiento recoge otro trabajo de la cola y GOTO 1.

Gluster es excelente ya que proporciona un volumen distribuido, así como una replicación instantánea. ¡La resiliencia ante desastres es agradable! Nos gusta.

Sin embargo, como Windows no tiene un cliente GlusterFS nativo, necesitamos alguna forma para que nuestros nodos de procesamiento basados ​​en Windows interactúen con el almacén de archivos de una manera resistente. La documentación de GlusterFS establece que la forma de proporcionar acceso a Windows es configurar un servidor Samba encima de un volumen GlusterFS montado. Eso llevaría a un flujo de archivos como este:

Flujo de documentos de GlusterFS a través de Winders

Eso me parece un solo punto de falla.

Una opción es agrupar Samba , pero parece estar basado en un código inestable en este momento y, por lo tanto, fuera de la ejecución.

Entonces estoy buscando otro método.

Algunos detalles clave sobre los tipos de datos que arrojamos:

  • Los tamaños de archivo originales pueden ser desde unos pocos KB hasta decenas de GB.
  • Los tamaños de archivo procesados ​​pueden ser desde unos pocos KB a un GB o dos.
  • Ciertos procesos, como excavar en un archivo comprimido como .zip o .tar, pueden causar MUCHAS escrituras adicionales a medida que los archivos contenidos se importan al almacén de archivos.
  • Los recuentos de archivos pueden llegar a los 10 de millones.

Esta carga de trabajo no funciona con una configuración de Hadoop de "tamaño de unidad de trabajo estática". Del mismo modo, hemos evaluado los almacenes de objetos de estilo S3, pero los encontramos insuficientes.

Nuestra aplicación está escrita a medida en Ruby, y tenemos un entorno Cygwin en los nodos de Windows. Esto puede ayudarnos.

Una opción que estoy considerando es un servicio HTTP simple en un grupo de servidores que tienen montado el volumen GlusterFS. Dado que todo lo que estamos haciendo con Gluster es esencialmente operaciones GET / PUT, eso parece fácilmente transferible a un método de transferencia de archivos basado en HTTP. Póngalos detrás de un par de equilibrador de carga y los nodos de Windows pueden PONER HTTP al contenido de su pequeño corazón azul.

Lo que no sé es cómo se mantendría la coherencia de GlusterFS . La capa de proxy HTTP introduce suficiente latencia entre cuando el nodo de procesamiento informa que ha terminado con la escritura y cuando es realmente visible en el volumen de GlusterFS, que me preocupa que las etapas de procesamiento posteriores que intenten recoger el archivo no Encuéntralo. Estoy bastante seguro de que usar la direct-io-mode=enableopción de montaje ayudará, pero no estoy seguro de si eso es suficiente . ¿Qué más debo hacer para mejorar la coherencia?

¿O debería seguir otro método por completo?


Como Tom señaló a continuación, NFS es otra opción. Entonces hice una prueba. Dado que los archivos mencionados anteriormente tienen nombres proporcionados por el cliente que debemos mantener, y pueden venir en cualquier idioma, necesitamos preservar los nombres de los archivos. Así que construí un directorio con estos archivos:

Directorio NFS con buenos nombres, en el servidor

Cuando lo monte desde un sistema Server 2008 R2 con el Cliente NFS instalado, obtengo una lista de directorios como esta:

Directorio NFS con nombres incorrectos, en el cliente

Claramente, Unicode no se conserva. Entonces, NFS no va a funcionar para mí.

sysadmin1138
fuente
Creo que el equipo de Samba considera ctdbestable y listo para su uso en producción y la primera oración en el enlace que proporcionó invalida la segunda porque nunca se actualizó. Estaba planeando establecer esto, pero antes de llegar a esto cambié los trabajos a un entorno casi libre de ventanas.
Sven
¿Qué versión de Windows estás usando?
Tom O'Connor
@ TomO'Connor Como dice la etiqueta, Windows 7. Sin embargo, Server 2008 R2 estará allí en algún momento.
sysadmin1138
¿Supongo que Cygwin está fuera de discusión?
Tom O'Connor

Respuestas:

5

Me gusta GlusterFS. En realidad, adoro GlusterFS. Siempre que pueda darle un ancho de banda dedicado, todo estará bien.

Una de las mejores cosas de GlusterFS es usarlo con NFS. Una de las cosas sorprendentes con las que he estado trabajando últimamente es NFS en Windows 7 y 2k8R2 .

Esto es lo que haría.

  1. Configure 2 servidores GlusterFS que pueden exportar NFS.
  2. Configure un enlace de latidos entre ellos.
  3. ¿Desplegar algo como Heartbeat / Pacemaker quizás?
  4. Configure una IP virtual (VIP) entre sus nodos Gluster.
  5. Conecte las unidades de red asignadas del boxen de Windows utilizando la dirección IP del VIP.
  6. Prueba todo lo que puedas imaginar.

Agrupar Samba suena aterrador, e incluso si haces eso, Samba aún carece de la capacidad de comportarse de manera confiable en algunas redes de Windows (toda esa compatibilidad de dominio NT4, nunca parece ser capaz de superar eso).

Yo creo que debido a que cada nodo Gluster es en modo distribuido, replicado entonces, teóricamente, debería ser capaz de conectarse a cualquiera y permitir que la preocupación acerca de cómo mover sus datos alrededor. Como resultado, el latido del corazón debería ser lo que hace la redirección y controla con quién estás hablando.

En cuanto a su

  • Los recuentos de archivos pueden llegar a los 10 de millones.

Le sugiero que investigue el uso de XFS como sistema de archivos subyacente, ya que es bastante bueno con grandes sistemas de archivos y es compatible con GlusterFS

Tom O'Connor
fuente
Actualmente estoy usando XFS! Analizamos NFS3 hace un tiempo para manejar la función de ingesta inicial, pero resultó inviable debido a la falta de soporte Unicode. Esto fue con el servidor NFS en Windows. "会計 2012.xls" no sería correcto, y eso es muy importante. Pero ... no sabía eso sobre 7 / R2, ¡y vale la pena investigarlo!
sysadmin1138
Entonces hice una prueba. Desafortunadamente, no arrojó buenos resultados (ver actualización de la pregunta). Parece que el problema Unicode es bidireccional.
sysadmin1138
Tío. Estoy sin ideas, entonces. Me pregunto si podrías poner a Samba detrás de un VIP.
Tom O'Connor
Grupo de trabajo sí, dominio (que estamos usando) no. Por lo tanto, mi problema.
sysadmin1138
Por otro lado, después de conversar con los desarrolladores, mantener los nombres de los archivos no es tan crítico como esperaba. Aparentemente, siempre que podamos obtenerlos en la primera etapa (ingesta), la base de datos realizará un seguimiento de los nombres. Entonces, NFS es una opción válida aquí (una vez que obtengamos las versiones correctas de Windows).
sysadmin1138
1

Tal vez pueda pensar en la solución HA ... use un LDAP para la autenticación (se puede replicar tantos servidores LDAP como desee) y coloque una IP para escuchar los servicios SMB.

Esta IP estará flotando en el servidor principal. Cuando esto está inactivo, Heartbeat puede iniciar servicios en el segundo servidor.

Estos servidores tendrán un punto de montaje para los glusterfs, y luego todos los datos estarán allí.

Es una posible solución y es muy fácil de administrar ...

Saxa
fuente