Mysql
 sql >> Database >  >> RDS >> Mysql

Istantanea del volume EBS utilizzato per la replica

Sebbene sia una buona idea bloccare il database e bloccare il file system quando si avvia lo snapshot, la chiamata API effettiva per avviare lo snapshot richiede una frazione di secondo, quindi il database e il file system non vengono bloccati/congelati a lungo.

Detto questo, ci sono un altro paio di considerazioni che non hai menzionato:

  1. Quando si tenta di creare il blocco sul database, potrebbe essere necessario attendere il completamento di altre istruzioni prima che il blocco venga concesso. Durante questo periodo, il tuo blocco in sospeso potrebbe attendere ulteriori dichiarazioni fino a quando non ottieni e rilascia il blocco. Ciò può causare interruzioni nel flusso di istruzioni nel database di produzione.

  2. Dopo aver avviato la creazione dello snapshot, la tua applicazione/database è libero di utilizzare il file system sul volume, ma se hai molte scritture, potresti riscontrare un elevato iowait, a volte abbastanza da creare un notevole rallentamento della tua applicazione. Il motivo è che il processo di snapshot in background deve copiare un blocco in S3 prima che consenta una scrittura su quel blocco sul volume attivo.

Risolvo il primo problema richiedendo un blocco e un timeout se non viene concesso rapidamente. Quindi aspetto un po' e continuo a riprovare fino a quando non ottengo il blocco. I timeout appropriati e il ritardo dei tentativi possono variare a seconda del caricamento del database.

Risolvo il secondo problema eseguendo le istantanee frequenti e coerenti sullo slave anziché sul master, proprio come hai proposto. Consiglio comunque di eseguire snapshot occasionali contro il master semplicemente per migliorarne la durabilità intrinseca (una proprietà EBS profonda), ma non è necessario eseguire tali snapshot con il blocco o il blocco poiché non li utilizzerai per i backup.

Raccomando anche l'uso di un file system che supporti lo svuotamento e il blocco (XFS). In caso contrario, stai eseguendo lo snapshot di tabelle bloccate in MySQL che potrebbero non avere ancora tutti i loro blocchi sul volume EBS o altre parti del file system potrebbero essere modificate e incoerenti nello snapshot.

Se sei interessato, ho pubblicato un software open source che esegue le migliori pratiche che ho raccolto relative alla creazione di snapshot EBS coerenti con MySQL e XFS (entrambi opzionali).

Per rispondere alla tua ultima domanda, il blocco delle tabelle nel master non interromperà la replica. Nel mio software di snapshot, svuoto anche le tabelle con il blocco di lettura per assicurarmi che tutto sia sul disco da acquisire e aggiungo la parola chiave "LOCAL" in modo che lo svuotamento non venga replicato su alcun potenziale slave.