Estou tentando descobrir a melhor topologia de replicação do MySQL, mas não tenho certeza da melhor maneira de apresentá-la.
datacenter A | datacenter B
____ | ____
| | | | |
| AA | | | BA |
|____| | |____|
____ | ____
| | | | |
| AB | | | BB |
|____| | |____|
|
Esses 4 servidores MySQL são conectados em pares com AA
e AB
no Datacenter A, enquanto BA
e BB
estarão localizados no datacenter B. O Datacenter A e o Datacenter B estão em sub-redes diferentes para aumentar a redundância no caso de uma falha do ISP.
AA
e AB
compartilhará um VIP usando keepalived, heartbeat ou similar.
BA
e BB
também compartilhará um VIP diferente usando o mesmo método.
Estou tentando encontrar a melhor maneira de usar a replicação para garantir que todos os servidores sejam mantidos em sincronia. Apenas um servidor de banco de dados será gravado a qualquer momento (manipulado pelo balanceador de carga HAProxy - não ilustrado)
Acho que deve haver replicação Master-Master entre AA <-> BB
, bem como Master-Master entre BA <-> BB
.
Seria melhor usar DRBD entre AA <-> AB
, bem como DRBD entre BA <-> BB
?
Se o DRBD for usado dessa forma, como lidarei com a replicação entre o datacenter A e o datacenter B? Prefiro algo semelhante a mestre-mestre, em que um escravo não precisa ser promovido manualmente, pois isso pode levar algum tempo para respondermos.
O aspecto HA desse problema pode ser mais adequado em serverfault, mas não tenho certeza.