2

我们正在考虑为我们的主 MySQL 数据库设置复制,虽然设置复制看起来很简单,但应用程序的实现似乎有点模糊。

我的第一个想法是设置一个主从配置和 RW 拆分,所有写入查询 ( CREATE, INSERT, UPDATE) 都进入主服务器,所有读取查询 ( SELECT) 进入从服务器。在阅读了它之后,似乎基本上有两个选项可用于如何使用我们的应用程序实现这一点:

  1. 对所有 MySQL 连接使用独立的中间件层,例如MySQL 代理DBSlayer。但是,前者在 Alpha 中,而后者的文档有限。
  2. 使用基于 Ruby 的 gem/plugin,例如Octopus在框架中实现 RW-splitting。

如果我们想采用主从设置,您建议继续进行哪些操作?

我的另一个想法是使用主-主配置,但不确定这种设置的实现。

想法?

4

1 回答 1

2

通常,您应该在框架中进行 R/W 拆分,因为只有它才能理解上下文。在 PHP 中,我通过维护两个连接来做到这一点 - 一个用于写入,一个用于读取,并决定您在代码中明确需要哪个连接。原因是它不像按查询类型拆分那么简单。例如,如果您在写连接上启动一个事务,您希望其中的所有读取也都通过该事务,否则它们将在事务之外并且可能会获取旧数据或被锁挂断。

除非您的工作负载真的很重,否则复制不是扩展解决方案,因为复制滞后会导致您获得过时的结果。Master-master 并没有那么特别——它只是 master-slave 的两个实例,但你不应该错误地尝试写两个 master,因为你要求做脑裂的噩梦。

我真正喜欢的配置是将mmm与 master-master 对一起使用。这使得故障转移和冗余对应用程序非常容易和透明,并且运行良好。

于 2011-06-15T11:02:41.840 回答