MongoDB副本集主要关闭-Java驱动程序永远等待

时间:2018-11-04 12:09:21

标签: mongodb replicaset

我有设置有3个服务器的mongodb 3.4版副本, 我想模拟网络连接问题 我的应用是用mongo java驱动程序用Java编写的

当我在主服务器中间拔出以太网电缆时 编写像插入这样的操作,mongo驱动程序将永远等待TCP连接恢复,并且我的应用程序卡住,直到我重新连接回以太网电缆。艰难的mongodb副本已选出新的主服务器的事件

应用程序会通知我哪些选项,mongodb服务器已关闭,我需要重新连接到新的主服务器?

我试图更改操作系统tcp_keepalive_time,但是由于我需要很短的确认时间,因此它会广泛影响我的系统。

谢谢, 沙龙

更多信息:

连接字符串:

mongodb://192.168.12.31:27017,192.168.12.32:27017,192.168.12.33:27017

我只有3台服务器,没有仲裁器。我有变量MongoCollection<Document> collection,我正在做find,这需要很长时间,在中间,当客户端等待服务器响应时,我从主mongo服务器上拔了以太网电缆。 mongo驱动程序将永远等待。命令是:

collection.find(matchCriteria)

如果我逻辑上退出主服务器,则会得到MongoSocketReadException。我不想最小化驱动程序的socketTimeOut,因为有时我的操作很长,并且希望能够尽快恢复工作。如果在连接所有服务器时都有新的选举和新的主要选举,则当前操作将失败,并且新选举之后的下一个操作将以新的主要选举成功。这是 rs.conf()

rs0:PRIMARY> rs.conf()
{
        "_id" : "rs0",
        "version" : 11,
        "protocolVersion" : NumberLong(1),
        "members" : [
                {
                        "_id" : 0,
                        "host" : "192.168.12.31:27017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {
                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 1,
                        "host" : "192.168.12.32:27017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {
                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "192.168.12.33:27017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {
                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 1000,
                "heartbeatTimeoutSecs" : 2,
                "electionTimeoutMillis" : 5000,
                "catchUpTimeoutMillis" : 60000,
                "getLastErrorModes" : {
                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("5bd6f31118b9c73f4dda22f8")
        }
}

0 个答案:

没有答案