【问题标题】:What alternatives do I have if I want a distributed multi-master database?如果我想要一个分布式多主数据库,我有什么选择?
【发布时间】:2010-04-12 10:31:36
【问题描述】:

我将构建一个希望减少单点故障的系统,并且我需要一个数据库。是否有任何(免费)关系数据库系统可以很好地处理多主设置(即易于添加和删除节点的地方),还是使用 NoSQL 数据库更好?

据我了解,键值存储会更好地处理这个问题。对于多主(集群)设置,您推荐什么数据库系统?

【问题讨论】:

  • 除非您运行的是真正的关键任务,否则不要打扰。集群数据库具有巨大的复杂性成本并产生其他问题(例如脑裂)。 NoSQL 解决方案通常远没有那么成熟,只是具有不同的复杂性成本。

标签: database rdbms fault-tolerance key-value-store distributed-database


【解决方案1】:

Mysql 的 NDB Cluster 会这样做。但设置起来并不容易,而且有很多陷阱。

而且,它的性能通常相当糟糕,并且会将数据保存在内存中(是的,我知道它们听起来很矛盾)。

本质上,更新需要在整个集群(或至少在保存这些表的存储节点组中)获取分布式锁

这并不容易管理,但您可以进行某种程度的热添加。

除非您需要非常快速的故障转移和一致性,否则我建议您不要这样做。

我建议忽略多主服务器,而改用 HA MySQL(例如 InnoDB),它易于设置并且在典型的低于 30 秒的故障转移时间下运行良好。这是一个主从系统,其中从站甚至无法进行读取(但您可以添加具有复制功能的读取从站,前提是您不需要它们完全是最新的)

【讨论】:

  • 同意,除非您确实需要多主机的性能,否则请坚持使用简单的故障转移解决方案。
  • 多主控也不能提高写入性能,因为如果你想要高持久性,两个主控必须同步完成所有写入。可以通过添加读取从属设备来提高读取性能。
【解决方案2】:

键值存储不一定是容错的。它们主要是性能工具。只有当数据存储在多台服务器上时,才会有任何形式的容错。如果只是为了安全,减少单点故障,最简单的解决方案可能是设置一个镜像解决方案,其中您有一个只跟踪主数据库的镜像。当 master 以某种方式失败时,您会快速切换(希望是自动切换)。

这种复杂性要低得多,因为在正常操作期间不需要一致性管理。镜像是只读的,只跟踪主数据库。当master失效时,镜像切换到master,链接断开。主控恢复后,它们之间的状态不一致,您必须确保从现在充当主控的镜像更新原始主控。大多数数据库系统都可以处理这种情况,如果您没有疯狂的正常运行时间要求或非常重的负载,那么它是最实用的解决方案。

【讨论】:

    【解决方案3】:

    我认为甲骨文已经掌握了这个概念。但是,如果你是一个没有瑞士银行账户的凡人,那么也许你应该查看MySQL's NDB Cluster

    【讨论】:

      猜你喜欢
      • 2019-04-21
      • 1970-01-01
      • 2015-05-21
      • 2011-06-14
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      • 2021-12-30
      • 2014-11-20
      相关资源
      最近更新 更多