By 11 Novembre 2010 0 Comments

Replica MYSQL di tipo MULTI-Master

Per capire bene questo tipo di replica….è necessario avere (almeno!) chiara la replica di tipo Master-Slave. In caso negativo può essere consultata QUI

La replicazione MultiMaster può essere molto più utile (e ganza!) di quella Master-Slave in quanto si possono utilizzare indipendentemente i server dei database che pensano da soli a sincronizzarsi in entrambi i modi 1>2 oppure 2 >1. Bisogna prestare ovviamente un pò di attenzione…perchè se si fa un super DROP su uno dei server N del nodo (che possono essere anche 3-4)…ovviamente viene replicato anche a tutti gli altri…

La parte più comoda della struttura consiste nel fatto che, in caso di Down, nessuno sarà impegnato a promuovere il server Slave come master, ma tutto continuerà a lavorare in modo trasparente.

Ovviamente c’è un nota da tenere presente con molta attenzione : la faccenda di auto_increment. Supponiamo che due server facciano contemporaneamente un inserimento : questo inserimento viene marcato su entrambi i server con ID = 5. Al momento della sincronizzazione…qual’è il record con ID =5 che viene preso per buono?? Tutti e due.
Questo però implica la presenza di un record DUPLICATO e tutta la sincronizzazione si ferma, producendo un messaggio di errore!!

Per questo motivo si utilizza la variabile auto_increment, esempio:
Server1 :
auto_increment_increment = 2
auto_increment_offset = 1

Server 2:
auto_increment_increment = 2
auto_increment_offset = 2

questa variabile settata su ogni server dice che ognuno deve contare a modo suo. Quindi in caso di inserimento, il server1 produrra indici di tipo 2,4,6,8, ecc… mentre il server2 produrrà indici di tipo 3,6,9, ecc… e quindi non si pesteranno mai i piedi.
Ne nascerà una soluzione di questo tipo :

[node A] select * from x;
+—–+——+
| id | c |
+—–+——+
| 1 | aaa |
| 11 | bbb |
| 21 | ccc |
+—–+——+

[node B] select * from x;
+—–+——+
| id | c |
+—–+——+
| 2 | xxx |
| 12 | yyy |
| 22 | zzz |
+—–+——+

A questo punto possiamo preparare i file my.ini (o my.cnf) per la configurazione MultiMaster.

Sul Server1 aggiungeremo questa parte:

master-host = srv2
master-user = srv1rpl
master-password = pippo
master-port = 3306
log-slave-updates
replicate-same-server-id = 0

Sul Server2 aggiungeremo questa parte:

master-host = srv1
master-user = srv2rpl
master-password = pippo
master-port = 3306
log-slave-updates
replicate-same-server-id = 0

In allegato ci sono i file CNF del server1 e server2 per prendere spunto:

File Server1
File Server2

Ad ogni modo per fare un suntino.
Su ognuno dei due server ci vuole questa parte:

# REPLICA MULTIMASTER———————————
auto_increment_increment = 2
auto_increment_offset = 1
server-id = 2
log-bin
master-host = 192.168.1.11
master-user = replica
master-password = copiami
master-port = 3306
log-slave-updates
replicate-same-server-id = 0
# REPLICA MULTIMASTER———————————

ovviamente a ognuno il suo server Id e l’ip dell’altro.
E a ognuno bisogna dare questo comando:

GRANT REPLICATION SLAVE ON *.* TO ‘replica’@’%’ IDENTIFIED BY ‘copiami’;

Posted in: Mysql

About the Author:

shared on wplocker.com