我们有两个不同的网站,一个在亚洲数据中心托pipe,称为asiadata.com,另一个在欧洲数据中心托pipe,名为europedata.com。 目前我们只有一个主数据库服务器在欧洲数据中心托pipe,它负责所有这两个网站的写入和复制在欧洲和亚洲数据中心的底层奴隶。这两个应用程序都写在公共数据库上。
我们已经从asiadata.com用户抱怨网站缓慢浏览和发布,并立即在asiadata.com上看不到的东西。 挖掘之后,我们发现数据库是罪魁祸首,因为它需要首先在eurpose数据中心主服务器上写入数据,并且需要返回亚洲数据中心数据库服务器从属服务器以同步数据以及在eurpose数据中心从服务器上。 由于亚洲和欧洲之间的地理距离以及networking延迟,所有这些过程都需要时间。
现在我们决定通过在亚洲和欧洲的数据中心各有多个写服务器(主服务器)来解决这个问题,这样每个站点将在本地写数据,而且两个主服务器也将成为彼此的奴隶。 而且每个主数据中心只负责在其自己的数据中心上复制数据中心上的数据。 为了解决冲突,我们将在代码级别上进行控制。 例如为了避免相同的用户名和其他唯一约束。 希望这可以解决脑裂情况,这将确保两位主人都不会破裂。
有人可以让我知道,如果我错过了多个写主人或任何分裂复制数据库级别的情况? 我认为这将是提高我的应用程序性能的最好方法,但是由于MySQL社区不鼓励多个写主人,所以我害怕构build这个解决scheme。 还有90%的数据库表是MyISAM,复制是单线程的。 恐怕两位大师可能不会因为表级locking而产生最佳性能,因为两位大师同时也是奴隶。
还有没有任何自动化工具可用于解决冲突并解决两个主人之间的复制问题?
总体来说,请评论多硕士是最好的解决scheme,还是有更好的select。
一个mysql复制节点既可以是主节点,也可以是从节点 – 它不能同时为两者。 但是没有任何东西可以阻止您将写入发送到某些节点(但是设置自动增量以便任何节点都可以处理插入/更新)。
MySQL社区不鼓励多写主人
IME,主 – 主复制与更新都正常工作。 你只需要知道geogpraphically拆分数据库操作不一定会发生在相同的序列(即永远不会删除数据,避免改变主键/外键在实际的情况下这样做)。 但是,对于公告板/博客types的系统,这应该没有问题。
为了解决冲突,我们将在代码级别上进行控制。 例如为了避免相同的用户名和其他唯一约束
这些场景应该是非常罕见的,并且是可预测的 – 使用跨越互斥锁来locking该数据值的所有节点。