MySQL 集群

MySQL 集群

我运行一个托管大约 50Gb 数据的 mysql 服务器(主要用于大约 250 个网站),我想知道我该如何设置一个冗余 MySQL 集群? 主要目的是我可以关闭一台服务器进行维护或重启,而不会影响数据库可用性 - 其次是会有某种热故障转移如果实时服务器出现问题。

我的理解是mysql 集群要求数据库完全包含在内存中,并且由于数据太多,这不是一个实用的选择。

答案1

您需要的是复制。虽然许多人使用 MySQL 复制,但我已经处理了足够多的复制(数十个高容量生产 MySQL 实例),知道它不是一个好的选择。它非常脆弱,并且会在不方便的时候失败。现在,我倾向于使用块复制解决方案(如 DRBD)来使 MySQL 存储保持一致。

至于故障转移,MySQL 复制同样不能很好地处理这个问题。虽然从主服务器到从服务器的故障转移是一个相当自动化的操作,但处理后续问题(以另一种方式重新运行复制)始终是一个手动过程,需要反复检查以确保一切正常。无论您选择哪种复制方法,我都会使用心跳来检测一切是否正常以及当前活动服务器何时发生故障,以确保有序地接管资源。

答案2

查看实现自动故障转移。确保将两台服务器设置为主服务器,这样您就有了双向复制。此外,如果您使用自动增量,请确保对其进行设置,这样您就不会发生条目冲突(请参阅详细信息请参阅文章)。

最后,使用马特吉特以确保服务器之间不存在不一致。

答案3

我们一直在使用DRBD / 心跳现在已经使用了一段时间了,效果还不错,但对于虚拟服务器的情况来说并不理想(我们有),因为它应该服务器之间有多个连接,在虚拟环境中,所有连接(串行、以太网等)基本上都通过同一根线路传输 - 因此当一个连接超时时,所有连接都会超时。(我意识到我可以在那里放一条真正的串行电缆,但这样我就无法再在主机之间迁移我的虚拟机 - 我不想放弃这种能力)

在这种情况下,我偶尔会遇到这样的情况:两台服务器都无法看到对方,并且它们同时成为“主服务器”(这种情况称为裂脑,恢复起来很麻烦)

但这肯定比binlog复制我们之前一直在使用这个解决方案 - 从目前的评论来看,它听起来比mysql 集群也一样。

答案4

从 mysql 5.1 开始,mysql 集群数据(但不是其索引)可以存储在磁盘上: MySQL 5.1 中的新增功能

但是我同意 womble 的观点,鉴于 mysql-cluster/ndb 的诸多限制和复制的脆弱性,我会犹豫是否考虑通用解决方案。对于具有良好理解的使用模型和与开发人员合作的真正 DBA 的单个数据库?可能。但对于支持许多不同应用程序的通用数据库服务器集群则不然。

相反,我想使用 DRBD 方法,或者直接花钱解决问题并使用 SAN。据我所知,没有一种解决方案是完美的。

相关内容