Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 避免分裂大脑问题的HA数据库配置?_Sql_Database_High Availability - Fatal编程技术网

Sql 避免分裂大脑问题的HA数据库配置?

Sql 避免分裂大脑问题的HA数据库配置?,sql,database,high-availability,Sql,Database,High Availability,我正在寻找一种(SQL/RDB)数据库设置,其工作原理如下: 我将有3个以上的数据库处于活动/活动/活动配置 在执行任何插入之前,数据库将至少与大多数其他数据库通信,以便它们要么同时插入,要么回滚(事务) 通过这种方式,我可以从任何数据库进行写入和读取,并始终获得相同的结果(只要字段不是最近更新的) 注意:这适用于读写量很大且写操作很少的用例(写操作延迟是正常情况) 有这样的事吗?我看到了各种数据库HA配置的解决方案,但大多数都建议写入主节点或使用被动备份 或者,我可以设置一个自定义应用程序,让

我正在寻找一种(SQL/RDB)数据库设置,其工作原理如下:

  • 我将有3个以上的数据库处于活动/活动/活动配置
  • 在执行任何插入之前,数据库将至少与大多数其他数据库通信,以便它们要么同时插入,要么回滚(事务)
  • 通过这种方式,我可以从任何数据库进行写入和读取,并始终获得相同的结果(只要字段不是最近更新的)
  • 注意:这适用于读写量很大且写操作很少的用例(写操作延迟是正常情况)

    有这样的事吗?我看到了各种数据库HA配置的解决方案,但大多数都建议写入主节点或使用被动备份

    或者,我可以设置一个自定义应用程序,让每个应用程序只与一个数据库通信,并获得类似的结果,但我希望类似的结果已经存在

    所以我的问题是:这样的东西存在吗?如果没有,是否有任何技术/架构方面的原因

    另外,我不会使用所有数据库都可以存储/访问相同数据的SAN

    编辑:更多关于我想要的澄清: 1.我还没有挑选出数据库,但我更熟悉MySQL/SQL Server/Oracle,所以我对这些数据库有一点兴趣 2.如果大多数节点都已关闭(或者单个节点无法与集合通信),那么我预计该节点的所有写入操作都将失败,并接受该节点可能提供的信息陈旧/过时

    故障/恢复场景预期: 1.一个节点关闭:当它返回时,它将查询并从其他节点获取更新 2.节点失去与集合的连接:它将提供潜在的旧数据来读取请求,并拒绝任何写入 3.节点与其他节点中的数据存储不一致:多数规则 4.4.多数规则不起作用:与任何拥有最新数据的人合作(尽管这真的不应该发生) 5.条目是插入/更新/只读的,即不会进行删除(除了手动ofc),因此我不需要担心删除后的更新,但是在这种情况下,我会选择删除记录并忽略更新 6.还有我错过的其他场景吗

    更新:我看到最接近我所寻找的似乎是使用quorum+2个DBs,但是我更喜欢使用3个DBs,这样我可以随时查询其中任何一个(以进一步分发读取,并保留另一份数据副本)

    您需要定义“最近”。在大多数具有针对插入的复制的环境中,所有数据库在插入后几秒钟内都将具有相同的数据(而几秒钟似乎是悲观的)

    另一种方法是“从一个读取/写入到所有”方法。在这种情况下,读取会在系统中传播。然后,应用程序(或应用程序使用的公共层)将写操作发送到所有节点


    但是请记住,数据库复制的问题不在于它工作时如何工作。问题是它在发生故障时如何恢复,甚至如何识别故障。您需要确定当节点停机时会发生什么,它们如何恢复丢失的事务,您如何确定节点是否真正同步。我建议您仔细阅读实际使用的数据库的文档,并了解该平台提供的复制机制。

    最近:正如您所提到的,几秒钟的悲观情况,很可能要少得多——我同意从几秒钟前获取“旧”数据,只要我重新查询它(几秒钟后),它就会提供更新的信息。不确定“从一个读取”如何在系统中传播读取?我问是否有数据库已经有了“公共层”,而不是我自己创建的。我正在寻找一种解决方案,它不会失败,除非大多数节点停止运行(但一个节点不与其他节点通信时不接受写入)@user2813274。首先,我将学习您感兴趣的一个或多个数据库的复制功能。大多数数据库都有一个复制组件,这可能会满足您的需要。您可以推荐哪个数据库具有超过2个节点的active/active?在任何数据库搜索中,HA似乎都是一个大“热门词”,其中大多数是某种主动/被动或“主节点”类型instead@user2813274 . . . “高可用性”至少不是一个新的流行词。Tandem Computers(现在是HP的一部分)在其不间断的Himalaya服务器上销售它,至少在20世纪80年代末和90年代。从Oracles复制文档()开始。他们做这类事情已经快20年了。我没说新的。。只是搜索它会带来很多不好的结果。从oracle文档中可以看出:这将是我正在寻找的一个很好的例子,但是经过这一过程,它从来没有解释3个或更多节点可以使用哪些配置选项(除了它们是“高级的”)—我还寻找了“多主节点”,虽然它似乎支持2个以上的节点,我还没有找到这个用例的好例子,或者确认我是否可以从一个与其他节点断开连接的节点读取(旧)数据