当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
更新。我在评论中要求输出rs.status():
{ "set" : "<skippedsetname>",
"date" : ISODate("2016-05-04T15:35:06.717Z"),
"myState" : 5,
"syncingTo" : "<skipped domain name of other server>:27017",
"members" : [
{
"_id" : 0,
"name" : "<skipped domain name of this server>:27017",
"health" : 1,
"state" : 5,
"stateStr" : "STARTUP2",
"uptime" : 29,
"optime" : Timestamp(0, 0),
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"syncingTo" : "<skipped domain name of other server>:27017",
"configVersion" : 9,
"self" : true
},
{
"_id" : 2,
"name" : "10.0.1.7:27017",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 26,
"lastHeartbeat" : ISODate("2016-05-04T15:35:05.859Z"),
"lastHeartbeatRecv" : ISODate("2016-05-04T15:35:06.347Z"),
"pingMs" : 3,
"configVersion" : 9
},
{
"_id" : 3,
"name" : "<skipped domain name of other server>:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 26,
"optime" : Timestamp(1462376105, 196),
"optimeDate" : ISODate("2016-05-04T15:35:05Z"),
"lastHeartbeat" : ISODate("2016-05-04T15:35:05.859Z"),
"lastHeartbeatRecv" : ISODate("2016-05-04T15:35:06.086Z"),
"pingMs" : 4,
"electionTime" : Timestamp(1461688501, 1),
"electionDate" : ISODate("2016-04-26T16:35:01Z"),
"configVersion" : 9
}
],
"ok" : 1 }
更新。我应该提到托管使用的是Azure。查询&#34; azure mongodb连接超时&#34;完全用Google搜索Answer and explanation。我的坏。
答案 0 :(得分:3)
您对错误原因的假设是错误的。
Connection timed out
:在尝试建立TCP连接期间,在给定的时间限制内没有来自另一方的响应。 换句话说,它是建立套接字的问题,而不是复制数据库需要多长时间的问题。
调整TCP超时是系统设置,而不是每个应用程序执行的操作。 Linux上的设置位于系统范围内/etc/sysctl.conf,net.ipv4.tcp_syn_retries
- {strong>但是你可以play around几乎不会更改建立的超时时间一个套接字(对于任何程序,包括mongo),我改变它的次数是为了让它更短,以便更快地获得错误,而不是增加它 - 增加它不可能是任何地球应用程序中的正确解决方案
问题是配置问题 - 比如您的设置中有一些错误的IP地址,或网络问题,例如防火墙,路由表或网络交换机有时无法工作60-120秒一次。
答案 1 :(得分:0)
可能有一些文件锁定了奴隶中的文件系统。如果我在哪里,我将从副本中删除该节点,然后擦除dbpath
下的所有文件,检查mongo用户是否可以访问此目录并重新启动mongod
。一旦运行,将其添加回RS并等待它。另见:https://docs.mongodb.org/manual/tutorial/recover-data-following-unexpected-shutdown/#mongod-lock