Wordpress su replica IIS con robocopy


10

Installiamo un ambiente wordpress su 4 server IIS. Stiamo valutando di utilizzare un'attività pianificata che attiva uno script robocopy per replicare la directory di wordpress ogni 5 minuti.

Quali sono le opinioni su un simile approccio? Qualcuno ha mai usato questo o simili?


Quali sono i 4 server IIS fisici o VM? Cosa stai replicando i dati o i database e le configurazioni? Non so perché avresti 4 server 1 come master (presumo) e gli altri siano passivi se stai cercando di ottenere HA che non funzionerà.
Anthony Fornito,

1
seconda domanda (e probabilmente la più importante) perché esegui wordpress su Windows?
Anthony Fornito,

Grazie @AnthonyFornito per la tua risposta. Esecuzione di wordpress su Windows per motivi interni. Sto solo cercando di lavorarci. Sono dopo la replica dei file del sito Web (la replica del database è già gestita tramite MYSQL). I front-end sono macchine virtuali in Azure. Sono principalmente alla ricerca di una soluzione in cui tutti i front-end condividano gli stessi file del sito Web. C'è qualcosa che vorresti suggerire?
joebegborg07,

Risposte:


12

Avere 4 server front-end che condividono gli stessi file contemporaneamente e ognuno è in grado di scrivere senza utilizzare un tipo di programma DFS o di terze parti dedicato alla sincronizzazione delle directory sarebbe una cavalla notturna.

Con l'azzurro puoi esaminare 3 cose.

  1. Spazio di archiviazione condiviso, potrebbero esserci dei costi associati all'ottenimento del proprio spazio di archiviazione dedicato e non sono sicuro della configurazione, tuttavia Azure lo offre. Ciò garantirebbe che tutti i file siano disponibili per ciascun server non appena vengono scritti.

  2. Azure DFS, DFS è uno strumento di sincronizzazione delle directory basato su Windows che funziona piuttosto bene, inoltre non è sicuro del costo ma la configurazione potrebbe essere un po 'più semplice. DFS funziona in modo asincrono, quindi c'è un piccolo ritardo ma non molto.

  3. (Spiegherò come sarebbe fatto e poi non ne parlerò mai più, perché è un'idea orribile e fallirà.) Crea uno script che prima confronterà i dati su tutti e quattro i server, quindi copierà i dati differenziali. Dovresti condividere ogni directory su un server che esegue lo script, i permessi di installazione in modo che il server possa leggere e scrivere e quindi risolvere i problemi, risolvere i problemi.

Entrambe le opzioni di cui sopra faranno il lavoro, se il tuo lavoro dipende da questo lavoro, ti consiglio di stare lontano dall'opzione 3.

Detto questo, e non stai cercando di spendere soldi, segui i passaggi seguenti.

  1. guarda un programma chiamato "sincronizzazione file gratuita". Ci sono alcune funzionalità davvero buone per la versione gratuita, credo che ci sia una versione a pagamento, ma non sono sicuro dei miglioramenti che ottieni. L'ho usato in molti dei miei ambienti di sviluppo quando cercavo di ottenere qualcosa di simile a quello che stai cercando di fare ed era pigro per impostare DFS.

  2. Rendi scrivibile un solo server, questo può essere fatto facilmente configurando un URI su ciascun server che dice se creare l'articolo vai a ServerA, o un URL riscritto nel tuo web.config, o essendo WordPress è uso php:

    header ('Posizione: http://myhost.com/mypage.php ');

Ciascuno richiederà un po 'di codifica e PHP, conoscenza IIS.

  1. La parte davvero divertente, con ServerA come server autore (solo server scrivibile) come indirizzare il traffico verso ServerB, ServerC e ServerD per la lettura senza un bilanciamento del carico?

Risposta breve che non puoi, beh non è esattamente vero, una volta ho avuto un cliente che era irremovibile di non usare un bilanciamento del carico che era in grado attraverso una serie di script PowerShell di spostare una connessione da un server all'altro in base alla quantità di i processi di lavoro su ogni scatola o qualcosa del genere. In entrambi i casi è molto difficile da fare e non vale il tempo e l'energia da dedicare.

Verifica se non riesci a configurare il bilanciamento del carico di rete sui server, richiederà un IP aggiuntivo ma è solo una modifica DNS e il traffico può essere distribuito per la lettura sui 3 server.

In bocca al lupo!


Mille grazie per i tuoi suggerimenti. Il singolo archivio centrale è stato un collo di bottiglia per noi, dato che avevamo già installato quella configurazione ma non eravamo in grado di gestire un traffico elevato. Avevamo bisogno di una soluzione rapida a causa di una scadenza. Alla fine abbiamo usato resilio, che è una soluzione di sincronizzazione in tempo reale peer-to-peer, che rileva le modifiche su qualsiasi server e si replica sull'altro server. Spero che chiunque abbia problemi uguali o simili possa risolvere questo problema nello stesso modo in cui ha funzionato per noi. Sto testando il tuo suggerimento di riscrivere gli URL per il back-end di WP e spingendo le modifiche su altre macchine. Grazie ancora.
joebegborg07,

Bilanciamento carico di rete non funziona su Azure (non esiste un livello 2, se vuoi degli incubi davvero orribili, prova a guardare la tabella ARP su una macchina virtuale di Azure).
Massimo,

12

Grazie per tutti i suggerimenti persone.

La nostra soluzione stava usando un approccio di sincronizzazione peer-to-peer usando uno strumento chiamato resilio.

Resilio ci ha permesso di configurare un numero di computer (in questo caso i front-end IIS) in un cluster di sincronizzazione peer-to-peer. Una cartella viene selezionata da ciascun computer nel cluster da utilizzare per il processo di sincronizzazione.

Il servizio resilio (servizio di Windows in esecuzione in background) controlla queste cartelle per eventuali modifiche e se viene apportata una modifica a una delle cartelle specificate sui front-end in questione, resilio invierà tale modifica agli altri server.

Spero che questo possa aiutare gli altri ad affrontare un problema simile in futuro.


11

Non penso che le attività pianificate e Robocopy siano un ottimo approccio. A causa della finestra di 5 minuti ci saranno momenti in cui viene richiesta una risorsa ma il server selezionato dal servizio di bilanciamento del carico non l'avrà disponibile. Per i siti in gran parte statici questo accadrà molto meno spesso che con i siti occupati cambiati frequentemente. Una frequenza più elevata o l'utilizzo di una tecnologia di sincronizzazione diversa come Bittorrent Sync (ora chiamato Resilio Sync ) migliorerebbe un po 'questo, ma non eliminerebbero il problema.

Mettere il tuo contenuto wp o forse solo la cartella wp-content / uploads su un'unità condivisa sarebbe una soluzione migliore. Un altro modo di vedere questo sarebbe avere uno dei server che ospita quella cartella e che gli altri la condividano. Con la memorizzazione nella cache del disco, il carico sul server non dovrebbe essere molto più elevato rispetto agli altri server.

Aggiornare

Dai un'occhiata a questo articolo per idee sulla memorizzazione nella cache delle pagine e questo per CDN. Si tratta di Nginx, quindi è necessario elaborarlo per IIS, ma la teoria alla base è valida per qualsiasi server Web.


Grazie per il tuo suggerimento @Tim. Come hai detto, il sito Web è dinamico, con regolari aggiornamenti di file minori dovuti a plugin wordpress in atto; Ciò significa che ogni front-end potrebbe avere file diversi a volte. Hai mai provato questo ambiente di produzione (circa 500 - 1000 utenti simultanei); vale a dire memorizzare i file del sito Web in un repository centrale e mappato attraverso un'unità condivisa? Se sì, come è stata l'esperienza.
joebegborg07,

No, non ho testato questo scenario - non è necessario perché memorizzo nella cache e utilizzo un CDN. Dovresti caricare test dei server front-end incluso il file server back-end. Tuttavia, se le tue pagine non sono personalizzate per la memorizzazione nella cache di ogni pagina utente, potresti ridurre notevolmente il tuo carico, come farebbe con una distribuzione di contenuti - CloudFlare ha un livello gratuito. Questo è vero anche se si aggiorna ogni 5 minuti. Google "Nginx Microcaching" per la teoria alla base, ma ovviamente dovrai implementarlo in modo diverso su IIS. Le intestazioni della cache sono piuttosto importanti se segui questa strada. Vedi anche l'aggiornamento sopra.
Tim
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.