2016-09-14 2 views
0

У меня есть приложение nodejs, которое подключается к mongodb.mongodb failover connection

Mongodb позволяет подключать клиентское соединение replicaset для обеспечения уровня устойчивости.

например, «mongodb://localhost:50000,localhost:50001/myproject?replicaSet=foo», клиент сначала подключается к localhost @ 50000, и если он умирает, он переключается на localhost @ 50001.

Это нормально, но если при запуске приложения и если одно из двух монго мертво, приложение умирает - с невозможностью подключения ошибки.

Единственное решение, которое я могу думать, чтобы переформатировать URL, так что исключает неактивный экземпляр, но хотел бы избежать этого ...

Любые идеи?

Благодаря

ответ

1

Replicaset отлично работает, когда у вас есть нечетное число серверов, потому что MongoDB ReplicaSet работы с использованием выборов между узлами для определения того, что сервер будет «основным».

Вы можете добавить новый узел в свой ReplicaSet только для голосования. Это называется «АРБИТЕР».

Вы можете больше узнать о ReplicaSet Elections на этой странице https://docs.mongodb.com/manual/core/replica-set-elections/#replica-set-elections.

1

Как сказал Рафаэль, набор реплик нуждается в нечетном количестве членов, чтобы иметь возможность нормально функционировать, когда некоторые из участников находятся в автономном режиме. Есть больше деталей в Replica Set Elections docs page, но наиболее актуальна:

Если большинство из набора реплик недоступен или недоступен для текущего первичного, первичный шагнет вниз и стать вторичным. Набор реплик не может принимать записи после этого, но оставшиеся члены могут продолжать обслуживать запросы на чтение, если такие запросы настроены для запуска на вторичных серверах.

Драйвер узла по умолчанию для доступа к набору реплик должен быть подключен к Первичному, и выдается сообщение об ошибке, которое вы наблюдаете при попытке подключиться к набору реплик без Первичного.

Это поведение по умолчанию можно изменить, установив connectWithNoPrimary на true. Тем не менее, чтобы иметь возможность делать запросы, вы также должны установить правильный readPreference setting (который также по умолчанию относится к Первичному). Например:

var MongoClient = require('mongodb').MongoClient 

conn = MongoClient.connect('mongodb://localhost:27017,localhost:27018,localhost:27019/test', 
    { 
     replicaSet: 'replset', 
     connectWithNoPrimary: true, 
     readPreference: 'primaryPreferred' 
    }).catch(console.log) 

Более подробную информацию о параметрах подключения можно найти в Node Driver URI Connection Settings page