Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL Master To Master Replica

La replica viene utilizzata per mantenere sincronizzati due o più database replicando le modifiche DML/statement o set di dati eseguite da un server master a uno o più server slave.

Esistono tre metodi per registrare i dati per la replica:La replica basata su istruzioni (SBR) replica le istruzioni SQL che modificano i dati. La replica basata su riga (RBR) replica solo le righe modificate. La replica mista (MBR) è la replica basata su istruzioni e la replica basata su riga. Precedentemente per tutte le versioni di mysqld, la replica basata su istruzioni è il metodo di offlogging predefinito. Quasi tutti i motori di archiviazione supportano tutti e tre gli approcci alla registrazione dei dati.

La replica MySQL Master-Master aumenta la scalabilità del sistema e migliora le prestazioni riducendo il sovraccarico del backup e fornendo ridondanza per l'applicazione attiva. Se non ottieni quello che c'è, è proprio come due server MySQL che si tengono aggiornati a vicenda. Con la replica, due server MySQL separati agiscono come un cluster. Il clustering di database è adatto principalmente per configurazioni di applicazioni ad alta disponibilità

La replica master/master si ottiene impostando ServerA come slave di ServerB e configurando ServerB come slave di ServerA.

Presupposto: Questo articolo non fornisce i passaggi per l'installazione del server MySQL, presumo che il server Mysql (istanza singola) sia stato installato su entrambi i server:

Per configurare un master MySQL per la replica master sui server Linux abbiamo bisogno di due server, le informazioni sono come le seguenti:

server A :192.168.1.2

server B: 192.168.1.3

OS: RHL 6.4 x86_64

Server MySQL: 5.6.17 x86_64

Controlli preliminari:

Disabilita il firewall su entrambi i server:

service iptables stop
chkconfig iptables off
service iptables status

Entrambi i server dovrebbero essere accessibili tra loro, per verificare l'accessibilità esegui il ping di ciascun server.

Commenta l'attributo bind-address o impostalo su (bind-address=0.0.0.0) nel file my.sandbox.cnf o my.cnf su entrambi i server. Ho menzionato my.sandbox.cnf, questo nel caso tu stia utilizzando MySQL::Sandbox

In primo luogo, abiliteremo la replica dal server B ad A

PASSAGGIO 1:
SUL server A:192.168.1.2

modifica my.sandbox.cnf o my.cnf e aggiungi sotto i valori server-id dovrebbe essere> 0; nel caso in cui non conosci la posizione del file my.cnf usa questo comando su os shell “mysql –help | grep my.cnf”, di solito my.cnf si trova nella directory /etc/

server-id=1
replicate-same-server-id=0
auto-increment-increment=2
auto-increment-offset=1
relay-log=serverA-relay-bin
relay-log-index=serverA-relay-bin.index
master-info-file=mysqk-master.info
relay-log-info-file=serverA-relay-log.info
log-bin=mysql-bin

SUL server B:192.168.1.3

modifica my.sandbox.cnf o my.cnf e aggiungi sotto i valori server-id dovrebbe essere> 0;

server-id=2
replicate-same-server-id=0
auto-increment-increment=2
auto-increment-offset=2
relay-log=serverB-relay-bin
relay-log-index=serverB-relay-bin.index
master-info-file=mysqk-master.info
relay-log-info-file=serverB-relay-log.info
log-bin=mysql-bin

PASSAGGIO 2:
SUL server A:192.168.1.2
create user 'syncstndby' identified by 'warsaw';
grant replication slave on *.* to 'syncstndby'@'192.168.1.3'  identified by 'warsaw';
flush privileges;
Sul server B:192.168.1.3
create user 'syncstndby' identified by 'warsaw';
grant replication slave on *.* to 'syncstndby'@'192.168.1.2'  identified by 'warsaw';
flush privileges;
PASSAGGIO 3:
SUL SERVER B:192.168.1.3
mysql > SHOW GLOBAL VARIABLES LIKE 'PORT';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 5617 |
+---------------+-------+
1 row in set (0.00 sec)


mysql > show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      423 | |             | |
+------------------+----------+--------------+------------------+-------------------+

SUL SERVER A:192.168.1.2
CHANGE MASTER TO 
MASTER_HOST='192.168.1.3',
MASTER_USER='syncstndby',
MASTER_PASSWORD='warsaw',
MASTER_PORT= 5617, 
MASTER_LOG_FILE='mysql-bin.000002',  
MASTER_LOG_POS=423; 

Ora penserai da dove sto selezionando i valori per questi attributi, non preoccuparti, lo sto spiegando, scegli il valore MASTER_PORT  dalla query sopra (MOSTRA VARIABILI GLOBALI COME 'PORT') in questo caso, la nostra porta è 5617 , Scegli il valore MASTER_LOG_FILE dalla colonna File nella query precedente ("show master status;") ovvero Mysql-bin.000002), Scegli il valore MASTER_LOG_POS dalla posizione della colonna nella query precedente che è 423)

PASSAGGIO 4:

Ora puoi avviare lo slave

mysql>start salve:
mysql> show slave status \G;

ORA la replica da B ad A è stata abilitata

PASSAGGIO 5 

In questo passaggio testeremo la replica dal server B ad A:

SU MASTER (server B):192.168.1.3
show schemas;
create database reptest;
create table reptest.simples (id int not null primary key) ;
insert into reptest.simples values (999),(1),(2),(3);
IN SLAVE:192.168.1.2 (server A)
show schemas;
use reptest;
select * from reptest.simples;

Ora abiliteremo la replica dal server A al server B

PASSAGGIO 6:
SUL SERVER A:192.168.1.2
mysql > SHOW GLOBAL VARIABLES LIKE 'PORT';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 5617 |
+---------------+-------+
1 row in set (0.00 sec)

mysql > show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 |      120 | |             | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

SUL SERVER B:192.168.1.3
CHANGE MASTER TO 
MASTER_HOST='192.168.1.2',
MASTER_USER='syncstndby',
MASTER_PASSWORD='warsaw',
MASTER_PORT= 5617, 
MASTER_LOG_FILE='mysql-bin.000004', 
MASTER_LOG_POS=120; 

Scegli il valore MASTER_PORT  dalla query sopra (MOSTRA VARIABILI GLOBALI COME 'PORT') in questo caso, la nostra porta è 5617, scegli il valore MASTER_LOG_FILE dalla colonna File nella query sopra ("mostra lo stato master;") che è Mysql-bin .000004), scegli il valore MASTER_LOG_POS dalla posizione della colonna nella query precedente che è 120)

Ora puoi avviare lo slave

mysql> show slave status \G;
mysql>start salve:
mysql> show slave status \G;

PASSAGGIO 7

OK, quindi il nostro ambiente è impostato, ora testeremo se il nostro ambiente funziona o meno.

ON 192.168.1.2 (server A)
insert into reptest.simples values (777),(41),(15),(61);

Qui non abbiamo creato la tabella semplice nel reptest del nome DB poiché era già stata replicata sul server A quando è stato creato il reptest del DB e la tabella sul server B.

ON 192.168.1.3  (Server B)
use reptest;
select * from reptest.simples;

Evviva!! puoi vedere che tutto è impostato e la nostra replica da Master a Master è impostata.

AVVISO: Non è intelligente che la tua applicazione esegua DML su entrambi i server contemporaneamente. La scrittura su entrambi i server contemporaneamente consente un failover veloce ragionevolmente durevole per un'elevata disponibilità, ma non offre miglioramenti delle prestazioni. Entrambi i server devono eseguire tutti i DML, indipendentemente dal fatto che il DML provenga direttamente dai client o provenga tramite replica