Quanti di voi hanno mai sentito parlare di MySQL? Scommetto tutti. Di repliche o slave? Credo in molti, ma quanti conoscono le repliche circolari?

Una replica circolare è in sostanza una configurazione master-slave di mysql che ci permette di usare entrambi i nodi come master e quindi eseguire le query che modificano i dati su entrambi i nodi. Vediamo come è possibile realizzarla.

Il trucchetto consiste nel configurare un nodo come slave dell’altro, l’esempio che faremo è con 2 nodi ma il gioco funziona anche con più nodi.Come esempio assumiamo che i nostri nodi si chiamino sql01 e sql02 (che fantasia) e abbiano rispettivamente indirizzi ip 192.168.0.1 e 192.168.0.2, assumiamo inoltre che abbiate già fatto l’installazione di mysql e la configurazione single-node su entrambi i nodi.

Per configurare la replica andiamo ad aggiungere le seguenti linee ai file di configurazione di entrambi gli hosts, adattando i parametri, seguendo il nostro esempio su sql01 andremo ad aggiungere:

#Master settings
server-id = 1241532311
log-bin = /opt/mysql/log/replicazione/master/progr/mysql-bin
max_binlog_size = 250M
log-bin-index = /opt/mysql/log/replicazione/master/index/mysql-bin-index

#Slave Settings
master-host = 192.168.0.2
master-user = replica_user
master-password = replica_pwd
master-connect-retry = 30
relay-log = /opt/mysql/log/replicazione/slave/progr/relay-log
max_relay_log_size = 250M
relay-log-index = /opt/mysql/log/replicazione/slave/index/relay-log-index
relay-log-info = /opt/mysql/log/replicazione/slave/index/relay-log.info
master-info-file = /opt/mysql/log/replicazione/slave/index/master.info

skip-slave-start

auto-increment-increment = 2
auto-increment-offset = 1

Mentre su sql02:

#Master settings
server-id = 1241532312
log-bin = /opt/mysql/log/replicazione/master/progr/mysql-bin
max_binlog_size = 250M
log-bin-index = /opt/mysql/log/replicazione/master/index/mysql-bin-index

#Slave Settings
master-host = 192.168.0.1
master-user = replica_user
master-password = replica_pwd
master-connect-retry = 30
relay-log = /opt/mysql/log/replicazione/slave/progr/relay-log
max_relay_log_size = 250M
relay-log-index = /opt/mysql/log/replicazione/slave/index/relay-log-index
relay-log-info = /opt/mysql/log/replicazione/slave/index/relay-log.info
master-info-file = /opt/mysql/log/replicazione/slave/index/master.info

skip-slave-start

auto-increment-increment = 2
auto-increment-offset = 2

Come potete vedere le differenze tra i 2 nodi sono solo su 3 variabili, andiamo comunque a commentarle tutte.

server-id:
Deve essere un intero compreso tra 0 e (2^32)-1 univoco per ogni nodo partecipante all’installazione, come vedete tra sql01 e sql02 sono diversi, potete scegliere il numero che volete nel range.

log-bin:
Si tratta del percorso e del prefisso del nome del file dove vengono salvate le query che modificano i dati da parte del master per essere inviate allo slave e replicate, nel nostro caso i file si chiameranno mysql-bin.001 mysq-bin.002 e così via. Dovete adattare il percorso alla vostra installazione ma è buona norma mantenere i log in una partizione o in un Logical Volume dedicati.

max_binlog_size:
La massima dimensione che un binlog file può raggiungere prima di essere ruotato, ovvero mysql-bin.001 crescerà fino a questo valore prima che venga creato mysql-bin.002. 250M sono una buona dimensione per un’ installazione su server attuali.

log-bin-index:
Si commenta da solo, l’indice dei binary logs ;) .

master-host:
L’indirizzo IP dell’host master, nel nostro esempio sql01 ha l’ip di sql02 e viceversa.

master-user e master-password:
Le credenziali che il processo slave utilizzerà per autenticarsi al processo master, su entrambi i nodi dovete creare l’utente con la password che andrete ad indicare ed assicurarvi che abbiano il privilegio “REPLICATION SLAVE“. Questo privilegio è necessario e sufficiente, quindi per ragioni di sicurezza è bene non concederne altri all’utente in questione.

master-connect-retry:
Il numero di tentavi massimi che lo slave effettuerà per contattare il master in caso di problemi sulla rete, dopodiche verrà getta la spugna e sarà necessario un riavvio manuale, 30 sono un buon numero, difficilmente si tratterà di un problema momentaneo o vi è morto un server o uno switch :D .

relay-log:
I bin-log ricevuti dal master prima di essere esguiti vengono salvati qui dallo slave, vale lo stesso discorso dei bin-log è buona norma che risiedano su partizione o logical volume dedicato.

relay-log-index, relay-log-info, master-info-file:
In questi file lo slave mantiene le informazioni sullo stato di lettura dei bin-log e di esecuzione dei relay.

skip-slave-start:
Molto utile in fase di configurazione andremo a commentarla prima della messa in produzione, evita lo start del processo slave all’avvio del demone mysql, il processo lo starteremo a mano con uno “SLAVE START” per poter verificare eventuali errori.

auto-increment-increment e auto-increment-offset:
Li chiameremo AII e AIO, sono critici per il buon funzionamento della replica circolare in caso di presenza di tabelle con campi auto-increment.Come vedete il campo AII è valorizzato a 2 su entrambi gli host e il campo AIO a 1 su sql01 e 2 su sql02. Questo fa si che in presenza di campi auto-increment si salti di 2 in in 2 invece che di 1 in un 1 partendo in un caso da 1 e in caso da 2. Il risultato è che su sql01 verranno inserito solo id dispari mentre su sql02 solo id pari, questo previene conflitto di id in caso che 2 query, che eseguono una insert sulla stessa tabella con il campo auto-increment, arrivino contemporaneamente o quasi su sql01 e sql02.

Terminata la configurazione fate partire i demoni e su entrambi dati un bello “SLAVE START” controllate con “SHOW SLAVE STATUS” che entrambe le repliche siano running, in caso di errori i file di LOG sono vostri amici.
Importante da non dimenticare e necessario che entrambi i database siano allienati con i dati prima di far partire le repliche, se si tratta di nuove installazioni nessun problema, se invece state aggiungendo una replica ad un DB già in produzione e necessario allineare i dati prima di far partire le repliche, ma questo merita un articolo tutto suo…

A presto e buone repliche a tutti.

Lascia un Commento

Devi aver fatto il login per inviare un commento

Page 1 of 11