背景
我运行(读取:继承)一个与共享托管服务提供商非常相似的网络。基础架构上运行着300-400个站点。多年来,数据库拓扑变得非常分散,因为它是来自webserver->数据库的1对1关系。
问题
问题
我的问题是,如何让我的数据库拓扑尽可能平坦,同时为将来的可扩展性留出空间?
将来我想在我的网络中添加更多地理位置,可以通过'backnet'复制相同的数据库。
在过去,我研究过多主复制,但在auto_increment列冲突等问题上看到了很多问题。
我对企业解决方案持开放态度。与用于Oracle复制的Shareplex产品类似的东西。
无论解决方案是什么,期望应用程序改变以适应这种新设计是不合理的。因此,auto_increment列之类的东西需要保持不变并凝聚整个集群。
目标
我的目标是为每个群集设置一个内部负载均衡的主机名,我可以指向所有应用程序。我
这也为我提供了我目前没有的容错能力。目前,无法从轮换中删除数据库。
像Cassandra和Hadoop这样的应用程序看起来非常类似于我想要实现的目标,但NoSQL不是这些应用程序的选项。
非常感谢任何提示/指针/教程/文档/产品推荐。谢谢。
答案 0 :(得分:2)
在过去,我研究过多主复制,但在auto_increment列冲突等问题上看到了很多问题。
我们在工作中使用多主人。不久之前,使用auto_increment_increment
and auto_increment_offset
修复了auto-inc难题,这使得每个服务器都拥有自己的增量ID模式。只要应用程序没有设计盲目地假设所有ID都是顺序的,它应该可以正常工作。
多主机的真正问题是MySQL 仍然偶尔会破坏二进制日志。这主要是关于不可靠连接的问题,因此如果所有实例都是本地的,则不会有问题。
多主机的另一个问题是它只是不会随着写入而缩放,正如您已经体验过或假设的那样,给出了答案中的一点。 一个主上的所有写入将被其他人复制。即使您正确地分散读取负载,您最终也会遇到I / O瓶颈,只能通过更多硬件,应用程序重新设计或分片(读取:应用程序重新设计)来解决。现在,MySQL已经有了基于行的复制,现在稍微好一些。
如果您需要地理多样性,多主人可以工作。
另请查看DRBD磁盘块级复制系统,该系统现已内置于现代Linux内核中。其他人曾经使用它来复制MySQL和PostgreSQL,尽管我没有任何个人经验。
如果您正在寻找高可用性,或者只是寻找(手动或自动)故障转移,我无法从您的问题中得知。如果只是需要故障转移并且可能有一些停机时间,那么传统的主/从复制可能就足够了。麻烦的是将成为主人的奴隶变回奴隶。