Ruby on rails 在mongodb中的主节点变为辅助节点后,无法编辑在该节点上创建的数据

Ruby on rails 在mongodb中的主节点变为辅助节点后,无法编辑在该节点上创建的数据,ruby-on-rails,mongodb,mongoid,Ruby On Rails,Mongodb,Mongoid,我在rails应用程序中使用mongodb副本集,其中有1个主节点A和1个次节点B 它工作得非常好,直到我添加了一个节点节点C并将节点C作为主节点。现在主节点C拥有所有内容,但根据我的观察,在前一个主节点A上创建的内容现在只能读取,不能编辑或销毁。据我所知,数据只能写入主节点,所以我猜来自secondarynode A的数据——早期主节点的数据只能在被访问时读取 这是一种常见的行为还是我遗漏了什么 编辑: 我从主节点节点C、db.dropDatabase和mongorestore获取了副本集的d

我在rails应用程序中使用mongodb副本集,其中有1个主节点A和1个次节点B

它工作得非常好,直到我添加了一个节点节点C并将节点C作为主节点。现在主节点C拥有所有内容,但根据我的观察,在前一个主节点A上创建的内容现在只能读取,不能编辑或销毁。据我所知,数据只能写入主节点,所以我猜来自secondarynode A的数据——早期主节点的数据只能在被访问时读取

这是一种常见的行为还是我遗漏了什么

编辑:
我从主节点节点C、db.dropDatabase和mongorestore获取了副本集的db转储。我发现一些集合中缺少数据。任何人都可以解释问题所在。

在mongodb副本集中,您只能在主节点上写入、修改、创建和销毁。写入操作随后传播到副本集中的其他辅助节点。请注意,这种传播可能不会立即发生

但是,当主服务器发生更改时,您应该能够对以前由另一个主服务器写入的数据进行写入


请注意,将节点添加到副本集中时,最好在此节点中加载最新的数据库备份。复制过程基于每个节点之间的共享,表示创建/删除/更新,但是此oplog的条目数量有限。因此,您的新主节点可能不会考虑以前的条目…

正如您所说,这意味着每个新节点在连接到主节点之前都应该有一个db。我认为这是一件痛苦的事情,我会寻找一个合适的solnit,它很容易转储mongodb数据库并恢复它。寻找mongo dump和mongo restore,你会发现很多文档。我把它作为最后一个选项,比如备份、清理节点和恢复。但我只是想知道是否需要添加更多具有高优先级的辅助节点,事情应该如何安排—实际上不需要清理所有节点。只需准备新数据库,在其中加载备份,然后将其添加到副本集中。几分钟后,新节点将与副本集完全协调。这有什么关系?您可以向副本集中添加一个空的DB节点,它将自动同步到当前状态。您是如何使C成为主节点的?你说C拥有所有内容是什么意思?复制集的所有成员都拥有相同的内容。我已经从mongo控制台更改了C的优先级,是的,这与节点同步是一样的。我对primary进行了db转储,然后尝试在本地恢复它。集合中的某些文档不可用,发现数据丢失。所以它指的是mongodump并没有支持所有的数据,我猜不出结果reason@AsyaKamsky您与MongoDB inc.有关联,能否请您向我推荐一些文档,以便深入了解MongoDB在这里发生的事情——您如何知道这些数据以前没有丢失?为什么要进行转储,为什么要进行db.dropDatabase?恐怕我没有完全了解你做了什么,遇到了什么问题,以及你是如何知道有问题的——这些信息可能会有所帮助。你是怎么做C小学的?由于事情在那之前起作用,在那之后就不起作用了,我可以想象,在添加C并使其成为主程序的过程中,可能会出现问题。以前没有丢失数据吗?-我的应用程序中的某些用户条目不存在。我正在使用rails应用程序,因此在其他一些集合中,我也检查了缺少的条目。作为最后一个选项,我对整个数据进行了备份,原因是我想重新创建它,以便所有写操作都在一个地方(即主位置)进行。