如何使用多台机器扩展MySQL?

27

我有一个运行LAMP的Web应用程序。我们最近负载增加,现在正在寻找解决方案来扩展。扩展Apache相当容易,我们只需要使用多台机器托管它并循环调度传入的流量。

然而,每个Apache实例将与MySQL通信,并最终导致MySQL过载。在这种设置中如何跨多台机器扩展MySQL?我已经查看了这个,但具体来说,我们需要从数据库中立即获取更新,因此我不认为复制是一个好的策略?同时希望这可以通过最小的代码更改来完成。

附:我们大约有1:1的读写比例。

4个回答

25

只有两种策略:复制和分片。当您的写入量少而读取量大时,通常会采用复制策略,这样您可以将读取流量重定向到多个从服务器上,但是可能会导致随着时间的推移产生大量复制流量和不一致性的概率。

通过分片,您可以将数据库表分散在多台计算机(称为功能分片),这使得连接特别困难。如果这已经不适合您的需求,您还需要将数据行分散在多台计算机上,但这并不容易实现,还需要在应用程序和数据库之间实现一个分片层。

文档导向型数据库或列数据库可以替您完成此工作,但它们目前针对的是OLAP而不是OLTP进行了优化。


2

根据应用程序后端(即如何处理PK,事务和插入ID),您可以考虑使用具有不同自动增量设置的主-主复制。这可能有些棘手,需要进行彻底的测试,但它可以工作。

此外,在新的MySQL 5.6中,有一个全局事务标识符(GTID),通常在保持复制同步方面非常有帮助,特别是在这种情况下。


1

0

好吧...祝你好运,将所有这些写操作扩展到真正的大规模。数据库引擎成为瓶颈,锁定和缓冲区管理等问题太多了...

我发现唯一真正有效的方法是进行扩展,分片,不幸的是MySQL没有提供“开箱即用”的分片功能(像某些NoSQL数据库如Mongo一样)。ScaleBase(免责声明:我在那里工作)是一个完整的扩展解决方案制造商,如果您愿意,可以称之为“自动分片机”。ScaleBase会分析您的数据和SQL流,将数据分割到DB节点上,路由命令并在运行时聚合结果 - 所以您不必担心!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接