如何在生产环境中的node.js服务器中处理MongoDB集群的故障转移

时间:2016-08-31 21:26:41

标签: node.js mongodb mongoose

我正在使用带有node.js的mongoDB(3节点集群),现在当我的mongoDB集群关闭时,最好的做法是什么,我应该停止服务器还是停止接收新请求并处理当前请求以及如何重试再次连接mongoDB。

我读过关于使用Domain等许多内容的内容,但由于它已被弃用,我处于使用与否的两难境地。

大多数公司在生产中使用什么方法

还有一件事,如果我的mongoDB服务器关闭然后使用mongoose如何在我使用mongoose编写的查询中捕获此错误。

以下是我的代码如何将我的服务器与mongoDB连接。

var mongoose = require('mongoose');
var config = require('./config/database.js');
var DB_URL = config.db.url;

mongoose.connection.on("connected", function(ref) {
    console.log("Connected to " + " DB!");
});

mongoose.connection.on("error", function(err) {
    console.error('Failed to connect to DB ' + ' on startup ', err);
    if (err) {
        return next(err);
    }
});

mongoose.connection.on('disconnected', function(err) {
    console.log('Mongoose default connection to DB :' + ' disconnected');
    if (err) {
        return next(err);
    }
});

var gracefulExit = function() { 
    mongoose.connection.close(function () {
        console.log('Mongoose default connection with DB :'  + ' is disconnected through app termination');
        process.exit(0);
    });
}

process.on('SIGINT', gracefulExit).on('SIGTERM', gracefulExit);

exports.con_close = function () {
    console.log('Mongoose connection disconnected');
    mongoose.connection.close();
}

var options = {
    server: {
        socketOptions: {
            keepAlive: 1000,
            connectTimeoutMS: 30000
        }
    },
    replset: { 
        rs_name: 'replicaset',
        auto_reconnect:true,
        socketOptions: {
            keepAlive: 1000, // doubt about it
            connectTimeoutMS: 30000
        } 
    },
    user: 'root',
    pass: 'G3saGT2Y',
    auth: {
        authdb: 'admin'
    }
}

mongoose.connect(DB_URL, options, function(err) {
    console.log('ho rha hai');
    if (err) {
        console.log('error connection to mongo server!');
        console.log(err);
    }
});

任何在生产模式下使用mongo和node.js的人请告诉我你使用了哪些方法,这对我解决这种情况真的有帮助。

0 个答案:

没有答案