我们有两个不同的网站,一个是托管在亚洲的数据中心叫做asiadata.com,另一个是托管在欧洲的数据中心叫做it europedata.com。目前,我们只有一个主数据库服务器,托管在欧洲的数据中心,它负责两个网站的所有写作,并在欧洲和亚洲的底层奴隶上进行复制,datacenter.Also和应用程序都是在公共数据库上编写的。
我们从asiadata.com用户抱怨网站浏览和张贴速度缓慢,而且asiadata.com上看不到任何东西。经过挖掘,我们发现数据库是罪魁祸首,因为它需要先在欧洲的数据中心主服务器上写入,然后再回到亚洲数据中心的数据库服务器上来同步数据,还需要返回到欧洲的数据中心奴隶上。所有这些过程都需要时间,因为亚洲和欧洲之间的地理距离和网络延迟。
现在,我们决定通过在亚洲和欧洲的数据中心上设置多个写服务器(主服务器)来解决这个问题,这样每个站点都将在本地写入数据,并且这两个主服务器也将是彼此的奴隶。每个主都只负责在它自己的数据中心上复制数据,只在底层的奴隶上。为了解决冲突,我们将在代码级别上控制它。例如,为了避免相同的用户名和其他唯一的约束。希望,这将解决分裂的大脑情况,这将确保两位大师都不会崩溃。
请有人告诉我,如果我错过了多个写主程序或数据库级别上任何破坏复制的场景,可以告诉我吗?我认为这将是提高我的应用程序性能的最好方法,但同时我也害怕构建这个解决方案,因为MySQL社区不鼓励多个编写主程序。另外,90%的数据库表是MyISAM,复制是单线程的.由于表级锁定,两位主从都可能无法产生最好的性能,因为两位主程序同时也将是奴隶。
另外,是否有任何自动化工具可用于解决两个主程序之间的冲突和复制问题?
总之,请评论多主是最好的解决方案,或有任何更好的选择。
谢谢。
谢谢你的建议。但还有很多问题。
是否有任何自动工具可用于解决两个主程序之间的冲突和复制问题?
只要数据库数据相关,我们就必须将两个数据中心数据同步到彼此(亚洲和欧洲)。我们不能将数据限制在它相关的数据中心。
发布于 2011-12-05 21:52:23
我建议采用多机设置,只需将亚洲的数据限制在一位主计算机上,而将欧洲的数据限制在另一位主计算机上。对于共享数据库,请确保充分使用自动_增量_增量和自动_增量_偏移。此外,请确保只将亚洲的数据写入亚洲DC的共享数据库,同样也要写入欧洲的共享数据库。
如果没有必要保留MyISAM (如全文索引或大量读取),我建议将所有内容转换为InnoDB。这样,如果服务器崩溃,那么崩溃恢复将使数据库处于一致状态。使用MyISAM,表可以保持崩溃状态,修复这些表可能会导致一行或多行数据的消失。
您应该通过实现DRBD来加强HA设置。每个DC都应该设置DRBD。有什么福利待遇?
为了最大限度地减少地理距离上MySQL复制的数据丢失,我建议使用更小的二进制日志。默认情况下,二进制日志/中继日志为1G (最大值_联木_大小和最大值_继电器_日志_大小)。您可以使这些值小得多。我是从PostgreSQL获得这个想法的,因为默认情况下,WAL文件是16M。这将创建更多的日志文件,但这些日志文件将在代理从服务器上更快地关闭和完成。如果不使用它,则应该升级到MySQL 5.5,因为它具有半同步复制。可以对其进行调优,以检测具有某种粒度的心跳超时。
发布于 2011-12-05 21:36:43
这听起来像是钨复制器的候选人。
https://dba.stackexchange.com/questions/8798
复制相似问题