我正在设置一个需要提供高可用性的数据库。
我主要关心的是高性能和稳健性(我不想要一个会快速严重失败的东西)。应用程序以平均 300 qps 的速度访问数据库。它将在 Xen VM 上运行,并且有一些 InnoDB 表以及 MyISAM 表。VM 通过以太网 100Mbit/s 以太网电缆连接。
在这种情况下,您会推荐 MySQL 复制还是 DRBD?
或者我应该使用 DRBD 来使主数据库具有高可用性并在从属数据库上使用 MySQL 复制?
我是一名开发人员,因此这些事情对我来说并不容易做出合理的判断。
答案1
与基于 DRBD 的解决方案相比,具有监控和自动故障转移的复制更容易实现和维护,特别是如果您不习惯使用原始设备。如果您的应用程序服务器是只读数据库客户端,则可以运行主-主设置,并拥有两倍于前端或中间层机器的客户端(连接)...
最可靠和可扩展的可能是 MySQL 集群,但实际上,这至少需要 4 个数据库主机才能很好地实现。我会使用 monit 运行普通的 MySQL 复制,根据我的经验,当 mysql 经过适当调整且系统负载几乎为零时,8 核机器可以轻松实现 10k qps,当然,快速磁盘和大量 RAM 会有所帮助。事实上,使用 Inno 和 MyISAM 时,您需要快速磁盘,并确保定期进行表维护。
答案2
两者各有优缺点。
MySQL 复制可以相当轻松地添加到任何现有设置中,并且不需要复杂的块设备。但是,由于密钥冲突等原因,复制很容易中断。确保没有人可以写入从属服务器。在 my.conf 文件中设置 read_only 以确保没有人可以更改从属服务器上的表。我发现最有效的方法是设置主-主复制,但以 read_only 模式运行一个节点。
如果由于 SQL 查询损坏而导致复制中断,那么您将需要恢复到已知的良好状态或只是从主服务器重新复制所有表。
主从配置的优点是,您还可以将读取查询发送到从属服务器,以实现冗余和性能。您还可以轻松地将其提升为主服务器。
答案3
如果您计划采用主动被动方案,则复制设置起来相当简单,并且不需要共享驱动器。它将以主 - 从设置运行,其中从属连接到主服务器进行更新。
为此,需要记住以下几点:
- 您想要自动故障转移还是手动故障转移?
- 如果您想手动执行复制,是否需要监控复制状态?
- 这是在数据库层完成的,因此您可以通过互联网完成。
对于 DRBD,您将在块设备级别实施解决方案。基本上,您将写入复制到另一台机器的硬盘驱动器。您可以使用心跳来实现 HA。
需要注意以下几点:
- 这是在块级别完成的,因此您无法对其进行太多控制。使用复制,您可以跳过偏移量。
- drbd 增加了一层复杂性。
最终取决于您需要什么以及如何使用数据库。