+393713742262
By Assistenza Informatica Firenze/Novembre 11, 2010/Comments are closed
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:
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’;