Tôi gặp lỗi socket 110 (Kết nối hết thời gian) khi cơ sở dữ liệu Mongo (phiên bản 3.0.5) được nhân rộng từ máy chủ DB chính sang nô lệ, chính xác hơn tại thời điểm cam kết sao chép của cơ sở dữ liệu đó (nhật ký của nô lệ là dưới đây). Tôi đoán có lẽ lý do cho rằng đó là cơ sở dữ liệu lớn và gửi hoạt động để cam kết phải mất quá nhiều thời gian.Cách xác định thời gian chờ socket cho bản sao nô lệ máy chủ MongoDB
Tôi có thể chỉ định thời gian chờ socket khác nhau cho máy chủ mongo như thế nào? Nếu không thể, có cách nào khác để sửa chữa sao chép không?
Tôi đã tìm thấy tùy chọn như vậy chỉ dành cho khách hàng mongo (tùy chọn chuỗi kết nối socketTimeoutMS) nhưng nó không hỗ trợ máy chủ 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
Cập nhật. Tôi đã yêu cầu đầu ra của rs.status() trong ý kiến:
{ "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 }
Update. Tôi nên nhưng không đề cập đến lưu trữ được sử dụng là Azure. Answer and explanation là hoàn toàn googled bởi truy vấn "azure mongodb kết nối timeout". Lỗi của tôi.
Bạn đang yêu cầu một giải pháp dựa trên phỏng đoán của bạn "Tôi đoán có lẽ lý do là cơ sở dữ liệu lớn và gửi hoạt động để cam kết mất quá nhiều thời gian". Tôi đoán điều này là không đúng, và bạn vấn đề là một vấn đề mạng. Bạn có thể 'telnet {skipped ip} 27017' không? –
@ HéctorValverdePareja Có, tôi đã thử và có thể telnet trên IP và cổng đó. Hơn nữa, như tôi đã nói, lỗi được đề cập xảy ra sau khi bản sao cá thể tải xuống tất cả dữ liệu của cơ sở dữ liệu như được thấy trong nhật ký. Vì vậy, nó là lạ mà nó có thể kết nối với ổ cắm để tải dữ liệu nhưng sau đó không thể kết nối với cùng một cổng cho cam kết hoạt động đó. – boqapt
Và đầu ra của 'rs.status()' là gì? –