Запрос к mongodb застрял, если основная сеть кластера потеряна (с помощью PyMongo)

#python #mongodb

#питон #mongodb

Вопрос:

У меня проблема с монго. Вот моя настройка:

  • 3 mongod с репликой, установленной на 3 разных виртуальных машинах
  • 1 mongo-configsvr на каждой из 3 предыдущих виртуальных машин
  • 1 mongos на клиентской виртуальной машине для маршрутизации в 3 mongod
  • Софт, разработанный на Python (совместно с PyMongo)

А теперь моя проблема. Я разрабатываю программное обеспечение, которое требует много монго. Проблема возникла, когда моя основная виртуальная машина mongod потеряла сеть. В это время последний отправленный запрос застрял. Под застрявшим я подразумеваю, что запрос не будет работать, но не вызовет никакого «автосоединения», чтобы позволить мне выполнить запрос снова, чтобы он мог перенаправиться на новый основной. Запрос полностью заблокирован, он вызовет ошибку через 15 минут или если сеть снова включится на предыдущем основном.

Я написал сценарий, чтобы объяснить проблему:

 #!/usr/bin/python # -*- coding: utf-8 -*-  import sys import threading import time from pymongo import MongoClient  def main():    mongo_client = MongoClient()  db = mongo_client.test  collection = db['test']  collection.drop()  collection = db['test']  print u'Connected; lets go !'  while True:  t0 = time.time()  collection.insert({'time': time.time()})  print u'Wait [.6f] | There is %s items in test collection' % ((time.time() - t0), collection.count())  print u'---------------------------------------------------------------'  time.sleep(1)  main()  

Как вы можете видеть в коде, я выполняю один запрос в секунду. Поэтому я позволил сценарию запуститься, а затем отсоединил кабель Ethernet от основного. Сценарий застрял на вставке, печать не будет напечатана до тех пор, пока кабель Ethernet не будет вставлен обратно или через 15 минут.

Я не могу поверить, что ни у кого никогда не было проблемы, так как потерять сеть на самом деле не сложно. Но я ничего не нашел с помощью Google.

Надеюсь, у вас будут ответы, спасибо!