Mongoデータベース(バージョン3.0.5)をプライマリDBサーバからスレーブに、より正確にはコミット時にソケットエラー110(接続タイムアウト)が発生するそのデータベースの複製(スレーブのログは以下のとおりです)。私はおそらく、その理由は、データベースが大きく、コミットする操作を送信するには時間がかかりすぎるという理由があると思います。MongoDBサーバスレーブレプリカのソケットタイムアウトを指定する方法
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であると言及してはいけませんでした。 Answer and explanationは、「azure mongodb connection timeout」というクエリで完全に検出されます。私の悪い。
あなたは推測に基づいて解決策を求めています。おそらく、その理由はデータベースが大きく、コミットするために操作を送信するには時間がかかりすぎるからです。私はこれが真実ではないと思うし、あなたの問題はネットワーク問題です。 'telnet {skipped ip} 27017'できますか? –
@HéctorValverdeParejaはい私は試して、そのIPとポートでtelnetできます。さらに、私が言ったように、上記のエラーは、レプリカインスタンスがログに記録されているようにデータベースのすべてのデータをダウンロードした後に発生します。そのため、データをダウンロードするためにソケットに接続できても、その操作をコミットするために同じポートに接続できなかったのは不思議です。 – boqapt
'rs.status()'の出力は何ですか? –