考虑在5台机器上共有5个副本的数据库。对数据库的写入涉及到所有5台机器中的两个阶段提交以保持一致性。重新连接数据库中的节点如何与大多数群集同步?
假设一台机器停机。然后写入数据库仍可能发生,因为它仍然是大多数,所以在其他4个节点上运行两阶段提交。
但是当下行机器恢复并重新连接时,它如何同步并重新加入群集?
重新加入的机器需要获取它没有的提交日志条目。据推测,它在所有5台机器中运行某种共识算法,以便在缺少下一个日志条目时达成一致。它一直这样做直到它赶上丢失的提交日志条目。
但是它是如何从追赶过渡到加入集群的。虽然它正在赶上其他4台机器将承诺一堆新的写入。所以它似乎永远不会真的被抓住。
重新加入的节点是否请求集群停止处理新的写入以使其赶上。然后通过使用共识算法重新加入(是否如何重新加入?)。这看起来好像会导致写入处理过程中的主要呃逆延迟。处理这个问题的惯用方式是什么?
考虑到问题的深奥特性,您可能会对dba.stackexhange获得更好的响应 – hexparrot
您正在使用master-master还是master-slave配置?您正在使用哪种集群技术?这些信息对答案有很大的影响。对于MS SQL服务器数据库集群,我建议参考以下链接:http://technet.microsoft.com/en-us/library/cc784005(v=ws.10).aspx,注意:它指的是Win2003服务器,但这些概念是高度相关的。 –