Набор реплик не работает должным образом

Я настроил, как показано ниже, и моей MongoDB не нужно имя пользователя или пароль:

mongo: {
    module: 'sails-mongo',
    url: "mongodb://127.0.0.1:27017/mydb",
    replSet: {
        servers: [
            {
                host: "127.0.0.1",
                port : 27018
            },
            {
                host: "127.0.0.1",
                port : 27019
            }
        ],
        options: {connectWithNoPrimary:true, rs_name:"rs0"}
    }      
}

Он работает нормально, то есть я не получаю ошибки подключения и могу выполнять запросы. Но когда я сбил 127.0.0.1:27017, 127.0.0.1:27018 становится ПЕРВИЧНЫМ, как если бы я сделал rs.status(). После этого я больше не могу выполнять какие-либо запросы и продолжаю получать следующее:

Ошибка: нет открытых соединений

Я уверен, что я правильно настроил набор реплик на своем локальном компьютере, поскольку я использовал собственный драйвер MongoDB для тестирования вышеупомянутого сценария (отключите PRIMARY, а SECONDARY станет PRIMARY), и проблем нет.

var url = 'mongodb://127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019/mydb?w=0&wtimeoutMS=5000&replicaSet=sg1&readPreference=secondary';

mongodb.MongoClient.connect(url, function(err, result) {
    if(err || result === undefined || result === null) {
          throw err;
    } else {
          db = result;  
    } 
});

person Mark Thien    schedule 03.06.2014    source источник
comment
Вы пробовали формат строки подключения URL напрямую с параметрами паруса? Также не уверен, сколько узлов в вашем наборе реплик. Только два — не лучшая идея. Кроме того, ваши предпочтения чтения должны быть вторичными, если в результате может получиться только ПЕРВИЧНЫЙ   -  person Neil Lunn    schedule 03.06.2014
comment
в моем наборе реплик есть 3 узла   -  person Mark Thien    schedule 03.06.2014
comment
к вашему сведению, я уже пробовал URL-адрес, и это тоже не сработало. Я копался в коде Sails-Mongo, и для набора реплик у вас должен быть раздел replSet.   -  person Mark Thien    schedule 03.06.2014


Ответы (1)


хорошо, я нашел ответ. Это сообщение выдается из-за session.js. Я прокомментировал все в файле, и теперь он работает. Я думаю, причина в session.js, он указывает только на один хост, который является исходным PRIMARY. когда вы отключаете этот mongodb PRIMARY, session.js больше не может подключаться, поэтому он выдал исключение. Я также попробовал строку URL-адреса mongodb в session.js, вставив также IP-адрес хоста в набор реплик (mongodb://127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019/mydb), но не смог «подъем парусов». Когда ставишь только один хост то нормально.

теперь, если мне нужно сохранить информацию о сеансах, мне нужно запустить другой экземпляр mongodb, а затем session.js укажет на этот новый момент.

person Mark Thien    schedule 06.06.2014