복붙노트

[MONGODB] 합니까 MongoDB를 다시 연결 문제가 아니면 내가 잘못을하고있는 중이 야?

MONGODB

합니까 MongoDB를 다시 연결 문제가 아니면 내가 잘못을하고있는 중이 야?

나는 nodejs와 MongoDB를 사용하고 - 나는 어떤 연결 문제에 봉착했습니다.

음, 사실 "계기"문제! 슈퍼 빠른 내가 일반적으로 결과에 만족 해요 - 그것은 완벽하게 연결합니다.

내 문제 : 나는 잠시 동안 연결을 사용하지 않는 경우가 실속 것 (시간 틀이 5+ 분 다르기 때문에 난, 동안 말). 나는 단선 이벤트를 해고하지 않습니다 - 그것은 바로 중단됩니다.

결국 내가 오류 같은 응답을 얻을 : 연결하지 못했습니다 [* .mongolab.com : * - (* = 마스크 값)

응용 프로그램의 빠른 다시 시작하고 연결의 위대한 다시. 내가 응용 프로그램을 다시 시작하지 않는 경우 때때로, 나는 새로 고칠 수 있고 행복하게 다시 연결합니다.

내가 그것을 "계기"문제라고 생각하는 이유입니다.

코드의 거친 개요 :

나는 코드를 포함 적이 없다 - 나는 그것이 필요한 생각하지 않습니다. 그것은 (연결 드롭 아웃에서 떨어져) 작동

참고 사항 : 단지 하나의 "연결"이 - 결코 가까운 내가 그것. 나는 다시하지 않습니다.

나는 socketio, 몽구스를 사용하고 있습니다.

/* constants */

var mongoConnect = 'myworkingconnectionstring-includingDBname';


/* includes */

/* settings */

/* Schema */

var db = mongoose.connect(mongoConnect);

    /* Socketio */

io.configure(function (){
    io.set('authorization', function (handshakeData, callback) {

    });
});

io.sockets.on('connection', function (socket) {

});//sockets

io.sockets.on('disconnect', function(socket) {
    console.log('socket disconnection')
});

/* The Routing */

app.post('/login', function(req, res){  

});

app.get('/invited', function(req, res){

});

app.get('/', function(req, res){

});

app.get('/logout', function(req, res){

});

app.get('/error', function(req, res){

});

server.listen(port);
console.log('Listening on port '+port);

db.connection.on('error', function(err) {
    console.log("DB connection Error: "+err);
});
db.connection.on('open', function() {
    console.log("DB connected");
});
db.connection.on('close', function(str) {
    console.log("DB disconnected: "+str);
});

나는 열고 모든 시간을 닫는 것처럼, 여기에 다양한 CONFIGS을 시도 - 그래도, 일반적인 합의가 내가 한 개방 포장 제비와 나처럼하는 것입니다 생각합니다. ??

나는이 나타납니다가의 모든게 확인 말을해도 ... 연결 상태를 점검 유지하는 연결 테스터를 시도 - 문제는 여전히 발생합니다.

나는 일 하나에서이 문제가 있었다. 나는 항상 MongoLab와 MongoDB를 개최했다. 문제는 로컬 호스트에 악화 ​​될 것으로 보인다. 하지만 난 여전히 문제 하늘빛에 지금 nodejit.su 있습니다.

이 모든 곳에서 공교롭게도 - 그것은 나, MongoDB를, 또는 mongolab해야합니다.

그런데 내가 너무 PHP 드라이버와 비슷한 경험이 있었다. (하지만이 nodejs에 확인)

누군가가 그냥 "이 정상입니다"라고하더라도 - 그것은 몇 가지 도움이 좋을 것

사전에 감사합니다

해결법

  1. ==============================

    1.업데이트 :이 주제에 대한 우리의 지원 문서 (이 게시물의 본질적 사본) 우리의 연결 문제 해결 문서로 이동했습니다.

    업데이트 :이 주제에 대한 우리의 지원 문서 (이 게시물의 본질적 사본) 우리의 연결 문제 해결 문서로 이동했습니다.

    애저 IaaS의 네트워크가 약 십삼분 (경험적에 도착)의 유휴 시간 제한을 적용하는 알려진 문제가 있습니다. 우리는 우리가 더 많은 사용자 친화적 인 일을 할 수 있는지 확인하기 위해 푸른 작업을하고 있지만 그 동안 다른 사람의 문제를 해결하려면 자신의 드라이버 옵션을 구성하여 성공을 거두었습니다.

    최대 연결 유휴 시간

    우리는 푸른하고 고객과의 작업에서 발견 한 가장 효과적인 해결 방법은 사분 아래의 최대 연결 대기 시간을 설정하고있다. 아이디어는 방화벽 세력 전에 드라이버 재활용 유휴 연결 문제를 확인하는 것입니다. 예를 들어, C #을 드라이버를 사용하는 한 고객은 1 분에 MongoDefaults.MaxConnectionIdleTime를 설정하고 자신의 문제를 정리.

    MongoDefaults.MaxConnectionIdleTime = TimeSpan.FromMinutes(1);
    

    응용 프로그램 코드 자체는 변경하지 않은,하지만 지금은 무대 뒤에서 드라이버가 적극적으로 유휴 연결을 재활용합니다. 결과뿐만 아니라 서버 로그에서 볼 수있다 : 연결 이탈 많은 응용 프로그램에서 유휴 기간 동안.

    관련 몽고 사용자 스레드에서이 방법에 대한 자세한 내용이 있습니다, SocketException이는 푸른에 C #을 드라이버를 사용.

    살아 유지

    또한 킵 얼라이브의 일종과의 연결이 덜 유휴하여 문제를 해결할 수 있습니다. 이 드라이버는 보통 TCP 연결 유지를 활용하여, 상자의 그것을 지원하지 않는 구현하기 위해 조금 까다 롭습니다. 당신이 자신의 롤해야하는 경우, 몇 가지 간단한 저렴한 명령, 아마 핑마다 몇 분 풀에서 각 유휴 연결을 잡고 실행해야합니다.

    연결 해제 처리

    끊고도 공격적인 방화벽 설정없이 수시로 발생할 수 있습니다. 당신이 생산에 들어가기 전에 당신은 올바르게 처리해야 할.

    첫째, 자동 재 연결을 가능하게해야합니다. 어떻게하는 것은 그래서 드라이버로 드라이버에서 다양하지만 연결이 자동 재 연결에 나쁜 선회했기 때문에 작업이 실패했음을 드라이버 감지 드라이버를 말할 때 다시 연결을 시도 할 수 있습니다.

    그러나 이것은 완전히 문제가 해결되지 않습니다. 당신은 여전히 ​​재 연결을 트리거 실패한 작업과 함께 무엇을해야하는지의 문제를 가지고있다. 자동 재 연결이되지 자동으로 재 시도 실패 작업을 수행합니다. 즉, 특히 쓰기를 들어, 위험 할 것입니다. 그래서 일반적으로 예외가 발생하고 응용 프로그램을 처리하도록 요청된다. 종종 읽고 다시 시도하는 것은 생각할 필요도 없다. 그러나 다시 시도 쓰기 신중하게 고려되어야한다.

    몽고 쉘 세션은 아래의 문제를 보여줍니다. 기본적으로 몽고의 쉘은 자동 재 연결을 사용할 수있다. 그때 모음라는 이름의 물건에서 문서를 삽입하는 컬렉션의 모든 문서를 찾을 수 있습니다. 나는 다음 30 분 동안 타이머를 설정하고 다시 같은 발견을 시도했다. 그것은 실패했지만 쉘은 자동으로 다시 연결하고 나는 즉시 나의 발견을 시도 할 때 예상대로 일했다.

    % mongo ds012345.mongolab.com:12345/mydatabase -u *** -p *** 
    MongoDB shell version: 2.2.2 
    connecting to: ds012345.mongolab.com:12345/mydatabase 
    > db.stuff.insert({}) 
    > db.stuff.find() 
    { "_id" : ObjectId("50f9b77c27b2e67041fd2245") } 
    > db.stuff.find() 
    Fri Jan 18 13:29:28 Socket recv() errno:60 Operation timed out 192.168.1.111:12345 
    Fri Jan 18 13:29:28 SocketException: remote: 192.168.1.111:12345 error: 9001 socket exception [1] server [192.168.1.111:12345] 
    Fri Jan 18 13:29:28 DBClientCursor::init call() failed 
    Fri Jan 18 13:29:28 query failed : mydatabase.stuff {} to: ds012345.mongolab.com:12345 
    Error: error doing query: failed 
    Fri Jan 18 13:29:28 trying reconnect to ds012345.mongolab.com:12345 
    Fri Jan 18 13:29:28 reconnect ds012345.mongolab.com:12345 ok 
    > db.stuff.find() 
    { "_id" : ObjectId("50f9b77c27b2e67041fd2245") }
    

    무엇을 도와 드릴까요?

    당신이 경우 물론, 질문은 support@mongolab.com에 문의 해 주시기 바랍니다. 우리가 도와 드리겠습니다.

  2. ==============================

    2.모든 도움들 주셔서 감사합니다 - 내가 모두 로컬 호스트에서이 문제를 해결하기 위해 관리 및 라이브 서버에 배포했다.

    모든 도움들 주셔서 감사합니다 - 내가 모두 로컬 호스트에서이 문제를 해결하기 위해 관리 및 라이브 서버에 배포했다.

    여기 내 지금 작업 연결 코드는 다음과 같습니다

    var MONGO = {
        username: "username",
        password: "pa55W0rd!",
        server: '******.mongolab.com',
        port: '*****',
        db: 'dbname',
        connectionString: function(){
            return 'mongodb://'+this.username+':'+this.password+'@'+this.server+':'+this.port+'/'+this.db;
        },
        options: {
            server:{
                auto_reconnect: true,
                socketOptions:{
                    connectTimeoutMS:3600000,
                    keepAlive:3600000,
                    socketTimeoutMS:3600000
                }
            }
        }
    };
    
    var db = mongoose.createConnection(MONGO.connectionString(), MONGO.options);
    
    db.on('error', function(err) {
        console.log("DB connection Error: "+err);
    });
    db.on('open', function() {
        console.log("DB connected");
    });
    db.on('close', function(str) {
        console.log("DB disconnected: "+str);
    });
    

    내가 전에 이것을 사용했다,하지만 어쩌면 옵션이 지금 도움이 - 나는 가장 큰 변화는 "연결"을 통해 "createConnection"를 사용하는 것이 었습니다 생각합니다. 이 문서에서는 많은 도움 http://journal.michaelahlers.org/2012/12/building-with-nodejs-persistence.html

    @jareed에서 언급 한 바와 같이, 나는 또한 "MaxConnectionIdleTime"성공을 가진 사람들을 발견 - - 나는 정직하면 나는 이러한 옵션을 추가 한 이유에 대해 지나치게 모르겠지만 최대한 멀리 볼 수있는 자바 스크립트 드라이버는하지 않습니다 이 옵션이 있습니다 :이 동작을 복제하는 것을 시도하려고 시도한이었다.

    지금까지 좋은 있도록 -이 사람을 도움이되기를 바랍니다.

    UPDATE : 2013년 4월 18일 노트, 이것은 다른 설정으로 두 번째 응용 프로그램입니다

    지금은 내가이 해결했다고 생각하지만 문제는 최근에 다른 응용 프로그램에 다시의 추한 머리 장미 - 동일한 연결 코드. 혼란!

    그러나 셋업이 약간 달랐다 ...

    이 새로운 응용 프로그램은 IISNode을 기준 상자 윈도우에서 실행되었다. 나는 처음에 중요하게이 표시되지 않았다.

    내가 AWS로 DB를 이동 있도록 몽고 몇 가지 문제가, 푸른 (@jareed)에 가능성이 있었다 읽기 - 여전히 문제가 지속되었다.

    그래서 나는 거기에 꽤 많이 읽고, 다시 옵션에 대한 객체 연주하기 시작했다. 이 결론에 도달했다 :

    options: {
        server:{
            auto_reconnect: true,
            poolSize: 10,
            socketOptions:{
                keepAlive: 1
            }
        },
        db: {
            numberOfRetries: 10,
            retryMiliSeconds: 1000
        }
    }
    

    즉 좀 더 내 원래 옵션이 난 상태를 반대하는 것이 교육이다. 그러나 - 여전히 좋지 않습니다.

    자, 어떤 이유로 난 창 (모듈 그것에 컴파일되지 함께 할 수있는 뭔가를) 상자 있음을 하차해야했다 -이 작업에려고 다른 주에 지출보다 이동하기 쉽게했다.

    그래서 나는 nodejitsu에 내 응용 프로그램을 이동했다. 저와 나의 연결 보라는 살아 있었다! 우!

    그래서…. 이 의미를 무엇 ... 나는 아무 생각이 없다! 내가 알고 할 것은 ... 이러한 옵션이 Nodejitsu에 작동하는 것입니다. 나를 위해.

    나는 IISNode 살아 응용 프로그램을 유지하기 위해 "영원히"스크립트의 어떤 종류를 사용 믿습니다. 이제 앱에서의 킥이에 대한 충돌하지 않는 공정하게,하지만 난 항상 새로 고쳐집니다 "응용주기"의 일종이 있어야합니다 생각하는 -이 그것을 연속 배포 (FTP 코드까지, 필요를 할 수있는 방법입니다 ) 응용 프로그램을 다시 시작 - 어쩌면 이것은 요인이다; 하지만 난 지금 같은데요.

    지금은 물론 모든 수단 중이 해결되지이다. 아직 해결되지 것. 그냥 내 설정에서 나를 위해 해결합니다.

  3. ==============================

    3.여전히이 문제를 가진 사람들을위한 권고 사항의 몇 :

    여전히이 문제를 가진 사람들을위한 권고 사항의 몇 :

  4. ==============================

    4.이 같은 auto_reconnect 서버 옵션을 사용 :

    이 같은 auto_reconnect 서버 옵션을 사용 :

    var db = mongoose.connect(mongoConnect, {server: {auto_reconnect: true}});
    

    연결 여기있는 거 오프닝은 연결하는, 그래서 실제로 맞아요을 (기본적으로) (5 개) 연결 풀이며 열어 둡니다. 내 생각 엔 당신이 간헐적으로 mongolab와의 연결을 잃고 그 발생 때 연결이 죽을 것입니다. 바라 건데, auto_reconnect 해결되는 것을 가능하게한다.

  5. ==============================

    5.증가 시간 초과 도움이 될 수 있습니다.

    증가 시간 초과 도움이 될 수 있습니다.

  6. ==============================

    6.나는 비슷한 문제가 주기적으로 MongoDB를에서 분리되고 있었다. 두 가지를 고정하고 :

    나는 비슷한 문제가 주기적으로 MongoDB를에서 분리되고 있었다. 두 가지를 고정하고 :

  7. from https://stackoverflow.com/questions/13980236/does-mongodb-have-reconnect-issues-or-am-i-doing-it-wrong by cc-by-sa and MIT license