使用 MySQL 复制,什么级别的弹性是可能的?

5 mysql replication

我找到了很多关于设置 MySQL 复制的好材料,但没有太多关于在发生故障时该怎么做。了解我可以达到的弹性程度是设计我的系统的基础,所以我不是在这里寻找“如何”管理建议,而是想了解可实现的语义。

因此,为了简化我的要求,我有一个应用程序,除非它可以读取数据库,否则无法运行。有两种场景:一是常见用法,一分钟请求很多,读数据库返回一个答案。其次,不那么频繁地用新数据更新数据库。更新延迟几分钟是可以接受的。

所以我的第一个想法是:Master->Slave

现在读者可以使用 Master 或 Slave,如果我们失去 Master 一段时间,读者可以对抗 Slave。

听起来很简单。但是......更严重的问题呢,如何手动恢复?多久时间?什么数据丢失?

以这个场景为例:Master->Slave。我们知道从站可能与主站有点不同步。现在假设我们失去了主人,这意味着它不会很快回来。

现在大概我们需要 Slave 成为可写的 Master,我们需要一个新的 Slave。

具体问题:

  1. 使奴隶成为主人需要多少时间和精力 - 我没有找到有关该做什么的文档。我猜这很容易。我们可以让这种接管无缝连接到客户端应用程序吗?调整DNS路由或一些这样的?
  2. 如果我们现在无法获取旧 Master 的日志,那么我们必须接受对 Master 的某些更新永远不会到达新 Master,我们是否会丢失数据?
  3. 创建新的 Slave 需要多少努力?我的猜测是,这并不难,但可能需要时间。我试图想象通过拥有两个 Slave 并调整复制来减少这种开销,以便当 Slave 1 成为新的 Master 时,Slave 2 现在成为那个新 Master 的从属。然而,考虑到复制的潜在延迟,我认为确保完全一致性并不容易。

小智 2

我经常使用主从来加速远程办公室在慢速(512 kbit)连接结束时的读取速度。我的实现和经验如下:

  1. 应用程序被编写为从从设备读取并向主设备写入。读取事务内部的last_insert_id()需要从主服务器完成。

  2. 如果发生中断(例如宽带链路中断),则可以透明地从从属设备继续读取,但无法对该远程位置进行写入。其他写入继续从其他位置进行。从站照常更新。

  3. 当链接恢复时,从属设备会重新连接并下载任何更新并同步自身,通常是透明的。

这对我来说非常成功,我有很多人阅读,但只有少数人更新,其中大多数人在总部。

您可以从主设备更新多个从设备,如果我没记错的话,一个从设备也可以从另一个从设备更新,这样您就可以拥有从设备的“层”。

以下是一篇有用的读物​​。 http://dev.mysql.com/doc/refman/5.5/en/replication-solutions-switch.html