【发布时间】:2020-05-29 23:03:10
【问题描述】:
我有一个已经拥有数千名用户的聊天应用程序。服务器位于美国(俄勒冈)。用户分布在全球各地。我已经开始面临与印度用户的服务器响应缓慢有关的问题。我也想在印度建立同样的基础设施。主要问题是 MySQL 复制。在印度创建了一个新的 MySQL 主服务器,但主主复制正在产生问题,因为数据库包含具有自动增量 ID 作为主键的表。据我了解,正在遵循以下流程
假设现在自动增量 ID 为 1000,时间为 XXXXXXX000 毫秒,俄勒冈州和孟买地区之间的延迟为 200 毫秒
- 在 XXXXXXX000 毫秒,Server1(US) 在 xyz 表中添加新行,现在自增 id 为 1001。
- 在XXXXXXX000毫秒的同时,Server2(Ind)在xyz表中增加了一个新行,现在同一张表的自增id为1001。
- 200 毫秒后,在 Server1(US) 上执行的查询被复制到 Server2(Ind),它的自动增量 ID 为 1001,但由于表已经具有该值而无法执行。
- 同样,在 Server2(Ind) 上执行的查询被复制到 Server1(US),它的自动增量 ID 为 1001,但由于表已经具有该值而无法执行。
我发现的解决方案之一是在定义 http://www.clusterdb.com/mysql-cluster/setting-up-mysql-asynchronous-replication-for-high-availability 的两个主机上设置 auto_increment_increment 和 auto_increment_offset 值。 我能够复制它,但我不确定这是否是在 AWS EC2 上进行生产设置的正确方法。任何建议将不胜感激。
【问题讨论】:
-
auto_increment_{increment|offset} 解决了多主机问题之一。
-
印度内部的延迟可以改善,但美国和印度之间的延迟无法改善——无法超过光速。
标签: mysql database amazon-web-services database-design high-availability