Mongodb Mongo在数据查找过程中找不到主机

Mongodb Mongo在数据查找过程中找不到主机,mongodb,pymongo,Mongodb,Pymongo,我正在使用pymongo运行一个大型数据更新。要运行更新,可以使用集合查找单个记录。查找一个(唯一条件),进行更改,对更新进行批处理,最后使用db.collection.save([要保存的记录的长列表])分块发送。 在我的本地机器(运行1.6.3)上,导入工作正常 在比本地机器快得多的远程服务器(运行1.6.0)上,我可以很好地完成部分插入,但在查找原始记录时会突然出现以下错误: connection = Connection(...) ... raise AutoReconnect("cou

我正在使用pymongo运行一个大型数据更新。要运行更新,可以使用
集合查找单个记录。查找一个(唯一条件)
,进行更改,对更新进行批处理,最后使用
db.collection.save([要保存的记录的长列表])分块发送。

在我的本地机器(运行1.6.3)上,导入工作正常

在比本地机器快得多的远程服务器(运行1.6.0)上,我可以很好地完成部分插入,但在查找原始记录时会突然出现以下错误:

connection = Connection(...)
...
raise AutoReconnect("could not find master/primary")
pymongo.errors.AutoReconnect: could not find master/primary
我能通过的记录数量有所不同,但不是随机的

起初,我以为我正在接近连接极限。每次查找记录后,我开始手动关闭连接:

collection.database.connection.disconnect()

这并没有解决问题。我走对了吗?

因此这里有几个潜在的问题:

raise AutoReconnect("could not find master/primary") 
pymongo.errors.AutoReconnect: could not find master/primary
该错误表示现有连接已以某种方式无效。这种情况可能发生的原因有很多

发生这种情况的最常见原因是副本集的主副本已退出或出现故障。在这种情况下,您的代码需要:

  • 捕捉(或捕捉)错误
  • 决定重试策略。(失败?重试一次?…)
  • 你在这么做吗? 您正在运行复制集还是主/从? 您对这些服务器的性能有任何跟踪吗? 他们有网络问题吗? 他们在转换角色吗

    collection.database.connection.disconnect()

    这并没有解决问题。我走对了吗

    例外情况“发生”在哪里?它是来自连接本身还是来自save命令

    在远程服务器上(运行1.6.0)

    在撰写本文时,1.6.0是MongoDB的一个非常旧的版本。在随后的1.6.x版本和1.7.x版本中修复了多个复制错误。(我们已经达到了1.8.1rc-0)


    首先,我想看看您的服务器发生了什么,但这可能会引导您走上升级之路。

    我在pymongo的交互式python使用中遇到了这个问题,在pymongo中,我让会话处于空闲状态,并在返回时遇到AutoReconnect。我是这样处理的:

    import functools
    import pymongo
    import time
    
    MAX_AUTO_RECONNECT_ATTEMPTS = 5
    
    def graceful_auto_reconnect(mongo_op_func):
      """Gracefully handle a reconnection event."""
      @functools.wraps(mongo_op_func)
      def wrapper(*args, **kwargs):
        for attempt in xrange(MAX_AUTO_RECONNECT_ATTEMPTS):
          try:
            return mongo_op_func(*args, **kwargs)
          except pymongo.errors.AutoReconnect as e:
            wait_t = 0.5 * pow(2, attempt) # exponential back off
            time.sleep(wait_t)
    
      return wrapper
    
    @graceful_auto_reconnect
    def some_func_that_does_mongodb_ops():
      ...
      ...
    

    YMMV

    听起来像是中间的网络连接不可靠,或者中间有人关闭了网络通道。防火墙?我会查一下的。两者都在同一台本地计算机上运行,我正在连接到mongo localhost.Handy helper函数。谢谢