Mongo Java驱动程序-使旧版本失效

时间:2019-07-18 09:24:55

标签: java mongodb

我收到一个错误,新的单节点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可以存储的地方可以删除。

  • 或者,是否可以手动将isMaster.electionId设置为新值,以欺骗应用程序(感觉像是软糖,但是我想一旦超过选举31,应用程序就不会介意了)< / li>

0 个答案:

没有答案