Tengo una aplicación de chat que ya tiene miles de usuarios. Los servidores están ubicados en EE. UU. (Oregón). Los usuarios están distribuidos en todo el mundo. Empecé a enfrentar un problema relacionado con la respuesta lenta del servidor para los usuarios de la India. También quiero establecer la misma infraestructura en la India. El principal problema es la replicación de MySQL. Se crea un nuevo maestro MySQL en India, pero la replicación maestro-maestro está creando problemas ya que la base de datos contiene tablas con id de incremento automático como clave principal. Según tengo entendido, se está siguiendo el siguiente proceso
Supongamos que el ID de incremento automático ahora es 1000, el tiempo es XXXXXXX000 ms y la latencia entre la región de Oregón y Mumbai es de 200 ms
- En XXXXXXX000 ms, Server1 (US) está agregando una nueva fila en la tabla xyz, y ahora la identificación de incremento automático es 1001.
- Al mismo tiempo XXXXXXX000 ms, Server2 (Ind) está agregando una nueva fila en la tabla xyz, y ahora la identificación de incremento automático es 1001 en la misma tabla.
- Después de 200 ms, la consulta ejecutada en el Servidor 1 (EE. UU.) se replica en el Servidor 2 (Ind) que tiene una identificación de incremento automático como 1001 pero no se pudo ejecutar porque la tabla ya tiene ese valor.
- De manera similar, la consulta ejecutada en el Servidor2 (Ind) se replica en el Servidor1 (EE. UU.), que tiene una identificación de incremento automático como 1001 pero no se pudo ejecutar porque la tabla ya tiene ese valor.
Una de las soluciones que encontré fue establecer valores de auto_increment_increment y auto_increment_offset en ambos hosts como se define http://www.clusterdb.com/mysql-cluster/setting-up-mysql-asynchronous-replication-for-high-availability . Pude replicar eso, pero no estoy seguro de si este es el enfoque correcto para una configuración de producción en AWS EC2. Cualquier sugerencia sera apreciada.
<ul>
<li> Tiene respuesta incorrectas</li>
<li>Las respuestas son largas y difíciles de entender</li>
<li> No tiene una respuesta marcada como correcta</li>
</ul>