Come eseguire WordPress su 2 VM per alta disponibilità
Microsoft Azure richiede che le applicazioni utilizzino due istanze distribuite su più data center per raggiungere il loro SLA di "alta disponibilità" e garantire che i tuoi siti non vadano offline durante la manutenzione di routine. Indicano anche quali coppie di data center non andranno mai in manutenzione contemporaneamente.
Tutto bene, ma come si può implementare facilmente nella pratica per un'app come WordPress con un database MySQL sulla stessa VM? Ho esperienza nel bilanciamento del carico tra due VM, ma la configurazione della replica del database mi sfugge. Non vorremmo avere due versioni dei dati che potrebbero desincronizzarsi. La replica MySQL sembra richiedere una configurazione master-slave che non sincronizzerebbe le modifiche al DB master se un utente finisse sull'istanza slave.
Sto fraintendendo questo concetto? Qualsiasi aiuto è molto apprezzato!

La cattiva notizia: la base open source di WordPress fa diverse assunzioni sull'essere eseguito su un singolo server (wp-content, upload degli utenti e media library per citarne alcuni).
La buona notizia: praticamente tutti i provider cloud (incluso Azure) hanno astrazioni che permettono di aggirare queste limitazioni progettuali.
Fondamentalmente, dovrai affrontare le seguenti problematiche:
- Bilanciamento del traffico tra due (o più) server web/app "front-end" WordPress. Non troppo difficile dato che WordPress è PER LO PIÙ stateless a meno che non permetti agli utenti di accedere ai siti. Questo viene fatto tramite una combinazione di DNS e Load Balancer. Avrai bisogno di supporto per 2 IP per i tuoi server app - 1 set si collegherà alla subnet raggiungibile via Internet (si spera protetta da un firewall non descritto qui) e gli altri due saranno su una subnet DIVERSA isolata dall'altra rete e contenente le istanze del Database Server, ma lo schema di base è questo:
/-- (10.0.0.1 - eth0) wp1.domain.com (10.0.1.1 - eth2) (Public IP) wp.domain.com \-- (10.0.0.2 - eth1) wp2.domain.com (10.0.1.2 - eth3)
Gestione delle sessioni SE permetti agli utenti di accedere ai siti. In tal caso, dovrai assicurarti che quando accedono al server 1, tutte le loro richieste future vengano instradate a quel server (sessioni sticky) o che non importi a quale server accedono perché le sessioni sono gestite tramite qualche altro meccanismo (ad esempio via Zend Server Session Clustering).
Gestione degli accessi Admin SE permetti ad alcuni utenti di accedere al back-end per gestire i contenuti (simile al punto sopra).
Scelta di un Sistema DB ANCHE Altamente Disponibile. Non ha senso avere due server front-end se il crash del DB manda giù l'intero sistema. Dovrai sfruttare la replica MySQL Master/Slave via ClearDB o modificare WordPress via plugin per usare SQL Server così da poter usare i suoi sistemi di clustering nativi. Questo significa che ti serviranno almeno 4 VM se vuoi gestire il livello DB da solo (2 x App & 2 x DB). Ecco come potrebbe apparire:
/-- wp1.domain.com (10.0.1.1)\---/(10.0.1.3) db1.domain.com (10.0.2.3)\ wp.domain.com X | \-- wp2.domain.com (10.0.1.2)/---\(10.0.1.4) db2.domain.com (10.0.2.3)/
- NOTA - per garantire un failover affidabile e proteggere la sicurezza del sistema, di solito viene utilizzata una TERZA subnet di rete per collegare i due nodi del database tra loro tramite un canale privato separato dalle altre reti di comunicazione che i server app usano per parlare con il database e che i server app usano per comunicare con il mondo esterno.
Abilitare il Connection Pooling per massimizzare prestazioni e affidabilità delle connessioni al database dei tuoi server app.
Sfruttare un plugin di Caching come W3 Total Cache o Super Cache per minimizzare il carico sui server front-end.
Le seguenti guide offrono dettagli su come puoi affrontare ciascuna delle sfide sopra elencate. Ci sono diversi modi per gestirle in Azure, quindi spetta a te decidere come affrontare ogni sfida e gestire i vincoli che ogni scelta impone mentre lavori su e giù per lo stack.
- WordPress Scalabile
- Come ospitare un WordPress Scalabile e Ottimizzato per Azure in pochi minuti
- Deploy di un'App Web MVC ad Alta Disponibilità su Microsoft Azure – Parte 1
- Deploy di un'App Web MVC ad Alta Disponibilità su Microsoft Azure – Parte 2
- Nuova offerta WordPress "Scalabile" in Azure
- WordPress di livello Enterprise su Azure App Service
- Come eseguire siti WordPress di Grado Enterprise su Azure Websites
