Php 数据库拓扑设计混乱

Php 数据库拓扑设计混乱,php,mysql,linux,replication,high-availability,Php,Mysql,Linux,Replication,High Availability,背景 我运行(读:继承)一个网络,其设置与共享主机提供商非常相似。基础设施上运行着300-400个站点。多年来,数据库拓扑结构变得非常零碎,因为它是从webserver->database的1对1关系 问题 应用程序是由第三方设计公司设计的10个应用程序中的9个,这些设计公司已经实现了wordpress/joomla/drupal等 这些数据库有点杂乱无章地分布在6个数据库服务器上。它们不会在任何地方复制 这些应用程序没有单独的数据库句柄概念,可以将插入操作分离到主数据库,将选择操作分离到从数

背景

我运行(读:继承)一个网络,其设置与共享主机提供商非常相似。基础设施上运行着300-400个站点。多年来,数据库拓扑结构变得非常零碎,因为它是从webserver->database的1对1关系

问题

  • 应用程序是由第三方设计公司设计的10个应用程序中的9个,这些设计公司已经实现了wordpress/joomla/drupal等
  • 这些数据库有点杂乱无章地分布在6个数据库服务器上。它们不会在任何地方复制
  • 这些应用程序没有单独的数据库句柄概念,可以将插入操作分离到主数据库,将选择操作分离到从数据库
  • 使用单主机内置mysql复制会造成巨大的瓶颈。插入的数量将很快降低主数据库
问题

我的问题是,如何使我的数据库拓扑尽可能平坦,同时为将来的可伸缩性留出空间

将来,我希望在我的网络中添加更多地理位置,以便在“后台网络”中复制相同的数据库

在过去,我曾研究过多主机复制,但发现了许多问题,如自动增量列冲突

我对企业解决方案持开放态度。类似于用于Oracle复制的Shareplex产品

无论解决方案是什么,期望应用程序改变以适应这种新设计都是不合理的。因此,像auto_increment列这样的东西需要保持不变,并在整个集群中形成凝胶

目标

我的目标是为每个集群提供一个内部负载平衡的主机名,我可以将所有应用程序指向它。我

这也会给我目前没有的容错能力。目前,无法从循环中删除数据库

像Cassandra和Hadoop这样的应用程序看起来与我想要实现的非常相似,但NoSQL不是这些应用程序的选项

非常感谢您提供任何提示/指南/教程/文档/产品建议。多谢各位

在过去,我曾研究过多主机复制,但发现了许多问题,如自动增量列冲突

我们在生产工作中使用多主机。auto inc的难题在不久前已经解决,它允许每个服务器都有自己的增量ID模式。只要应用程序的设计不是盲目地假设所有ID都是顺序的,它就可以正常工作

多主机的真正问题是MySQL仍然偶尔会破坏二进制日志。这主要是由于连接不可靠造成的问题,因此如果所有实例都是本地实例,则不会出现问题

multi-master的另一个问题是,如果答案中给出了一个点,它就不能像您已经经历或假设的那样随写入进行扩展。一台主机上的所有写入操作都必须由其他主机复制。即使正确地分配读取负载,最终也会遇到I/O瓶颈,这只能通过更多硬件、应用程序重新设计或分片(读取:应用程序重新设计)来解决。现在MySQL有了基于行的复制,这稍微好一些

如果您需要地理多样性,多主机可以工作

此外,还可以研究一个磁盘块级复制系统,该系统现在已内置到现代Linux内核中。以前,它被其他人用来复制MySQL和PostgreSQL,但我个人对此没有任何经验

我无法从您的问题中判断您是在寻找高可用性,还是只是在寻找(手动或自动)故障转移。如果您只需要故障转移,并且可能会有一些停机时间,那么传统的主/从复制可能就足够了。麻烦在于把一个成为主人的奴隶变回奴隶