相关疑难解决方法(0)

Azure上的MongoDB连接问题

我们将一个ASP.NET MVC应用程序部署到Azure网站,该网站连接到MongoDB并执行读写操作.应用程序迭代地执行此操作.每分钟几千次.

我们使用Autofac初始化C#驱动程序,并按照https://groups.google.com/forum/#!topic/mongodb-user/_Z8YepNHnbI和其他一些地方的建议将MaxConnectionIdleTime设置为45秒.

我们仍然收到大量以下错误:

无法从传输连接读取数据:连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接主机无法响应而建立连接失败.方法消息:":{"ClassName":"System.IO.IOException","Message":"无法从传输连接读取数据:连接尝试失败,因为连接方在一段时间后没有正确响应,或已建立的连接失败,因为已连接的主机无法响应.

在连接到Azure上相同数据中心/区域中的VM上部署的MongoDB实例时,以及连接到外部PaaS MongoDB提供程序时,我们会收到此错误.

我在本地计算机上运行相同的代码并连接到同一个数据库,但我没有收到这些错误.只有当我将代码部署到Azure网站时才会这样.有什么建议?

c# azure mongodb

13
推荐指数
1
解决办法
3736
查看次数

如何为MongoDB服务器从属副本指定套接字超时

当Mongo数据库(版本3.0.5)从主数据库服务器复制到从服务器时,我得到套接字错误110(连接超时),更准确地说,在提交该数据库的复制时(从服务器的日志在下面).我想可能原因就是数据库很大并且发送操作提交需要花费太多时间.

如何为mongo服务器指定不同的套接字超时?如果不可能,有没有其他方法来修复复制?

我发现这样的选项只适用于mongo客户端(连接字符串选项socketTimeoutMS),但它对Mongo服务器没有帮助.

2016-04-26T13:36:34.693+0100 I INDEX    [rsSync]         done building bottom layer, going to commit     
2016-04-26T13:36:34.693+0100 I INDEX [rsSync] build index done.  scanned 30980334 total records. 4072 secs    
2016-04-26T13:36:34.772+0100 I REPL     [rsSync] initial sync cloning db: {skipped db name}    
2016-04-26T13:36:34.823+0100 I NETWORK  [rsSync] Socket say send() errno:110 Connection timed out {skipped ip}:27017    
2016-04-26T13:36:34.828+0100 E REPL     [rsSync] 9001 socket exception [SEND_ERROR] server [{skipped ip}:27017]     
2016-04-26T13:36:34.828+0100 E REPL     [rsSync] initial sync attempt failed, 9 attempts remaining
Run Code Online (Sandbox Code Playgroud)

更新.我在评论中被要求输出rs.status():

{       "set" : "<skippedsetname>",
        "date" …
Run Code Online (Sandbox Code Playgroud)

sockets mongodb database-replication replicaset

6
推荐指数
1
解决办法
1908
查看次数

MongoDB 连接超时 (Azure)

我有一个使用 MongoLab 插件托管在 Windows Azure 上的应用程序,我遇到了一个问题,即应用程序在我部署后运行良好,但是在几分钟不活动后,我收到一个数据库错误:

没有可用于使用 ReadPreference PRIMARY 查询的主副本集

在我重新启动相同模式返回的网站之前,此错误不会消失 - 直到错误返回几分钟后才能完美运行

我的基本应用代码:

mongoConnect(process.env.CUSTOMCONNSTR_MONGOLAB_URI, {
server: {
    auto_reconnect: true,
    socketOptions: {
        socketTimeoutMS: 120000,
        keepAlive: 1
    }
},
replSet: {
    socketOptions: {
        socketTimeoutMS: 120000,
        keepAlive: 1
    }
}
}).then(function (db) {
    //app configure ...

    http.createServer(app).listen(app.get('port'), function () {
        console.log("Express server listening on port " + app.get('port'));
    });
});
Run Code Online (Sandbox Code Playgroud)

*mongoConnect 是 mongoclient.connect 的一个简单的“promisified”函数

我知道这是最佳实践,我正在与数据库建立一个连接,然后为所有请求重用该数据库对象。通过阅读https://support.mongolab.com/entries/23009358-Handling-dropped-connections-on-Windows-Azure 之类的内容,我将 sockettimeouts 设置为 2 分钟,以防止任何防火墙过早杀死套接字并自动重新连接到true 所以它们重新连接,但是这两种设置都不能解决问题。

azure mongodb node.js

5
推荐指数
0
解决办法
1518
查看次数