【问题标题】:Replica set members not resyncing after primary goes down主服务器宕机后副本集成员不重新同步
【发布时间】:2016-11-01 07:51:50
【问题描述】:

我有一个包含 3 个节点的副本集,我有一个名为 dev-6 的服务器正在运行 mongo 3.0.6,而 dev 5 有 2 个运行 3.2 的 mongos。我希望 dev 6 成为主要节点,因此我已将其他 2 个节点添加到其启动的副本集中,一旦我这样做,它就会成为主要节点,并且其他 2 个节点开始与之同步。以下是我关闭 dev 6 然后重新启动时我的设置的屏幕截图。

因为,预期的 dev 6 是次要的,dev 5:27018 也是如此。我想知道的是为什么 dev 5 说没有人可以同步,但 dev 5:27019 说它正在同步开发 5:27018。

我现在将按照mongo 的说明将 dev 6 设为主要版本,这是现在的结果。

Dev 6 是主要的,但我想了解的是其他 dev 5 实例为什么没有与 dev 6 连接。在得出一些结论之前,我能够从 dev 6 ping dev 5,反之亦然,/etc/hosts 配置文件包含彼此的 IP 地址。

编辑:我基于副本集无法连接以下消息"lastHeartbeatMessage" : "could not find member to sync from",。如果我运行 rs.config(//current cfg) 或添加或删除副本集,这似乎已修复。

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    您的副本集在这两种情况下似乎都很健康。所有从节点都应用了主节点操作日志中的最后一个操作(optime/optimeDate 相同),而且 lastHeartbeat 稍微落后于 dev 6 时间。关于 lastHeartbeatMessage 参考thisjira 问题,上面写着:

    当次要选择要同步的源时,它将选择一个节点 oplog 比 self 更新(不等于),所以启动后,当所有节点 有一些数据,oplog会一样,所以secondary不能选择一个 同步源,写操作发生后写,主将有 较新的 oplog,secondary 可以成功选择一个目标来同步, 错误信息将消失。

    【讨论】:

    • 试过了,没用。我所做的是创建一个新集合并插入一个未开始同步的项目。
    • 你怎么知道副本成员不同步?例如,您是否尝试过在其中一个关闭时写入,然后在它再次启动时检查是否有最新写入(在辅助设备上您可以使用 db.collection.find().readPref("secondary"))?
    • 我基于在碎片"lastHeartbeatMessage" : "could not find member to sync from", 上看到这条线。我添加了更多关于 RS 何时同步以及何时不同步的详细信息。
    • 正如 jira 所说,这可能是一个错误。我会尝试检查实际的变化。
    【解决方案2】:

    错误“找不到要同步的成员”我通常与无法相互交谈的副本集成员相关联。由于防火墙或凭据问题。

    我知道您可以 ping 服务器,但您是否尝试过使用 mongoclient 从其中一个辅助服务器连接到主 mongo 实例?

    mongo vpc-dev-app-06:27017

    如有必要,使用适当的用户凭据。

    作为升级的一部分,mongod.conf 中是否有任何更改?

    【讨论】:

    • 我能够从任一服务器连接到两个 mongos。这很有趣,因为他们开始同步然后无法重新同步。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 2015-06-07
    • 2012-02-03
    • 2013-05-04
    相关资源
    最近更新 更多