2017-01-27 4 views
0

Немного фона: я использовал Bitnami, чтобы развернуть кластер Mongo 3 узла на Azure (1 арбитр), каждый монгод размещался на отдельных виртуальных машинах. Я подтвердил, что набор реплик существует и что каждый узел может подключаться друг к другу. Я подтвердил, что когда я удаляю свой основной узел, вторичный узел поднимается вверх. Когда первичный узел возвращается, он снова принимает основное положение.Набор реплик PyMongo MongoClient не будет подключаться

Моя проблема заключается в том, что я не могу подключиться к моей реплике MongoDB с использованием MongoClient при указании replicaset. Я получаю эту ошибку:

pymongo.errors.ServerSelectionTimeoutError: ArbiterIP:27017: [WinError 10061] No connection could be made because the target machine actively refused it,PrimaryIP:27017: [WinError 10061] No connection could be made because the target machine actively refused it,SecondaryIP:27017: timed out

Использование MongoClient, если я:

connection = MongoClient('MyIP1:27017', w=2)

, он соединяется отлично. Когда я делаю

connection = MongoClient('MyIP1:27017', w=2, replicaset="repsetname") 

, вот когда я получу ошибку.

Будет ли это связано с тем фактом, что узел-арбитр не имеет информации о пользователе для аутентификации?

ответ

0

Принимать на него удар: если вы подключаетесь к оболочке и выполняете db.isMaster(), то имена хостов, которые вы видите в конфигурации, такие же, как имена хостов, такие как «MyIP», которые вы передаете PyMongo?

Похоже, что когда вы передаете «replicaset =», PyMongo берет имена хостов из ответа isMaster и подключается к ним вместо MyIP, но как настроен ваш набор реплик, этот набор имен хостов недоступен.

Для получения дополнительной информации о том, почему PyMongo действует так:

https://github.com/mongodb/specifications/blob/master/source/server-discovery-and-monitoring/server-discovery-and-monitoring.rst#clients-use-the-hostnames-listed-in-the-replica-set-config-not-the-seed-list

+0

В сообщении об ошибке, то IP-адрес, перечисленном в хосте IP-адрес, указанный в db.isMaster(). В моем коде на Python мой «MyIP» - это IP-адрес виртуальной машины, на которой размещен основной узел. Когда я пытаюсь использовать IP-адрес хоста для подключения, я получаю тайм-аут. –

 Смежные вопросы

  • Нет связанных вопросов^_^