mongo secondary在恢复后没有任何疑问

时间:2014-12-05 09:24:47

标签: mongodb

我有一个测试用例,一个带有1个分片的分片集群。

碎片是rs,它有1个主要和2个辅助。

我的应用程序使用secondaryPreferred策略,首先是两个辅助节点之间的查询平衡。然后我停止1个辅助10.160.243.22来模拟故障,然后重新启动它,状态正常:

rs10032:PRIMARY> rs.status()
{
    "set" : "rs10032",
    "date" : ISODate("2014-12-05T09:21:07Z"),
    "myState" : 1,
    "members" : [
        {
            "_id" : 0,
            "name" : "10.160.243.22:27017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 2211,
            "optime" : Timestamp(1417771218, 3),
            "optimeDate" : ISODate("2014-12-05T09:20:18Z"),
            "lastHeartbeat" : ISODate("2014-12-05T09:21:05Z"),
            "lastHeartbeatRecv" : ISODate("2014-12-05T09:21:07Z"),
            "pingMs" : 0,
            "lastHeartbeatMessage" : "syncing to: 10.160.188.52:27017",
            "syncingTo" : "10.160.188.52:27017"
        },
        {
            "_id" : 1,
            "name" : "10.160.188.52:27017",
            "health" : 1,
            "state" : 1,
            "stateStr" : "PRIMARY",
            "uptime" : 2211,
            "optime" : Timestamp(1417771218, 3),
            "optimeDate" : ISODate("2014-12-05T09:20:18Z"),
            "electionTime" : Timestamp(1417770837, 1),
            "electionDate" : ISODate("2014-12-05T09:13:57Z"),
            "self" : true
        },
        {
            "_id" : 2,
            "name" : "10.160.189.52:27017",
            "health" : 1,
            "state" : 2,
            "stateStr" : "SECONDARY",
            "uptime" : 2209,
            "optime" : Timestamp(1417771218, 3),
            "optimeDate" : ISODate("2014-12-05T09:20:18Z"),
            "lastHeartbeat" : ISODate("2014-12-05T09:21:07Z"),
            "lastHeartbeatRecv" : ISODate("2014-12-05T09:21:06Z"),
            "pingMs" : 0,
            "syncingTo" : "10.160.188.52:27017"
        }
    ],
    "ok" : 1
}

但所有查询都转到另一个辅助10.160.188.5210.160.243.22空闲

为什么查询在恢复后不能平衡到两个辅助节点以及如何解决它?

1 个答案:

答案 0 :(得分:0)

您的应用程序使用某种驱动程序(我不知道您正在使用的确切技术堆栈)来连接MongoDb。您的驱动程序可能会记住(缓存)副本集状态或连接一段时间。因此,无法保证在恢复后立即可以使用辅助节点。