【问题标题】:Mongo New Replica Set Old DataMongo新副本集旧数据
【发布时间】:2021-06-12 04:17:11
【问题描述】:

我在 AWS 上运行 MongoDB 副本集(3 个服务器)。我每 6 小时拍摄一次卷的快照。

由于某些软件包更改,我需要退出 Amazon Linux 1 并迁移到 Ubuntu Linux。我已经关闭了旧的 cloudformation 堆栈,使用 Ubuntu 创建了一个新的 cloudformation 堆栈,现在一切都是空白的。

现在,我拍摄我的快照,创建一个卷,删除当前在 EC2 上的卷,使用旧数据附加新卷,运行 sudo chown -R mongodb:mongodb /datasudo chmod -R go+w /data,然后重新启动 Mongodb sudo systemctl restart mongod

这确实开始了,但是在 mongo 日志中,我遇到了这个问题:

"msg":"最大重试次数后心跳失败","attr":{"target":"db2.ospreynrglive.com:27017","maxHeartbeatRetries":2,"error":{"code":93 ,"codeName":"InvalidReplicaSetConfig","errmsg":"副本集 ID 不匹配,我们的:604d72257a07ddd82163de70;远程节点的:604e566ee4290c91c30c91c3ff6504"}}}

我该如何解决这个问题?我尝试编辑 local.system.replset 但这不起作用。尝试在 rs 初始化中指定 replicaSetId 失败,而且 rs.reconfig 也不会让我更改它。

我知道我可以执行 mongodump 和 mongorestore,但是当有大量数据时这会非常慢。我不能使用来自 AWS 的数据/卷/备份/快照吗?如果 AWS 上的所有 3 台服务器同时出现故障,会发生什么情况?我也会遇到同样的情况!

【问题讨论】:

  • 启动第一个 mongod 作为单个节点(使用该数据)(而不是作为 RS)。当它运行时,执行“rs.initiate()”。然后逐个节点 rs.add()。

标签: mongodb mongodb-replica-set


【解决方案1】:

任何想要清除现有副本集的人都需要执行以下步骤:

在没有 --replSet 标志的情况下启动 mongod

在 mongo shell 上运行它

use admin
db.grantRolesToUser("admin", [{ role: "__system", db: "admin" }])
use local
db.dropDatabase()
use admin
db.revokeRolesFromUser("admin", [{ role: "__system", db: "admin" }])

然后用 --replSet 标志重新启动 mongod,就像没有启动任何 RS 一样

从这里开始,您在主节点上启动它,然后对其他节点执行相同操作并添加每个节点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 2016-06-05
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    相关资源
    最近更新 更多