Mysql
 sql >> Database >  >> RDS >> Mysql

Bilanciamento del carico del database nel cloud - MySQL Master Failover con ProxySQL 2.0:prima parte (distribuzione)

Il cloud offre ambienti molto flessibili con cui lavorare. Puoi facilmente ridimensionarlo aggiungendo o rimuovendo nodi. Se è necessario, puoi facilmente creare un clone del tuo ambiente. Questo può essere utilizzato per processi come aggiornamenti, test di carico, ripristino di emergenza. Il problema principale che devi affrontare è che le applicazioni devono connettersi ai database in qualche modo e le configurazioni flessibili possono essere complicate per i database, specialmente con le configurazioni master-slave. Fortunatamente, ci sono alcune opzioni per semplificare questo processo.

Un modo è utilizzare un proxy di database. Ci sono diversi proxy tra cui scegliere, ma in questo post del blog useremo ProxySQL, un noto proxy disponibile per MySQL e MariaDB. Mostreremo come utilizzarlo per spostare in modo efficiente il traffico tra i nodi MySQL senza un impatto visibile per l'applicazione. Spiegheremo anche alcuni limiti e svantaggi di questo approccio.

Configurazione iniziale del cloud

All'inizio, discutiamo della configurazione. Utilizzeremo le istanze AWS EC2 per il nostro ambiente. Poiché stiamo solo testando, non ci interessa davvero l'alta disponibilità oltre a ciò che vogliamo dimostrare essere possibile:modifiche principali senza interruzioni. Pertanto utilizzeremo un singolo nodo dell'applicazione e un singolo nodo ProxySQL. Come da buone pratiche, collocheremo ProxySQL sul nodo dell'applicazione e l'applicazione sarà configurata per connettersi a ProxySQL tramite socket Unix. Ciò ridurrà il sovraccarico relativo alle connessioni TCP e aumenterà la sicurezza:il traffico dall'applicazione al proxy non lascerà l'istanza locale, lasciando solo la connessione ProxySQL -> MySQL da crittografare. Anche in questo caso, poiché si tratta di un semplice test, non imposteremo SSL. Negli ambienti di produzione vuoi farlo, anche se utilizzi VPC.

L'ambiente apparirà come nel diagramma seguente:

Come applicazione, utilizzeremo Sysbench, un programma di benchmark sintetico per MySQL . Ha un'opzione per disabilitare e abilitare l'uso delle transazioni, che useremo per dimostrare come ProxySQL le gestisce.

Installazione di un cluster di replica MySQL utilizzando ClusterControl

Per rendere la distribuzione rapida ed efficiente, utilizzeremo ClusterControl per distribuire la configurazione di replica MySQL per noi. L'installazione di ClusterControl richiede solo un paio di passaggi. Non entreremo nei dettagli qui, ma dovresti aprire il nostro sito Web, la registrazione e l'installazione di ClusterControl dovrebbe essere abbastanza semplice. Tieni presente che devi configurare SSH senza password tra l'istanza ClusterControl e tutti i nodi che gestiremo con essa.

Una volta installato ClusterControl, puoi accedere. Ti verrà presentata una procedura guidata di distribuzione:

Dato che abbiamo già istanze in esecuzione nel cloud, quindi andremo semplicemente con Opzione "Distribuisci". Ci verrà presentata la seguente schermata:

Sceglieremo MySQL Replication come tipo di cluster e dobbiamo fornire connettività dettagli. Può essere una connessione tramite utente root o può anche essere un utente sudo con o senza password.

Nel passaggio successivo, dobbiamo prendere alcune decisioni. Useremo Percona Server per MySQL nella sua ultima versione. Dobbiamo anche definire una password per l'utente root sui nodi che implementeremo.

Nel passaggio finale dobbiamo definire una topologia - andremo con quello che abbiamo proposto all'inizio:un padrone e tre schiavi.

ClusterControl avvierà la distribuzione:possiamo tenerne traccia nella scheda Attività, come mostrato nello screenshot qui sopra.

Una volta completata la distribuzione, possiamo vedere il cluster nell'elenco dei cluster:

Installazione di ProxySQL 2.0 utilizzando ClusterControl

Il prossimo passo sarà distribuire ProxySQL. ClusterControl può farlo per noi.

Possiamo farlo in Gestisci -> Load Balancer.

Dato che stiamo solo testando le cose, riutilizzeremo l'istanza ClusterControl per ProxySQL e Sysbench. Nella vita reale probabilmente vorresti usare il tuo server delle applicazioni "reale". Se non lo trovi nel menu a tendina, puoi sempre scrivere manualmente l'indirizzo del server (IP o nome host).

Vogliamo anche definire le credenziali per il monitoraggio e l'amministratore dell'utente. Abbiamo anche ricontrollato che verrà distribuito ProxySQL 2.0 (puoi sempre cambiarlo in 1.4.x se necessario).

Nella parte inferiore della procedura guidata definiremo l'utente che sarà creato sia in MySQL che in ProxySQL. Se hai un'applicazione esistente, probabilmente vorrai utilizzare un utente esistente. Se utilizzi numerosi utenti per la tua applicazione, puoi sempre importarne il resto in un secondo momento, dopo che ProxySQL sarà distribuito.

Vogliamo assicurarci che tutte le istanze MySQL siano configurate in ProxySQL. Utilizzeremo transazioni esplicite, quindi impostiamo l'interruttore di conseguenza. Questo è tutto ciò che dovevamo fare:il resto è fare clic sul pulsante "Deploy ProxySQL" e lasciare che ClusterControl faccia il suo dovere.

Al termine dell'installazione, ProxySQL apparirà nell'elenco dei nodi nel grappolo. Come puoi vedere nello screenshot qui sopra, ha già rilevato la topologia e i nodi distribuiti tra i gruppi host di lettori e scrittori.

Installazione di Sysbench

Il passaggio finale sarà creare la nostra "applicazione" installando Sysbench. Il processo è abbastanza semplice. Per prima cosa dobbiamo installare i prerequisiti, le librerie e gli strumenti necessari per compilare Sysbench:

[email protected]:~# apt install git automake libtool make libssl-dev pkg-config libmysqlclient-dev

Allora vogliamo clonare il repository sysbench:

[email protected]:~# git clone https://github.com/akopytov/sysbench.git

Infine vogliamo compilare e installare Sysbench:

[email protected]:~# cd sysbench/

[email protected]:~/sysbench# ./autogen.sh && ./configure && make && make install

Ecco fatto, Sysbench è stato installato. Ora dobbiamo generare alcuni dati. Per questo, all'inizio, dobbiamo creare uno schema. Ci collegheremo al ProxySQL locale e tramite esso creeremo uno schema 'sbtest' sul master. Tieni presente che abbiamo utilizzato il socket Unix per la connessione con ProxySQL.

[email protected]:~/sysbench# mysql -S /tmp/proxysql.sock -u sbtest -psbtest

mysql> CREATE DATABASE sbtest;

Query OK, 1 row affected (0.01 sec)

Ora possiamo usare sysbench per popolare il database con i dati. Ancora una volta, utilizziamo il socket Unix per la connessione con il proxy:

[email protected]:~# sysbench /root/sysbench/src/lua/oltp_read_write.lua --threads=4 --events=0 --time=3600 --mysql-socket=/tmp/proxysql.sock --mysql-user=sbtest --mysql-password=sbtest --tables=32 --report-interval=1 --skip-trx=on --table-size=100000 --db-ps-mode=disable prepare

Una volta che i dati sono pronti, possiamo procedere ai nostri test.

Conclusione

Nella seconda parte di questo blog, discuteremo della gestione delle connessioni, del failover e delle sue impostazioni da parte di ProxySQL che possono aiutarci a gestire lo switch principale in un modo che sia il meno invadente per l'applicazione.