Evitare SPOFS con GlusterFS e Windows


10

Abbiamo un cluster GlusterFS che utilizziamo per la nostra funzione di elaborazione. Vogliamo integrare Windows in esso, ma abbiamo qualche problema a capire come evitare il single-point-of-failure che è un server Samba che serve un volume GlusterFS.

Il nostro flusso di file funziona in questo modo:

GlusterFS Document Flow

  1. I file vengono letti da un nodo di elaborazione Linux.
  2. I file vengono elaborati.
  3. I risultati (possono essere piccoli, possono essere piuttosto grandi) vengono riscritti nel volume GlusterFS mentre vengono eseguiti.
    • I risultati possono invece essere scritti in un database o includere diversi file di varie dimensioni.
  4. Il nodo di elaborazione preleva un altro lavoro dalla coda e da GOTO 1.

Gluster è eccezionale poiché offre un volume distribuito e una replica istantanea. La resilienza alle catastrofi è buona! Ci piace.

Tuttavia, poiché Windows non ha un client GlusterFS nativo, abbiamo bisogno di un modo per i nostri nodi di elaborazione basati su Windows di interagire con l'archivio file in modo simile resiliente. La documentazione di GlusterFS afferma che il modo per fornire l'accesso a Windows consiste nell'impostare un server Samba sopra un volume GlusterFS montato. Ciò porterebbe a un flusso di file come questo:

Flusso di documenti GlusterFS tramite avvolgitori

A me sembra un singolo punto di fallimento.

Un'opzione è quella di raggruppare Samba , ma questo sembra essere basato sul codice instabile in questo momento e quindi fuori dai giochi.

Quindi sto cercando un altro metodo.

Alcuni dettagli chiave sui tipi di dati che lanciamo:

  • Le dimensioni dei file originali possono variare da pochi KB a decine di GB.
  • Le dimensioni dei file elaborati possono variare da pochi KB a un GB o due.
  • Alcuni processi, come scavare in un file di archivio come .zip o .tar, possono causare MOLTE ulteriori scritture man mano che i file contenuti vengono importati nell'archivio file.
  • Il conteggio dei file può arrivare a 10 milioni.

Questo carico di lavoro non funziona con una configurazione Hadoop "dimensione unità di lavoro statica". Allo stesso modo, abbiamo valutato i negozi di oggetti in stile S3, ma li abbiamo trovati carenti.

La nostra applicazione è scritta in modo personalizzato in Ruby e disponiamo di un ambiente Cygwin sui nodi Windows. Questo può aiutarci.

Un'opzione che sto prendendo in considerazione è un semplice servizio HTTP su un cluster di server su cui è montato il volume GlusterFS. Poiché tutto ciò che stiamo facendo con Gluster sono essenzialmente le operazioni GET / PUT, che sembrano facilmente trasferibili a un metodo di trasferimento file basato su HTTP. Mettili dietro una coppia di loadbalancer e i nodi Windows possono HTTP PUT al contenuto del loro cuoricino blu.

Quello che non so è come verrebbe mantenuta la coerenza di GlusterFS . Il livello proxy HTTP introduce una latenza sufficiente tra quando il nodo di elaborazione segnala che è stato eseguito con la scrittura e quando è effettivamente visibile sul volume GlusterFS, che sono preoccupato per le successive fasi di elaborazione che tentano di raccogliere il file Trovalo. Sono abbastanza sicuro che l'uso direct-io-mode=enabledell'opzione mount aiuterà, ma non sono sicuro che sia abbastanza . Cos'altro dovrei fare per migliorare la coerenza?

O dovrei perseguire completamente un altro metodo?


Come Tom ha sottolineato di seguito, NFS è un'altra opzione. Quindi ho eseguito un test. Poiché i file sopra menzionati hanno nomi forniti dal cliente che dobbiamo conservare e possono essere disponibili in qualsiasi lingua, dobbiamo preservare i nomi dei file. Quindi ho creato una directory con questi file:

Directory NFS con nomi validi, sul server

Quando lo monto da un sistema Server 2008 R2 con il client NFS installato, ottengo un elenco di directory come questo:

Directory NFS con nomi errati, sul client

Chiaramente, Unicode non viene conservato. Quindi NFS non funzionerà per me.


Credo che il team di Samba consideri ctdbstabile e pronto per l'uso in produzione e la prima frase nel link che hai dato rende la seconda non valida perché se non è mai stata aggiornata. Avevo intenzione di stabilirlo, ma prima di arrivare a questo ho cambiato lavoro in un ambiente quasi privo di finestre.
Sven

Quale versione di Windows stai guardando?
Tom O'Connor l'

@ TomO'Connor Come dice il tag, Windows 7. Tuttavia, Server 2008 R2 sarà lì a un certo punto.
sysadmin1138

Suppongo che Cygwin sia fuori discussione?
Tom O'Connor,

Risposte:


5

Mi piace GlusterFS. In realtà, adoro GlusterFS. Finché puoi dargli un po 'di larghezza di banda dedicata, tutto va bene.

Una delle cose migliori di GlusterFS è usarla con NFS. Una delle cose sorprendenti con cui ho lavorato di recente è NFS su Windows 7 e 2k8R2 .

Ecco cosa farei.

  1. Configurare 2 server GlusterFS che possono esportare NFS.
  2. Imposta un collegamento di battito cardiaco tra di loro.
  3. Distribuire qualcosa come Heartbeat / Pacemaker forse?
  4. Imposta un IP virtuale (VIP) tra i tuoi nodi Gluster.
  5. Connetti le unità di rete mappate del boxen di Windows usando l'indirizzo IP del VIP.
  6. Metti alla prova tutto ciò che puoi immaginare.

Clustering Samba sembra spaventoso e, anche se lo fai, Samba non ha ancora la capacità di comportarsi in modo affidabile in alcune reti Windows (tutta la compatibilità del dominio NT4, sembra non essere mai in grado di superarlo).

Io penso che, poiché ogni nodo Gluster è in, modalità replicato distribuita allora si dovrebbe teoricamente essere in grado di connettersi a uno e permetto a preoccuparsi di spostare i dati in giro. Di conseguenza, il battito cardiaco dovrebbe essere la cosa che fa il reindirizzamento e controlla con chi stai parlando.

Quanto al tuo

  • Il conteggio dei file può arrivare a 10 milioni.

Ti suggerisco di indagare sull'utilizzo di XFS come file system sottostante, poiché è abbastanza buono con file system di grandi dimensioni e supportato da GlusterFS


Attualmente sto usando XFS! Abbiamo esaminato NFS3 qualche tempo fa per gestire la funzione di importazione iniziale, ma si è rivelato non realizzabile a causa della mancanza del supporto Unicode. Questo era con il server NFS su Windows. "会計 2012.xls" non verrebbe visualizzato correttamente, e questo è molto importante. Ma ... non lo sapevo di 7 / R2, e vale la pena indagare!
sysadmin1138

Quindi ho eseguito un test. Sfortunatamente, non ha restituito buoni risultati (vedi aggiornamento sulla domanda). Sembra che il problema Unicode sia bidirezionale.
sysadmin1138

Bugger. Sono senza idee, quindi. Mi chiedo se potresti mettere Samba dietro un VIP.
Tom O'Connor,

Gruppo di lavoro sì, Dominio (che stiamo usando) no. Quindi, il mio problema.
sysadmin1138

D'altra parte, dopo aver conversato con gli sviluppatori, mantenere i nomi dei file non è così critico come mi aspettavo. Apparentemente, fintanto che riusciremo a metterli nella prima fase (ingest), il database terrà traccia dei nomi. Quindi NFS è un'opzione valida qui (una volta ottenute le giuste versioni di Windows).
sysadmin1138

1

Forse puoi pensare nella soluzione HA ... usa un LDAP per l'autenticazione (può essere replicato come molti server LDAP che desideri) e inserisci un IP per ascoltare i servizi SMB.

Questo IP sarà mobile sul server principale. In questo caso Heartbeat può avviare i servizi sul secondo server.

Questo server avrà un mountpoint per glusterfs e quindi tutti i dati saranno lì.

È una possibile soluzione ed è così facile da gestire ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.