MySQL负载平衡

我正在考虑如何平衡我们的MySQL基础设施的负载,似乎无法find一个适合我的答案… 🙂

所以,我有一个大的,胖的服务器,处理一切。 许多数据库,许多读取,许多写入等,它处理得很好,但它是一个单一的故障点。

我们build立了一些奴隶来redirect读取它们,但是却遇到了两个问题:重build所有程序来分割读取和写入需要花费很多的精力; 有时候奴隶会落后,这会导致应用程序中非常有趣的文物。

奴隶们陷入困境的问题:因为许多数据库是混合在一起的 – 在数据挖掘方面有十到二十分钟的重复查询,以及没有时间的primefaces查询。 但是Slave一次只运行一个查询,所以所有的primefaces查询必须等到重写完成。

为了解决这两个问题,我在考虑像代理这样的东西,

  • 自动分割读/写
  • 充当单个入口点,然后将请求redirect到具有所需数据库的相应服务器(例如,在后端将db1和db2分开,但对应用程序具有透明性)
  • 知道奴隶滞后,并发送读取到主时,奴隶滞后发生(如果这可以做,比如说,每个数据库是理想的;但服务器范围也将非常好)
  • 所有合格的从站之间的负载均衡读取(通过简单循环或通过监视LA)

一个仍然存在的问题,但我想考虑的是故障切换。 如果主人失败了 – 如果奴隶要承担主人的责任,而主人又回来了 – 那么奴隶会变成奴隶。

任何指向RTFM或关于这个问题的案例研究的指针将是值得欢迎的=)

编辑:谷歌search了一些,除了钨企业 – 发现dbShards和Schooner。 在深入研究的同时,有没有人有这些解决scheme的经验? 任何反馈?

检查钨企业

MySQL-MMM不是推荐的解决scheme。 请参阅: http : //www.xaprb.com/blog/2011/05/04/whats-wrong-with-mmm/即使其中一位原作者同意了评论。

干杯

编辑:哎呀,第二个链接是相同的第一个。 更正

如何处理两个服务器作为您的应用程序数据库,另一个服务器(或两个?)充当您的数据挖掘层。 你的两个“应用程序”数据库不应该(太远)落后,因为他们没有处理任何沉重的查询。 你也可以设置mysql-mmm来处理故障转移。 然后,您可以将您的应用程序指向您在负载平衡器中设置的Mysql VIP。 这个VIP有两个MMM IP。 但MMM可能会说:“嘿,方块2太落后了,我会把IP移到方块1,以便赶上。”

然后你将有两层数据库处理你的两种不同的查询types。 这些机器上的caching将针对其查询types进行优化(理论上)。

也看看一个Fusion-IO卡或Virident TachIOn。 这可能会解决问题,而无需添加一堆硬件。

为了解决复制滞后问题,我们将SSD作为主从存储器。 更快的写入时间有助于从属数据库保持运行,尽pipe从属单元的复制是单线程操作。