Amazon Web Services: RDS e Point In Time Recovery

Amazon RDS

Quando pensiamo al Cloud Computing, in genere, la prima cosa che ci viene in mente è la migrazione di carichi di lavoro dei nostri server “on-premise” fisici o virtuali verso un fornitore Cloud.
La verità invece è che il Cloud Computing non riguarda solo macchine virtuali, ma un insieme di servizi che ci possono aiutare a ridurre (e talvolta annullare) l’impegno quotidiano che dedichiamo alle classiche attività di routine che spesso risultano anche piuttosto noiose.

I problemi che vogliamo risolvere

Da un punto di vista sistemistico quando abbiamo bisogno di mettere in produzione un nuovo database server dobbiamo:

  • decidere il dimensionamento di un’istanza EC2,
  • scegliere la tipologia di storage,
  • avviarla,
  • installare il motore di database.

Subito dopo ci dobbiamo preoccupare di una serie di aspetti prima di metterlo in produzione: creazione procedure di backup e failover automatico, aggiornamenti periodici.

Quello che invece veramente vorremmo è un database che ci permetta di non distrarci sui problemi sistemistici, ma di usufruire “out of the box” di funzionalità quali: provisioning rapido, backup e failover automatici, scalabilità. Non solo per database open source ma anche per quelli commerciali quali Oracle e SQL Server.

La soluzione: Amazon RDS

La soluzione ai problemi sopra indicati c’è e si chiama Amazon RDS (Relational Database System): ci mette a disposizione un motore di database relazionale senza dover gestire in maniera diretta tutte le problematiche ad esso collegate con un grado di controllo paragonabile ad una classica installazione manuale.
Ad oggi sono supportati MySQL, PostgreSQL, Oracle e SQL Server.

Il backup

Uno degli aspetti molto critici nella gestione di un database è il backup: oggi ci focalizzeremo sulla funzionalità di backup automatico e restore di una istanza MySQL.
Tipicamente le operazioni di backup vengono eseguite giornalmente durante le ore notturne attraverso gli strumenti che RDS ci mette a disposizione. Esso infatti creerà per noi una procedura automatizzata di backup che verrà eseguita durante la “Maintenance Window” (ovvero a che ora vogliamo che lo faccia) che andremo a specificare.
E se durante la giornata avessimo bisogno di un ripristino dei dati aggiornati? Magari perché abbiamo subito un’intrusione o abbiamo eseguito una manovra sbagliata. In questo caso potremmo solo affidarci ai dati acquisiti nella notte.
Se siamo proprietari di un sito di notizie, un ecommerce, un forum o altro, ci ritroveremmo a ripristinare una versione dei dati della notte precedente, perdendo di fatto tutte le modifiche avvenute durante la giornata.
Nella maggior parte dei casi non possiamo permettere che ciò accada, quindi ci serve un metodo per poter ripristinare rapidamente i dati. Pensiamo ad esempio alla perdita di tutti gli ordini e clienti che abbiamo acquisito durante la giornata.

Ripristino backup con “Point In Time Recovery”

Per risolvere il problema di una cancellazione accidentale possiamo affidarci alla funzionalità di “Point In Time Recovery” (PITR) presente in RDS.
Questa caratteristica ci permette di avviare una nuova istanza RDS usando uno snapshot consistente dei dati in qualunque momento all’interno della “retention period”. Esatto, hai capito bene, in ogni momento e al bisogno, possiamo avviare una nuova istanza del nostro database con i dati relativi a 5 minuti precedenti l’ episodio. Possiamo considerarla come una macchina del tempo!
Come impostazione predefinita la “retention period” è di 1 giorno, ma può essere estesa fino a 8; quindi possiamo effettuare il ripristino dei dati da 5 minuti a 1 giorno fa.
Unica penalizzazione, aumentando a 8 i giorni della “retention period”, sarà l’incremento dello spazio che andremo a occupare sulla nostra istanza RDS. La quantità di spazio aggiuntivo occupato è proporzionale alla quantità di modifiche che apportiamo ai dati.

Per utilizzare la funzionalità di PITR possiamo entrare nella management console, andare nella sezione di RDS e cliccare col tasto destro sull’istanza database che ci interessa selezionando “Restore to Point In Time”.

Amazon Web services
Successivamente ci apparirà una schermata che ci consentirà di selezionare all’indietro la data e l’ora in cui ci interessa ripristinare i dati. Semplicemente fantastico!

Amazon Web services
Tutta questa non é magia, ma con buona approssimazione possiamo immaginare che questo automatismo si basi, dietro le quinte, sulla caratteristica nativa di Incremental Recovery sul Binary Log presente in MySQL.
Se volessimo realizzare “in casa” lo stesso comportamento sul nostro database “on premise” possiamo trovare sulla documentazione ufficiale di MySQL maggiori informazioni: https://dev.mysql.com/doc/refman/5.6/en/point-in-time-recovery.html

Se avrai la pazienza di leggere la documentazione, capirai bene che riprodurre il comportamento del PITR sul proprio database non é banale, specie quando ci si trova nel momento in cui sarà davvero necessario e non aver la freddezza necessaria per eseguire le procedure descritte.

Considerazioni finali

Usare RDS è un’ottima alternativa per chi vuole focalizzarsi sul proprio core business facendo leva sui tutti i vantaggi che abbiamo indicato. L’aspetto interessante è che possiamo trattare Amazon RDS come se fosse un database tradizionale “on premise” e quindi possiamo tranquillamente utilizzare tutti gli strumenti grafici a cui siamo abituati quali MySQL client, phpMyAdmin, Adminer.