我打算在mongodb中进行复制过程,它具有自动故障转移的功能。我尝试以图片格式提出我的问题。
我的问题是,如果故障服务器在故障转移后重新上线,会发生什么情况?这似乎是数据库中的常见做法。这部分对我来说是全新的,所以请分享您的建议?
最佳答案
在我们跳到答案之前,先设置一些背景:
- 副本集中的每个服务器都维护 oplog。它是服务器上发生的更改的日志。这是一个有上限的集合。这意味着它只保留最近的更改。
- 主节点应该有最新的 oplog。每个辅助服务器使用其他服务器的 oplog 进行自身同步。因此它会获取主节点或其他辅助节点的 oplog 来更新自身。它可能会落后太多,即其他辅助节点或主节点没有中间日志。由于操作日志的上限性质,可能会发生这种情况。在这种情况下,辅助服务器进行初始同步,即与其他服务器进行完整数据同步。
现在回答你的问题,primary 回来后状态如何。答案将取决于主节点发生故障之前的状态。可能有以下两种情况:
情况 1. 即将失败的 Primary 具有最新的更改。此外,至少其中一个辅助节点具有最新的更改。现在主要失败了。具有最新更改的辅助设备将成为主要设备。它将接受 mongos 或驱动程序的所有更改。现在,如果较早的初选回来怎么办?这将是次要的。并会根据上面提到的第2点自行同步。
情况 2. 即将失败的 Primary 有最新的更改。所有辅助节点都落后于主节点,有几个变化。现在主要失败了。在这种情况下,新当选的初选不会有最新的变化。但它假设它具有最新的更改。它开始按照这个方式行事。现在,如果较早的小学回归,它将成为中学。它将意识到它的操作日志既落后又领先。落后是因为在它下跌的时候发生了变化。领先是因为它有一些未在其他服务器上复制的更改。因此它将删除使其领先的更改。它将在此过程中使用 oplog。这个过程称为回滚。但在回滚之前,它将在系统回滚文件中记录恢复的更改。现在已经不领先了。却落后于别人。并会根据上面提到的第2点自行同步。需要注意的是,管理员必须手动应用系统回滚文件中的更改。回滚详细信息可以在: http://docs.mongodb.org/manual/core/replica-set-rollbacks/ 找到
关于mongodb - 如果发生故障的服务器从故障转移返回,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20785404/