2014-02-24 25 views
3

考虑在5台机器上共有5个副本的数据库。对数据库的写入涉及到所有5台机器中的两个阶段提交以保持一致性。重新连接数据库中的节点如何与大多数群集同步?

假设一台机器停机。然后写入数据库仍可能发生,因为它仍然是大多数,所以在其他4个节点上运行两阶段提交。

但是当下行机器恢复并重新连接时,它如何同步并重新加入群集?

重新加入的机器需要获取它没有的提交日志条目。据推测,它在所有5台机器中运行某种共识算法,以便在缺少下一个日志条目时达成一致。它一直这样做直到它赶上丢失的提交日志条目。

但是它是如何从追赶过渡到加入集群的。虽然它正在赶上其他4台机器将承诺一堆新的写入。所以它似乎永远不会真的被抓住。

重新加入的节点是否请求集群停止处理新的写入以使其赶上。然后通过使用共识算法重新加入(是否如何重新加入?)。这看起来好像会导致写入处理过程中的主要呃逆延迟。处理这个问题的惯用方式是什么?

+0

考虑到问题的深奥特性,您可能会对dba.stackexhange获得更好的响应 – hexparrot

+0

您正在使用master-master还是master-slave配置?您正在使用哪种集群技术?这些信息对答案有很大的影响。对于MS SQL服务器数据库集群,我建议参考以下链接:http://technet.microsoft.com/en-us/library/cc784005(v=ws.10).aspx,注意:它指的是Win2003服务器,但这些概念是高度相关的。 –

回答

1

这并不意味着作为答案,我不知道。无法在评论中获得这个可读性。

但是,群集计算机节点具有与分布式数据库相同的问题。数据完整性以及谁做出“决定”是数据库的两个共同问题。

跨地理上不相交的群集成员(如Solaris geocluster)进行复制在某些情况下适用于SAN的工作方式。如果节点A有一个数据集(例如zfs文件系统),则源自节点B的任何更改都会以三角形的形式存储,这就是快照的工作方式。获得完全同步并不一定是必需的,因为A的数据集的基础加上delta delB的数据集。如果需要,这些工具可以在将来某个时间完全同步A和B的数据集。因此,如果B跟踪本地数据,然后使用A中的增量更新“快照”,那么 - 每个人都是同步的。世界很高兴。

现在,决定。三角洲的东西是谁? A还是B? A是否跟踪自己的数据集,或者跟踪自己以及来自B的增量?仲裁经理决定在一个群集中。这是一个任意选择的负责决策的节点。事实上可能发生的是每个“本地”节点都有一个唯一的数据集,然后是其他人的“快照”。集群需要奇数个节点才能正常工作。节点数量均匀时,您无法达到法定人数。 FWIW。

在地理集群中,如果节点A在阿尔伯克基出现故障,纽约的节点B几乎可以立即对节点A进行故障切换。这是因为B拥有一切。仲裁管理员决定谁在有很多成员的群集中为谁进行故障转移,如果C被淹没,还可以将应用程序负载从C重新分配给D和E(以及一系列其他条件是真实的,如应用程序在C,D ,E)

问题是:2个节点没有相同的数据集,但它们的集合数据集的总和与无论网络等待时间的因素是一样的。

0

这是一个非常复杂的话题,可能在这里的短文中无法明智地回答。

我建议您阅读Cassandra或另一个成熟的分布式数据库的技术文档。 Cassandra特别适合您的问题,因为它具有可调整一致性的概念 - 您可以决定在给定事务中所有数据库需要提交的部分。

我想你会在那里找到你的问题的答案,加上更多的问题你还没有。

相关问题