Cluster di database e bilanciamento del carico


Risposte:


132

Il clustering del database è un termine un po 'ambiguo, alcuni fornitori considerano un cluster con due o più server che condividono lo stesso spazio di archiviazione, altri chiamano un cluster un set di server replicati.

La replica definisce il metodo con cui un set di server rimane sincronizzato senza dover condividere l'archiviazione per poter essere geograficamente disperso, ci sono due modi principali per farlo:

  • replica master-master (o multi-master): qualsiasi server può aggiornare il database. Di solito è gestito da un modulo diverso all'interno del database (o un software completamente diverso in esecuzione su di essi in alcuni casi).

    L'aspetto negativo è che è molto difficile fare bene e alcuni sistemi perdono le proprietà ACID quando si trovano in questa modalità di replica.

    Il lato positivo è che è flessibile e puoi supportare l'errore di qualsiasi server pur mantenendo il database aggiornato.

  • replica master-slave: esiste una sola copia di dati autorevoli, che viene inviata ai server slave.

    L'aspetto negativo è che è meno tollerante ai guasti, se il master muore, non ci sono ulteriori cambiamenti negli slave.

    Il lato positivo è che è più facile da fare rispetto al multi-master e di solito conserva le proprietà ACID.

Il bilanciamento del carico è un concetto diverso, consiste nella distribuzione delle query inviate a tali server in modo che il carico sia distribuito nel modo più uniforme possibile. Di solito viene eseguito a livello di applicazione (o con un pool di connessioni). L'unica relazione diretta tra replica e bilanciamento del carico è che è necessaria una replica per poter bilanciare il carico, altrimenti si avrebbe un singolo server.


1
Ah, ho dimenticato la replica :) Sì, puoi ottenere il bilanciamento del carico in questo modo in combinazione con la logica a livello di applicazione :). +1
Jimmy Chandra,

1
I documenti Postgresql si riferiscono al "cluster di database" in modo diverso: "Prima di poter fare qualsiasi cosa, è necessario inizializzare un'area di archiviazione del database sul disco. Chiamiamo questo un cluster di database. (SQL utilizza il termine cluster di catalogo.) Un cluster di database è una raccolta di database gestiti da una singola istanza di un server di database in esecuzione. " postgresql.org/docs/8.3/static/creating-cluster.html
Donato

1
Cosa significano le proprietà ACID, o meglio, cosa perdi esattamente se non le preservi?
TheStoryCoder

@TheStoryCoder In informatica, ACID (Atomicity, Coerency, Isolation, Durability) è un insieme di proprietà di transazioni di database destinate a garantire la validità anche in caso di errori, interruzioni di corrente, ecc. Nel contesto di database, una sequenza di database le operazioni che soddisfano le proprietà ACID (e queste possono essere percepite come una singola operazione logica sui dati) è chiamata transazione. Ad esempio, un trasferimento di fondi da un conto bancario a un altro, anche comportando più modifiche come l'addebito di un conto e l'accredito di un altro, è una singola transazione.
Fizampou,

17

Dal punto di vista di SQL Server:

Il clustering ti darà una configurazione attiva - passiva. Significato in un cluster a 2 nodi, uno di essi sarà attivo (in servizio) e l'altro sarà passivo (in attesa di subentrare in caso di errore del nodo attivo). È un'alta disponibilità dal punto di vista hardware.

È possibile avere un cluster attivo-attivo, ma richiederà più istanze di SQL Server in esecuzione su ciascun nodo. (ad es. l'istanza 1 sul nodo A che esegue il failover sull'istanza 2 sul nodo B e l'istanza 1 sul nodo B che esegue il failover sull'istanza 2 sul nodo A).

Il bilanciamento del carico (almeno dal punto di vista di SQL Server) non esiste (almeno nello stesso senso del bilanciamento del carico del server Web). Non è possibile bilanciare il carico in questo modo. Tuttavia, è possibile dividere l'applicazione per l'esecuzione su alcuni database sul server 1 e anche su alcuni database sul server 2, ecc. Questa è la media principale di "bilanciamento del carico" nel mondo SQL.


9

Il clustering utilizza un tipo di archiviazione condivisa (ad esempio una gabbia dell'unità o una SAN) e inserisce due front-end del database. I server front-end condividono un indirizzo IP e un nome di rete del cluster che i client utilizzano per connettersi e decidono tra loro chi è attualmente responsabile della gestione delle richieste dei client.

Se stai chiedendo di un determinato server di database, aggiungilo alla tua domanda e possiamo aggiungere dettagli sulla loro implementazione, ma alla base, ecco cos'è il clustering.


6

Il clustering di database è in realtà una modalità di replica sincrona tra due o forse più nodi con una funzionalità aggiuntiva di tolleranza agli errori aggiunta al sistema e anche quella in un'architettura nulla condivisa. Per nulla condiviso significa che i singoli nodi in realtà non condividono alcuna risorsa fisica come disco o memoria.

Per quanto riguarda la sincronizzazione dei dati, esiste un server di gestione a cui tutti i nodi di dati sono collegati insieme al nodo SQL per raggiungere questo obiettivo (parlando specificamente di MySQL).

Ora a proposito delle differenze: il bilanciamento del carico è solo uno dei risultati che potrebbero essere raggiunti attraverso il clustering, gli altri includono elevata disponibilità, scalabilità e tolleranza agli errori.

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.