Tolleranza ai guasti attraverso la replica di database SQL

2

Supponiamo che i server di livello intermedio siano replicati a 3 vie e che il database di backend (MySQL, PostgreSQL, ecc.) sia replicato in 3 modi. Una richiesta utente finisce per creare alcuni dati utente nei server di livello intermedio e vorrei commetterli nel database di back-end in modo resiliente agli errori.

Una soluzione di tentativo candidato, ad esempio, se invio i dati a un database SQL e lo faccio replicare i dati negli altri database, se l'unico database SQL presenta l'arresto anomalo prima che possa replicare i dati, i dati sono perso.

Qual è la soluzione migliore per la tolleranza agli errori che viene utilizzata nel mondo reale.

    
posta user782220 21.07.2011 - 05:58
fonte

3 risposte

1

In genere la replica viene utilizzata per il trasferimento dei dati da sito a sito.

La tolleranza ai guasti è tutta una questione di ridondanza. Più il tuo sistema è ridondante e più tollerante è per i guasti. Molti possono essere risolti attraverso l'infrastruttura, piuttosto che il codice, specialmente per un database.

Si spera che il server abbia dischi rigidi ridondanti che possono essere sostituiti a caldo in caso di guasto. Pertanto, il server stesso deve disporre di funzioni ridondanti come alimentatori hardrive, ecc.

Ma se il server si arrestasse in modo anomalo, allora ci troviamo nel clustering di failover, questo è quando un altro server subentra senza problemi in caso di guasto di un server. In questo caso, sarebbero disponibili più nodi. Di solito uno è attivo e l'altro passivo in attesa di fallimento.

Quindi è un fallimento più grave, un crash del data center, ad esempio un terremoto o qualche altro atto di dio. In questo caso, un altro centro dati avrebbe preso il sopravvento. In questo scenario è più probabile che i dati vengano replicati da un sito all'altro.

Tutti costano più denaro per l'implementazione e la manutenzione. Dipende dalla gravità dei dati e dalle richieste del cliente. In alcuni casi, solo un backup notturno lo farà.

Speriamo che il tuo sistema bancario online stia usando più di quello.

Non so quali sono i tuoi requisiti, ma quelli sono gli scenari e i livelli di escalation più comuni.

    
risposta data 22.07.2011 - 03:13
fonte
1

Hai familiarità con il teorema CAP ? C'è una prova matematica che non esiste la soluzione migliore. Devi fare un compromesso che è meglio per il tuo caso.

In pratica, usa dischi ridondanti in modo che i possibili guasti siano rari e utilizzi la replica distribuita in modo che la perdita di un singolo sito non significhi la perdita dell'intera attività. È generalmente un rischio accettabile perdere alcuni dati recenti in casi estremi.

    
risposta data 22.07.2011 - 11:14
fonte
1

La best practice per i sistemi generici (ovvero non personalizzata per un caso specifico) è attualmente la distribuzione del log DB su 2 siti con un server di controllo per garantire che l'istanza "split-brain" non si verifichi mai.

(split brain è quando ci sono 2 siti che perdono la connettività tra di loro, i clienti del sito A pensano che siano quelli che sono attivi e scrivono sul suo DB, ma il sito B pensa che sia ancora attivo e scrive sul suo database . quando ti riconnetti, scopri di avere dati in entrambi i DB che è impossibile unire insieme).

SQLServer, MySql e Oracle hanno tutti una forma di replica (Oracle Dataguard, SQLServer mirroring, MySql replica IIRC). Scrivi dati in un DB "singolo" e copia i dati nel mirror. Se il DB primario si interrompe, il sistema promuove il mirror come principale e scrive su quello invece, quando il DB morto viene ripristinato, tutti i dati mancanti vengono inviati e continuano da lì. I problemi con questo sono che più a lungo è morto, maggiori sono i dati necessari per essere spediti a "ricostruire" il DB. Inoltre, quando si verifica la promozione, il sistema si blocca o sembra sospeso per un breve periodo in quanto assicura che il DB non sia contattabile. Abbiamo visto questa pausa per un minuto, che è un lungo periodo in una situazione critica per la missione!

Oracle fornirà più mirror, fino a 9 penso, ma la maggior parte degli altri sistemi fornisce solo un mirror singolo.

    
risposta data 22.07.2011 - 13:00
fonte

Leggi altre domande sui tag