mongodb - 如果发生故障的服务器从故障转移返回,会发生什么情况?

标签 mongodb replication failover database

我打算在mongodb中进行复制过程,它具有自动故障转移的功能。我尝试以图片格式提出我的问题。

enter image description here

我的问题是,如果故障服务器在故障转移后重新上线,会发生什么情况?这似乎是数据库中的常见做法。这部分对我来说是全新的,所以请分享您的建议?

最佳答案

在我们跳到答案之前,先设置一些背景:

  1. 副本集中的每个服务器都维护 oplog。它是服务器上发生的更改的日志。这是一个有上限的集合。这意味着它只保留最近的更改。
  2. 主节点应该有最新的 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/

相关文章:

mongodb - 无法通过 kubectl port-forward 连接到 mongodb 副本集

asp.net-mvc-3 - 编辑连接字符串 MVC3 LINQ

php - Muzak 复制建议和技术

c# - 如何从故障转移组名称获取主服务器和辅助服务器名称。有 C# 代码示例吗?

java - 如何使用 Java 从 Mongodb 的子文档数组中获取所需的字段

php - 使用php删除mongodb中的文档的问题

javascript - Mongodb 聚合以对数组中最常见的项目进行排序?

redis - 写入两个 Redis 服务器

postgresql - Debezium 与 RDS postgres 和主副本故障转移

powershell - 如何以对象格式获取测试集群输出?