我收到一个错误,新的单节点mongo群集的ElectionId为7fffffff0000000000000001,但是由于某种原因(并且我不知道自从重新启动Java应用以来如何),它得到了一个旧的ElectionId“ 7fffffff0000000000000031”,可以看到新的优先于此,确定我的集群必须已过期,然后将其从破坏我的应用程序的连接池中删除。
完整错误:
org.mongodb.driver.cluster-使潜在的主要x1.docker-mongo.internal:27017无效,其(设置版本,选举ID)(1,7fffffff0000000000000001)的元组小于已经看到的(1,7fffffff0000000000000031)的元组
在我开始收到此错误之前,有一些背景知识。我以前在docker(v4.0.1)中将这个系统作为3节点mongo集群运行,并决定切换到单个节点。完成此操作后,我从旧数据中备份了新的单节点(以与先前节点相同的dns名称注册)。但是,我没有还原副本配置,并从头开始了。
我已经尝试找出mongo驱动程序从何处获取此旧的lectionId来进行比较,并且发现Java应用程序是无状态的,因此它必须来自Mongo实例。
来自单节点群集的数据:
rs0:PRIMARY> db.runCommand({isMaster:1})
{
"hosts" : [
"x1.docker-mongo.internal:27017"
],
"setName" : "rs0",
"setVersion" : 1,
"ismaster" : true,
"secondary" : false,
"primary" : "x1.docker-mongo.internal:27017",
"me" : "x1.docker-mongo.internal:27017",
"electionId" : ObjectId("7fffffff0000000000000001"),
"lastWrite" : {
"opTime" : {
"ts" : Timestamp(1563439850, 1),
"t" : NumberLong(1)
},
"lastWriteDate" : ISODate("2019-07-18T08:50:50Z"),
"majorityOpTime" : {
"ts" : Timestamp(1563439850, 1),
"t" : NumberLong(1)
},
"majorityWriteDate" : ISODate("2019-07-18T08:50:50Z")
},
"maxBsonObjectSize" : 16777216,
"maxMessageSizeBytes" : 48000000,
"maxWriteBatchSize" : 100000,
"localTime" : ISODate("2019-07-18T08:50:58.735Z"),
"logicalSessionTimeoutMinutes" : 30,
"minWireVersion" : 0,
"maxWireVersion" : 7,
"readOnly" : false,
"ok" : 1,
"operationTime" : Timestamp(1563439850, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1563439850, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
编辑: -我认为我会就如何解决此问题提出一些想法,是否有旧的lectionID可以存储的地方可以删除。