Replicazione MySql configurazione multi-master con autoincrement offset

Dopo l’articolo sulla semplice replicazione di MySql master-slave, passiamo ad una configurazione leggermente più complessa. Nella replicazione di MySql master-slave, il concetto di base è che il master viene usato per tutte le operazioni di scrittura/lettura, mentre lo slave solo per la lettura, vuoi come backup, vuoi come bilanciamento del carico. Con la configurazione per la replica multimaster invece, si ha la possibilità di usare entrambi i server MySql sia in lettura che in scrittura, dato che avviene la sincronizzazione in entrambi i sensi. In pratica ogni server mysql diventa sia master che slave.

A questo punto nasce un problema:
supponiamo che entrambi i server abbiano lo stesso valore di autoincrement per una certa tabella e casualmente scriviamo contemporaneamente su entrambi i server MySql. Quale sarà la riga da replicare? Entrambe! Il risultato è ovvio: abbiamo 2 righe duplicate e la sincronizzazione si ferma.

Nasce così l’esigenza di gestire gli indici in modo diverso e quindi bisogna introdurre il concetto di offset per gli indici auto_increment. Ecco un esempio:

Server MySql-1 :
auto_increment_increment = 2
auto_increment_offset = 1

Server MySql-2:
auto_increment_increment = 2
auto_increment_offset = 2

(ovviamente i valori vanno scelti in base al numero di server che utilizziamo)

Quindi, riassumendo, ciascuno dei server MySql in replica multi-master avrà una configurazione simile a questa (ogni server ha i suoi id, ip, usr e pwd):

auto_increment_increment = 2
auto_increment_offset = 1
server_id = 2
log_bin = /var/log/mysql/mysql-bin.log
master_host = 10.0.0.5
master_user = user_name
master_password = user_pwd
master_port = 3306
log_slave_updates
replicate_same_server_id = 0

Ciao e alla prossima!

One thought on “Replicazione MySql configurazione multi-master con autoincrement offset

  1. emy

    Se aggiungo un terzo server qualsiasi combinazione di auto_increment_increment eauto_increment_offset caschera’ su un numero che appartiene o alla sequenza generata dal server 1 0 dal server 2 (il primo genera tutti i pari il secondo tutti i dispari). Posso al massimo gestire altri due server che mi coprano il sottoinsieme dei numeri interi negativi ma dopo sono completo. O sbaglio qualche cosa?

Lascia una risposta

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

È possibile utilizzare questi tag ed attributi XHTML:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">