Amazon RDS per MySQL vs installazione di MySQL su un'istanza Amazon EC2


31

Al lavoro, ospitiamo tutti i nostri server Web su Amazon EC2 e di solito abbiamo utilizzato database MySQL installati sullo stesso box del nostro server Web Apache e su cui abbiamo comunicato localhost. Ora affrontiamo la necessità di migrare il nostro database sul proprio server per uno dei nostri sistemi. Ho una scelta tra due soluzioni: utilizzare Amazon RDS , o semplicemente avviare una nuova scatola Amazon EC2 e installare MySQL su di essa.

RDS, essendo un servizio di database dedicato fornito dalla stessa società di EC2, sembra che dovrebbe essere l' opzione ovviamente migliore . Tuttavia, quando guardo il prezzo per le due opzioni (vedi http://aws.amazon.com/ec2/pricing e http://aws.amazon.com/rds/pricing ) sembra che un server RDS costa quasi il doppio di un server EC2 per una scatola con le stesse specifiche.

Dato che sono in grado di gestire da solo i backup e che EC2 offre la stessa capacità di ridimensionare l'istanza richiesta da RDS, non riesco a vedere alcun motivo per utilizzare RDS invece di EC2. Sembra che probabilmente mi manchi qualcosa di grosso, perché se avessi ragione, nessuno userebbe RDS. Cosa mi manca esattamente e quali sono i vantaggi di RDS rispetto all'installazione del proprio database su un'istanza EC2?


Vale la pena notare che il rapporto tra EC2 e RDS è cambiato in modo significativo da quando ho posto questa domanda. L'uptime dell'istanza su EC2 è ancora più economico, ma supera i due terzi del prezzo RDS; passare da EC2 a RDS (o viceversa) non significa più raddoppiare (o dimezzare) la bolletta del server. (Potrebbe ancora essere una differenza che vale la pena preoccuparsi, ovviamente, a seconda delle circostanze.)
Mark Amery,

Risposte:


20

Sono un grande fan di AWS in generale ... ma RDS, non così tanto.

@RolandoMySQLDBA ha sottolineato che ci sono alcuni punti abbastanza positivi a riguardo.

L'unico vantaggio che vedo in RDS rispetto a MySQL su EC2 è la possibilità di eseguire snapshot point-and-click, cloni e ripristino point-in-time, ma questi non sono quasi sufficienti a compensare la perdita di controllo e flessibilità e sicuramente non giustifica il prezzo più alto. RDS è sexy in qualche modo, ma alla fine non puoi fidarti di ciò che non puoi risolvere, perché non puoi raggiungere tutte le parti in movimento.

Non mi piace non avere il SUPERprivilegio. Non mi piace non essere in grado di modificare il registro degli errori. Non mi piace non poter eseguire "top" o "iostat" sul mio server di database per vedere come i core e le unità godono del carico. Non mi piace non avere accesso al motore di archiviazione federato. Non mi piace l'idea di pagare per una macchina master di backup hot standyby (multi-AZ) che non posso nemmeno sfruttare come replica di lettura. Certo, ci sono spiegazioni perfettamente ragionevoli per cui tutti questi vincoli devono essere in atto affinché MySQL possa essere impacchettato e venduto con successo come RDBMS-in-a-box. L'unica cosa è che RDBMS-in-a-box "risolve" tutta una serie di problemi che non ho ... e si mette sulla mia strada, causando nuovi problemi.

Ma il patto assoluto per me con RDS è la completa mancanza di accesso ai registri binari e alla replica. I binlog, in particolare quelli basati su righe, sono un fantastico strumento di recupero per le catastrofi minori, ma non ti aiutano se non riesci ad accedervi. Vuoi configurare un server locale nel tuo ufficio come replica di lettura del tuo database di produzione in RDS? Qualcosa da cui prelevare backup locali, rapporti, avere a portata di mano per il ripristino di emergenza dovrebbe accadere qualcosa di impensabile ai dati che risiedono in RDS? È un'idea che è allo stesso tempo ovvia e geniale.

Spiacenti, l'accesso diretto alla replica non è disponibile. Certo, puoi pagare per le repliche lette ... ma solo come altre istanze RDS. Non è una proposta di valore nel mio libro.

Aggiornamento: una modifica significativa in RDS per MySQL 5.6

Preferisco ancora eseguire il mio server (anche in EC2) rispetto all'esecuzione di RDS per una serie di motivi, tra cui la mancanza di supporto per le funzioni definite dall'utente , l'impossibilità di utilizzare Federated Storage Engine e l'incapacità di avere quello connessione extra disponibile per l'accesso di emergenza ... tuttavia ...

Amazon ha apportato una modifica significativa in MySQL 5.6 per RDS che elimina una delle mie principali obiezioni - forse la mia più grande obiezione: i registri binari sono ora accessibili e puoi eseguire un'istanza non RDS come slave o collegare altre utility al server che legge il flusso binlog.

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Exporting.NonRDSRepl.html

Ufficialmente, la documentazione indica che lo stanno esponendo in modo da poter impostare uno slave allo scopo di eseguire una migrazione in tempo reale: si sincronizza il server master futuro straniero dall'istanza RDS esistente utilizzando mysqldump, quindi lo si connette a RDS come slave per ottenere un feed live di aggiornamenti tramite il flusso di replica fino a quando la tua applicazione non viene migrata sul nuovo master, ma ufficiosamente puoi farlo su base continuativa purché non ti aspetti che ti supportino ... che, a me sembra ragionevole.

Ciò è stato confermato in un recente webinar , in una conversazione che inizia intorno alle 56:45:

"Puoi mantenerlo in uno stato replicato indefinitamente ...

"... fintanto che ti assumi la responsabilità di mantenere la replica ..."

"Non ti stiamo impedendo di eseguire la replica in corso se è quello che vuoi."

Questa nuova capacità mi è bastata a far cadere la mia obiezione generale sull'uso di RDS nelle nostre istanze MySQL a supporto di siti Web rivolte al pubblico, dove non usiamo FEDERATEDo alcune delle altre cose così o per niente.

Quindi non sono ancora a favore, ma non sono più contrario, poiché avere un flusso live dei registri binari mi riporta in ultima analisi al controllo dei dati in tempo reale e alla responsabilità di garantire che nessuna transazione sia perso in una catastrofica interruzione è tornato con me, perché io, come DBA, sono di nuovo in controllo - che è esattamente come lo voglio. Avere un fornitore di terze parti a cui puntare il dito, o presentare una causa, o qualsiasi altra cosa, non recupera i dati persi se scompare in un buco nero all'interno di una scatola nera.

Il management sembra apprezzare l '"idea" di RDS e non si oppone alla differenza di costo, quindi ora stiamo lanciando tutti i nuovi siti Web con RDS alle spalle.

Il recupero point-in-time point and click, lo ammetto, è una bella funzionalità di RDS ... non altera o interrompe la tua macchina esistente - invece, avvia un'istanza completamente nuova, usando il backup che era il più vicino nel tempo al momento selezionato, quindi applica i binlog necessari per portare la nuova macchina al punto nel tempo specificato.

In relazione a questo, ma nella direzione opposta, ora è anche possibile utilizzare una strategia simile per migrare un database MySQL live in RDS ... è possibile connettere un master RDS (presumibilmente, in genere, si tratterebbe di una nuova distribuzione istanza) come slave di un sistema esistente in modo che l'istanza RDS abbia la versione live dei dati al momento della migrazione. A differenza dell'accesso ai binlog RDS per la replica esterna, che funziona solo con 5.6, la replica interna è supportata in RDS a partire da 5.5.33 e 5.6.13.


Posso sapere come si utilizza Federated Storage Engine ?
Bharat Khatri,

11

Se ridimensionare i server DB non è la tua tazza di tè , Amazon RDS è OK da usare perché tutte le campane e fischietti vengono con esso. Coloro che desiderano semplicemente HA moderato, backup e ridimensionamento ne traggono grande beneficio.

Il rovescio della medaglia, se si desidera ridimensionare l'hardware, è fuori questione per RDS. Cosa succede se si desidera aumentare le capacità di MySQL? Sfortunatamente, questo è fuori discussione per molti aspetti che uno vorrebbe.

Ad esempio, sapevate che due campi sono racchiusi in tutti e sette i (7) modelli di server RDS?

Nota la seguente tabella su queste due opzioni:

MODEL      max_connections innodb_buffer_pool_size
---------  --------------- -----------------------
t1.micro   34                326107136 (  311M)
m1-small   125              1179648000 ( 1125M,  1.097G)
m1-large   623              5882511360 ( 5610M,  5.479G)
m1-xlarge  1263            11922309120 (11370M, 11.103G)
m2-xlarge  1441            13605273600 (12975M, 12.671G)
m2-2xlarge 2900            27367833600 (26100M, 25.488G)
m2-4xlarge 5816            54892953600 (52350M, 51.123G)

Non ti viene dato il privilegio SUPER e non vi è alcun accesso diretto a my.cnf. Alla luce di ciò, al fine di modificare le my.cnfopzioni per l'avvio, è innanzitutto necessario creare un Elenco opzioni parametri DB basato su MySQL e utilizzare il RDS CLI (Command Line Interface)per modificare le Opzioni desiderate. Quindi, è necessario farlo per importare le nuove opzioni:

  • Creare un gruppo di parametri DB personalizzati (chiamarlo MySettings)
  • Scarica l'interfaccia della riga di comando RDS e imposta un file di configurazione con le tue credenziali AWS
  • Eseguire quanto segue: ./rds-modify-db-parameter-group MySettings --parameters "name=whateveroption,value=whatevervalue,method=immediate"
  • Modifica utilizzando Elenco opzioni parametri DB MySettings
  • Riavvia l'istanza di MySQL RDS

Utilizzando un'API per aggiornare una singola variabile e fare un riavvio obbligatorio dell'istanza RDS per implementare la modifica? Questo è un processo piuttosto doloroso per tweek qualsiasi opzione.

Se desideri ridimensionare MySQL, utilizza EC2. Quindi, puoi tweek my.cnfa tuo piacimento come hai sempre fatto e a cui sei stato abituato.

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.