MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Failover trasparente del database per le tue applicazioni

ClusterControl è un ottimo strumento per distribuire e gestire i cluster di database:se ti occupi di MySQL, puoi facilmente distribuire cluster basati sia sulla tradizionale replica MySQL master-slave, che su Galera Cluster o MySQL NDB Cluster. Per ottenere un'elevata disponibilità, tuttavia, la distribuzione di un cluster non è sufficiente. I nodi possono (e molto probabilmente) non funzionare e il tuo sistema deve essere in grado di adattarsi a tali modifiche.

Questo adattamento può avvenire a diversi livelli. È possibile implementare una sorta di logica all'interno dell'applicazione:verificherebbe lo stato dei nodi del cluster e indirizzerebbe il traffico a quelli raggiungibili in un determinato momento. Puoi anche creare un livello proxy che implementerà l'alta disponibilità nel tuo sistema. In questo post del blog, vorremmo condividere alcuni suggerimenti su come ottenerlo utilizzando ClusterControl.

Distribuzione di HAProxy utilizzando ClusterControl

HAProxy è lo standard, uno dei proxy più popolari utilizzati in connessione con MySQL (ma non solo, ovviamente). ClusterControl supporta la distribuzione e il monitoraggio dei nodi HAProxy. Aiuta anche a implementare l'elevata disponibilità del proxy stesso utilizzando keepalive.

La distribuzione è piuttosto semplice:è necessario selezionare o inserire l'indirizzo IP di un host in cui verrà installato HAProxy, selezionare la porta, la politica di bilanciamento del carico, decidere se ClusterControl deve utilizzare il repository esistente o il codice sorgente più recente per distribuire HAProxy. Puoi anche scegliere quali nodi di backend desideri includere nella configurazione del proxy e se devono essere attivi o di backup.

Per impostazione predefinita, l'istanza HAProxy distribuita da ClusterControl funzionerà su MySQL Cluster (NDB), Galera Cluster, replica in streaming PostgreSQL e replica MySQL. Per la replica master-slave, ClusterControl può configurare due listener, uno di sola lettura e l'altro di lettura-scrittura. Le applicazioni dovranno quindi inviare letture e scritture alle rispettive porte. Per la replica multi-master, ClusterControl imposterà il bilanciamento del carico TCP standard basato sull'algoritmo di bilanciamento minimo della connessione (ad es. per Galera Cluster in cui tutti i nodi sono scrivibili).

Keepalived viene utilizzato per aggiungere alta disponibilità al livello proxy. Quando nel sistema sono presenti almeno due nodi HAProxy, è possibile installare Keepalived dall'interfaccia utente di ClusterControl.

Dovrai scegliere due nodi HAProxy e saranno configurati come una coppia attiva - standby. Un IP virtuale verrebbe assegnato al server attivo e, in caso di errore, verrà riassegnato al proxy di standby. In questo modo puoi semplicemente connetterti al VIP e tutte le tue query verranno instradate al nodo HAProxy attualmente attivo e funzionante.

Puoi trovare maggiori dettagli su come sono configurati gli interni leggendo il nostro tutorial HAProxy.

Distribuzione di ProxySQL utilizzando ClusterControl

Sebbene HAProxy sia un proxy solido come una roccia e una scelta molto popolare, manca di consapevolezza del database, ad esempio, la divisione in lettura-scrittura. L'unico modo per farlo in HAProxy è creare due backend e ascoltare su due porte, una per le letture e una per le scritture. Questo, di solito, va bene, ma richiede l'implementazione di modifiche nell'applicazione:l'applicazione deve capire cos'è una lettura e cos'è una scrittura, quindi indirizzare quelle query alla porta corretta. Sarebbe molto più semplice connettersi a una singola porta e lasciare che il proxy decida cosa fare dopo - questo è qualcosa che HAProxy non può fare perché quello che fa è solo instradare i pacchetti - non viene eseguita alcuna ispezione dei pacchetti e, soprattutto, non ha comprensione del protocollo MySQL.

ProxySQL risolve questo problema:parla del protocollo MySQL e può (tra le altre cose) eseguire una suddivisione in lettura-scrittura attraverso le sue potenti regole di query e instradare il traffico MySQL in entrata secondo vari criteri. L'installazione di ProxySQL da ClusterControl è semplice:vai alla sezione Gestisci -> Load Balancer e riempi la scheda "Distribuisci ProxySQL" con i dati richiesti.

In breve, dobbiamo scegliere dove verrà installato ProxySQL, quale utente e password di amministrazione dovrebbe avere, quale utente di monitoraggio dovrebbe utilizzare per connettersi ai backend  MySQL e verificarne lo stato e monitorare lo stato. Da ClusterControl, puoi creare un nuovo utente che sarà utilizzato dall'applicazione:puoi decidere il suo nome, la password, l'accesso a quali database sono concessi e quali privilegi MySQL avrà quell'utente. Tale utente verrà creato sia sul lato MySQL che ProxySQL. La seconda opzione, più adatta alle infrastrutture esistenti, consiste nell'utilizzare gli utenti del database esistenti. Devi passare nome utente e password e tale utente verrà creato solo su ProxySQL.

Infine, devi rispondere a una domanda:stai utilizzando transazioni implicite? Con ciò comprendiamo le transazioni avviate eseguendo SET autocommit=0; Se lo usi, ClusterControl configurerà ProxySQL per inviare tutto il traffico al master. Ciò è necessario per garantire che ProxySQL gestisca correttamente le transazioni in ProxySQL 1.3.xe versioni precedenti. Se non utilizzi SET autocommit=0 per creare una nuova transazione, ClusterControl configurerà la suddivisione in lettura/scrittura.

ProxySQL, come ogni proxy, può diventare un singolo punto di errore e deve essere reso ridondante per ottenere un'elevata disponibilità. Ci sono un paio di metodi per farlo. Uno di questi è collocare ProxySQL sui nodi web. L'idea qui è che, la maggior parte delle volte, il processo ProxySQL funzionerà bene e il motivo della sua indisponibilità è che l'intero nodo è andato giù. In tal caso, se ProxySQL è collocato con il nodo web, non è stato fatto molto danno perché nemmeno quel particolare nodo web sarà disponibile.

Un altro metodo consiste nell'usare Keepalived in modo simile come abbiamo fatto nel caso di HAProxy.

Puoi trovare maggiori dettagli su come sono configurati gli interni leggendo il nostro tutorial ProxySQL.