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

时间:2009-04-24 14:36:44

标签: mysql performance scaling

我有一个运行LAMP的网络应用程序。我们最近的负载有所增加,现在正在寻求扩展的解决方案。扩展apache非常容易,我们只需要多台多台计算机托管它并循环传入流量。

但是,apache的每个实例都会与MySQL通信,最终MySQL会被重载。如何在此设置中跨多台计算机扩展MySQL?我已经查看了this,但具体来说我们需要立即提供数据库中的更新,所以我不认为复制是一个很好的策略吗?也希望这可以通过最少的代码更改来完成。

PS。我们有大约1:1的读写比率。

5 个答案:

答案 0 :(得分:23)

只有两种策略:复制和分片。当您具有较少的写入和较多的读取流量时,复制通常会到位,因此您可以将读取重定向到许多从站,同时存在大量复制流量的陷阱以及不一致的可能性。

通过分片,您可以跨多台计算机(称为功能分片)对数据库表进行分片,这使得特别加入更加困难。如果这个最适合你,你还需要在多台机器上对行进行分片,但这并不好玩,并且依赖于在应用程序和数据库之间实现的分片层。

面向文档的数据库或列存储区为您工作,但它们目前针对OLAP进行了优化而不是针对OLTP。

答案 1 :(得分:4)

您可能认为复制不是最佳策略,但请查看此link,它提供了一个相当简单直接的提示,可帮助您使用复制来平衡多台计算机之间的负载。

答案 2 :(得分:2)

你应该看看MySQL Performance Blog。也许你会找到有用的东西。

答案 3 :(得分:1)

取决于应用程序后端(即如何处理PK,事务和插入ID),您可以考虑使用不同的auto_increment设置进行MASTER-MASTER复制。这可能很棘手,需要彻底测试,但它可以工作。

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

答案 4 :(得分:0)

嗯...祝你好运将所有这些写入扩展到真正的大规模。数据库引擎成为瓶颈,太多的锁和缓冲区管理和东西......

我发现真正有用的唯一方法是横向扩展,分片,不幸的是,没有为MySQL提供分片"开箱即用" (比如像Mongo这样的NoSQL)。 ScaleBase(免责声明:我在那里工作)是一个完整的横向扩展解决方案和#34;自动分片机"如果你喜欢。 ScaleBae分析您的数据和SQL流,跨数据库节点分割数据,路由命令并在运行时聚合结果 - 所以您不必!