レプリカ セットに 1 つのシャードと 3 つのメンバーしかない Mongodb を使用しています。各レプリカ セット メンバーを別のマシンに配置しています。2 つのメンバーにはそれぞれmongos
ルーターがあり、1 つのメンバー (ルーターがある) にはconfig
サーバーがあり、3 つすべてにシャード サーバーがあります。ルーターを持つ mongodb インスタンスのそれぞれの 2 つの IP アドレスに解決される 1 つのホスト名がありmongos
ます。私はmongoose v.2.5.10を使用して、次のコードでnode.jsアプリケーションからmongodbに接続しています:
var mongoose = require('mongoose');
mongoose.connection.on('error', function(err){
console.error('Mongodb connection error: ', err);
});
var db = mongoose.connect('mongodb://username:password@' + mongoHost + '/database');
ルーターを持つ mongodb インスタンスの 1 つを終了することにより、フェイルオーバー シナリオで何が起こるかをシミュレートしmongos
ます。これが発生すると、インスタンスがダウンしていることを検出し、DNS レコードからインスタンスの IP アドレスをプルーニングします。ただし、アプリケーションが mongodb に正しく再接続されていないようです。mongoose のerror
イベントが発行connection
されず、ノード サーバーを再起動するまでアプリケーションがハングします。
ここで何がうまくいかないのでしょうか?
アップデート:
Amazon インスタンスを手動で終了したときにnet
、mongodb node.js クライアントが接続に使用しているクライアント ( ) がorイベントthis.connection = net.createConnection(this.socketOptions.port, this.socketOptions.host);
を受信していないことを確認しました。したがって、これは内部ノードの問題である可能性があるようです...close
error