Come condividere risorse tra più server Web?


16

Ho più server Web Linux collegati a un bilanciamento del carico e mi piace condividere risorse (come immagini, video e altre cose) tra questi server. Qual è il modo migliore per farlo?

Attualmente, ho montato su un file server su tutti i server Web, ma sono preoccupato per il fatto che va giù sotto un traffico intenso. Come posso evitare che ciò accada?

Grazie in anticipo.


È qui che sono utili cose come Cassandra (database NoSQL).
Alexis Wilke,

Considerato l'utilizzo di Varnish per migliorare le prestazioni a traffico intenso? it.wikipedia.org/wiki/Varnish_%28software%29
Thorbjørn Ravn Andersen

Risposte:


12

Esistono diversi modi per farlo in base alle tue esigenze.

  • Utilizzare un file server centrale montato con fx NFS sui server web
  • Come sopra, ma ridondante, quindi se uno scende l'altro prende il sopravvento
  • Utilizzare una sorta di strumento di sincronizzazione (ad esempio rsync) e ospitare i file localmente sui server web. Quindi imposta un cronjob per sincronizzare i file tra i server a un intervallo specifico.
  • Usa un CDN come Amazon S3, Akamai ecc.

I primi due sono i migliori se hai molti nuovi file in arrivo. Il terzo sarebbe la soluzione ideale se non aggiungi o modifichi file che spesso poiché gli utenti ottengono 404 su contenuto statico non ancora sincronizzato.

L'ultima opzione potrebbe essere ideale in molti modi, ma potrebbe anche rivelarsi la più costosa delle 4. Dovresti anche riscrivere i tuoi siti Web per supportarlo.


Il grosso problema con rsync è che è probabile che tu ottenga un 404 se carichi nuovi dati e il rsync non si verifica molto rapidamente ... Anche un sistema come Cassandra (punto 4) è gratuito, anche se ovviamente avere 10 server non lo è gratis ... quindi, forse dovrei dire senza costi aggiuntivi (anche se ha bisogno di un po 'di programmazione per farlo funzionare tutto).
Alexis Wilke,

@AlexisWilke - Hai ragione su rsync, e ho anche parlato della risposta. L'ho chiarito nella risposta ora.
Frederik Nielsen,

Ri: # 3, il "tempo morto" tra la nuova risorsa distribuita e la nuova risorsa sincronizzata può essere ridotto al minimo se si utilizza un file system watcher (come il watchman di Facebook ) e uno strumento di sincronizzazione rapida (come csync2 ). No, il ritardo non scenderà mai a zero, ma è molto minimo e potrebbe essere più facile da implementare rispetto alle altre alternative.
pepoluan,

2

Un altro ottimo modo per ridurre il carico sui server web ed eseguire il bilanciamento del carico è con squid (ovvero squid3) Impostarlo come proxy inverso con la memorizzazione nella cache. Memorizzerà il contenuto statico come immagini, ecc. Sull'HDD (impostazione predefinita) o su RAM (più veloce e migliore) se impostato in questo modo. È in grado di eseguire il round robin anche su altri server di calamari se un nodo particolare è sovraccarico.


1
Penso che quel tipo di memorizzazione nella cache fallisca se si desidera un sito Web molto dinamico. Perché con un forte dinamismo, è ancora necessario colpire un server back-end principale per molti dati. Penso che l'utente stia invece cercando di dividere il lavoro di backend.
Alexis Wilke,

1
La tua risposta è corretta sulla potenziale riduzione del carico, ma non risponde alla domanda sulla condivisione di file di risorse tra più server.

@AlexisWilke lo fa (fallisce) se non hai impostato correttamente i calamari. Regola il modo in cui viene memorizzato nella cache (o se memorizza nella cache) nelle impostazioni, ma potresti scoprire che nessuna pagina è mai completamente dinamica. C'è sempre qualcosa che puoi memorizzare nella cache. Anche Andre, aiuta moltissimo a condividere le risorse come descritto nel titolo, ma a condividere i file non tanto. La domanda era: come evitare che i siti cadessero sotto carichi pesanti. Squid è eccellente nel fare questo.
Aihngel Tech,

1

Poiché di solito la necessità di più server deriva dalle risorse necessarie per eseguire siti Web / API dinamici, considerare l'hosting di risorse statiche in un altro sottodominio / dominio. (come static.yourdomain.com)

È quindi possibile utilizzare un altro server / server per ospitarli. L'hosting di file statici non utilizza molte risorse, quindi avrai bisogno di un numero considerevolmente inferiore di server per i tuoi contenuti statici. Libererai anche alcune risorse sui server per i tuoi contenuti dinamici.

A seconda del bilanciamento del carico potresti anche essere in grado di farlo sullo stesso dominio con il bilanciamento del carico che decide quale server utilizzare per quale richiesta, ma se usi un dominio separato puoi mettere le tue risorse statiche su una rete CDN, se la necessità dovrebbe sorgere!


1

Una soluzione a questa sfida che ho impiegato è quella di avere la copia principale di lettura / scrittura dei file su un'unità NFS condivisa, ma anche di conservare la copia di sola lettura su ciascun server Web in modo che un errore dell'host NFS metta l'accesso ai file in modalità di sola lettura anziché perderli completamente.

  • I file vivono su host centrale, condiviso con host web tramite mount NFS
  • rsync viene eseguito ogni 15 minuti per mantenere aggiornata la copia di sola lettura su ogni host web.
  • Uno check_linkscript bash viene eseguito ogni minuto per assicurarsi che il mount NFS sia ancora lì e, in caso contrario, scambia un collegamento simbolico alla copia di sola lettura.

Maggiori dettagli sono disponibili in questo articolo da quando ho configurato questo sistema.

upsides:

  • Le letture dei file sono altamente disponibili
  • Nessuna condizione di competizione per la scrittura di file
  • I nuovi file sono immediatamente disponibili per tutti gli host web.

Svantaggi:

  • un po 'complesso.
  • il numero di copie di sola lettura si ridimensiona con il numero di host web, che potrebbe essere eccessivo se ne hai molti più di due.
  • Le scritture di file non sono altamente disponibili.
  • Potenziale fino a 1 minuto di inattività prima di passare alla copia di sola lettura.

0

Potresti voler considerare un database NoSQL. Sono progettati per funzionare su cluster, fornire eventuale coerenza. Ma fai attenzione, non sono ACIDI.

Ecco un'introduzione che ti aiuterà a decidere quale tipo di database NoSQL potresti desiderare per il tuo scopo.

Ecco un elenco di risorse relative a NoSQL disponibile.


4
In che modo questa risposta aiuta nel problema di sincronizzazione dei file?
Tito

@titus In NoSQL, quando è presente una scrittura su uno dei nodi, verrà replicato su altri nodi del cluster. Cassandra scrivere livelli di coerenza potrebbe aiutare a chiarire
Azzy

quindi la strada da percorrere è memorizzare tutti i file nel db NoSQL?
Tito

@titus puoi, ma i database NoSQL possono fare molto di più quindi archiviare i file, tutto dipende dalle tue esigenze.
Azzy,

2
OP ha chiesto una soluzione a un problema specifico " più server Web Linux collegati a un bilanciamento del carico ... condividono risorse (come immagini, video e altre cose) tra questi server. " La tua risposta è molto generica, puoi suggerire e spiegare strumenti specifici (e preferibilmente configurazioni dello stesso) per affrontare il problema?
kdbanman,

0

Perché non provi una soluzione DFS, offrono un alto livello di ridondanza e il volume può essere condiviso tra tutti quelli che desideri. Gluster è il mio preferito ed è molto facile da installare e configurare in qualsiasi famosa distribuzione Linux

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.