MySQL con InnoDB fornisce una buona soluzione generica, e probabilmente manterrà abbastanza facilmente le vostre esigenze in termini di prestazioni con hardware non troppo costoso. Può gestire facilmente molte migliaia di aggiornamenti al secondo su una doppia scatola quad-core con dischi decenti. La replica asincrona integrata ti offre la maggior parte del modo per i tuoi requisiti di disponibilità, ma potresti perdere alcuni secondi di dati se il primario fallisce. Alcuni di questi dati persi potrebbero essere recuperabili quando il primario viene riparato, o potrebbe essere recuperato dai registri delle applicazioni: se si può tollerare ciò dipende dal modo in cui funziona il sistema. Un'alternativa meno lenta - ma più lenta - è usare MySQL Innodb con disco condiviso tra unità Primaria e Failover: in questo caso, l'unità Failover prenderà il controllo del disco quando il Primario fallisce senza perdita di dati - purché il Primario non ha avuto alcun tipo di catastrofe su disco. Se il disco condiviso non è disponibile, è possibile utilizzare DRBD per simulare ciò copiando in modo sincrono i blocchi del disco sull'unità Failover mentre vengono scritti: ciò potrebbe avere un impatto sulle prestazioni.
L'utilizzo di Innodb e una delle soluzioni di replica sopra riportate consente di copiare i dati nell'unità Failover, che risolve gran parte del problema di ripristino, ma è necessaria una colla extra per riconfigurare il sistema per portare l'unità Failover su linea. Questo di solito viene eseguito con un sistema cluster come RHCS o Pacemaker o Heartbeat (su Linux) o il materiale MS Cluster per Windows. Questi sistemi sono toolkit, e sei lasciato a sporcarti le mani costruendoli in una soluzione adatta al tuo ambiente. Tuttavia, per tutti questi sistemi c'è un breve periodo di interruzione mentre il sistema rileva che il Primario non è riuscito e riconfigura il sistema per utilizzare l'unità Failover. Questo potrebbe richiedere decine di secondi: provare a ridurlo può rendere il sistema di rilevamento degli errori troppo sensibile e il sistema potrebbe non funzionare inutilmente.
Muoversi, MySQL NDB ha lo scopo di ridurre i tempi di recupero, e in qualche misura di aiuto scala il backup del database per migliorare le prestazioni. Tuttavia, MySQL NDB ha una gamma di applicabilità piuttosto limitata.Il sistema associa un database relazionale a una tabella hash distribuita, quindi per le query complesse che coinvolgono più join tra tabelle, c'è un po 'di traffico tra il componente MySQL e i componenti di archiviazione (i nodi NDB) che rallentano le query complesse. Tuttavia, le query che si adattano bene funzionano davvero molto velocemente. Ho esaminato questo prodotto alcune volte, ma i miei database esistenti sono stati troppo complicati per adattarsi bene e richiederebbero molte modifiche per ottenere buone prestazioni. Tuttavia, se sei nella fase di progettazione di un nuovo sistema, NDB funzionerebbe bene se riuscirai a tenere a mente i suoi limiti mentre procedi. Inoltre, è possibile che siano necessarie diverse macchine per fornire una buona soluzione NDB: un paio di nodi MySQL più 3 o più nodi NDB, anche se i nodi MySQL e NDB possono coesistere se le esigenze di prestazioni non sono eccessive.
Anche MySQL NDB non è in grado di gestire la perdita totale del sito: incendi nel data center, errore di amministrazione, ecc. In questo caso, in genere è necessario un altro flusso di replica in esecuzione su un sito DR. Normalmente ciò avverrà in modo asincrono, in modo tale che i collegamenti di connettività sul collegamento tra siti non interrompano l'intero database. Questo è fornito con l'opzione di replica geografica di NDB (nella versione per telco a pagamento), ma penso che MySQL 5.1 e versioni successive possano fornire questo in modo nativo.
Sfortunatamente, conosco poco su Zookeeper e Chubby. Speriamo che qualcun altro possa cogliere questi aspetti.
Questa domanda è difficile da rispondere senza sapere di più su ciò che stai cercando di raggiungere. È abbastanza probabile che una semplice replica di MySQL (nemmeno con NDB) possa essere sufficiente per te. Nella maggior parte delle architetture di database, le domande chiave a cui rispondere sono 1) qual è il mio obiettivo del tempo di recupero (ovvero, quanto tempo devo recuperare dai crash del database primario) 2) qual è il mio obiettivo del punto di ripristino (es. molti dati posso perdere in caso di arresto anomalo del database primario) Quanto più ristrette sono le tolleranze per questi obiettivi, tanto più elaborata (e costosa) è la soluzione. – Martin
Grazie martin ... Ho appena aggiornato la mia domanda con i miei requisiti .. –