Non è possibile ottenere molte prestazioni dalla replica del database su due master. Tuttavia, c'è un bel po' di failover se la codifica dell'applicazione è corretta.
La configurazione Master-Master è essenzialmente la stessa della configurazione Slave-Master, ma ha entrambi gli Slave avviati e un'importante modifica ai file di configurazione su ogni box.
Master MySQL 1:
auto_increment_increment = 2
auto_increment_offset = 1
Master MySQL 2:
auto_increment_increment = 2
auto_increment_offset = 2
Questi due parametri assicurano che quando due server si contendono una chiave primaria per qualche motivo, non duplichino e interrompano la replica. Invece di aumentare di 1, qualsiasi campo di incremento automatico aumenterà per impostazione predefinita di 2. Su una casella inizierà l'offset da 1 ed eseguirà la sequenza 1 3 5 7 9 11 13 ecc. Sulla seconda casella inizierà l'offset da 2 e corri lungo 2 4 6 8 10 12 ecc. Dal test corrente, l'autoincremento sembra prendere il numero gratuito successivo, non uno che è rimasto prima.
Es. Se il server 1 inserisce i primi 3 record (1 3 e 5) quando il server 2 inserisce il 4, gli verrà assegnata la chiave di 6 (non 2, che rimane inutilizzata).
Una volta impostato, avvia entrambi come Slave.
Quindi per verificare che entrambi funzionino correttamente, connettiti a entrambe le macchine ed esegui il comando SHOW SLAVE STATUS
e dovresti notare che entrambi Slave_IO_Running
e Slave_SQL_Running
entrambi dovrebbero dire "SI" su ogni casella.
Quindi, ovviamente, crea alcuni record in una tabella e assicurati che una casella inserisca solo chiavi primarie con numero dispari e l'altra incrementi solo quelle con numero pari.
Quindi esegui tutti i test per assicurarti di poter eseguire tutte le applicazioni standard su ciascuna scatola replicandole sull'altra.
È relativamente semplice una volta avviato.
Ma come è stato detto, MySQL lo scoraggia e consiglia di prestare attenzione a questa funzionalità durante la scrittura del codice dell'applicazione.
Modifica: Suppongo che sia teoricamente possibile aggiungere più master se ci si assicura che gli offset siano corretti e così via. Tuttavia, potresti più realisticamente aggiungere alcuni slave aggiuntivi.