MongoDB ServerSelectionTimeoutError:副本集名称“abc”没有可用的副本集成员

MongoDB ServerSelectionTimeoutError:副本集名称“abc”没有可用的副本集成员

我是一名经验丰富的程序员,但 Python、Ubuntu 和 Linux 方面却是新手。如果这个问题在其他论坛上提出会更好,我深表歉意。

我正在使用 PyCharm 开发一个 Python 项目,代码在 Vagrant 中的 Ubuntu 环境中执行。它必须访问 MongoDb 数据库。

当数据库是本地数据库时,我没有遇到任何困难。我也可以连接到一个远程数据库。但是,我最想连接的数据库是副本集的一部分,这似乎是问题所在。

(我应该说具有副本集的数据库在其实际角色中表现很好。我似乎是有问题的人。)

ssh我们根据以下建议建立了一些隧道:

通过 SSH 连接到 Mongo 副本集

我们设立hostsifconfig适当。

我的主管现在可以毫无困难地连接。但是,我不断收到此消息:

pymongo.errors.ServerSelectionTimeoutError: No replica set members available for replica set name "abc"

连接信息包括所有 3 个副本集服务器作为字符串的一部分host,加上指定的副本集名称和ReadPreference.PRIMARY

堆栈轨迹如下所示:

File "/usr/local/src/dashboard/dashboard/dashboard/app/tasks/exports/__init__.py", line 95, in get_sections
    sections = CourseSection.objects(**params)
File "/apps/dashboard-env/lib/python3.4/site-packages/mongoengine/queryset/manager.py", line 37, in __get__
    queryset = queryset_class(owner, owner._get_collection())
File "/apps/dashboard-env/lib/python3.4/site-packages/mongoengine/document.py", line 198, in _get_collection
    cls.ensure_indexes()
File "/apps/dashboard-env/lib/python3.4/site-packages/mongoengine/document.py", line 878, in ensure_indexes
  collection.create_index(fields, background=background, **opts)
File "/apps/dashboard-env/lib/python3.4/site-packages/pymongo/collection.py", line 1753, in create_index
    self.__create_index(keys, kwargs, session, **cmd_options)
File "/apps/dashboard-env/lib/python3.4/site-packages/pymongo/collection.py", line 1641, in __create_index
    with self._socket_for_writes() as sock_info:
File "/apps/dashboard-env/lib/python3.4/site-packages/pymongo/collection.py", line 193, in _socket_for_writes
    return self.__database.client._socket_for_writes()
File "/apps/dashboard-env/lib/python3.4/site-packages/pymongo/mongo_client.py", line 965, in _socket_for_writes
    server = self._get_topology().select_server(writable_server_selector)
File "/apps/dashboard-env/lib/python3.4/site-packages/pymongo/topology.py", line 224, in select_server
    address))
File "/apps/dashboard-env/lib/python3.4/site-packages/pymongo/topology.py", line 183, in select_servers
    selector, server_timeout, address)
File "/apps/dashboard-env/lib/python3.4/site-packages/pymongo/topology.py", line 199, in _select_servers_loop
    self._error_message(selector))
pymongo.errors.ServerSelectionTimeoutError: No replica set members available for replica set name "abc"

这个特定的消息No replica set members available for replica set name "abc"似乎相对不常见,因为我没有在 Google 上找到任何关于特定命名副本集的问题。

任何建议将不胜感激。

答案1

我已经解决了我自己的问题。

事实证明,为了改变我运行代码的数据库,我需要执行以下操作:

  1. 终止sshVagrant 上的所有会话,以关闭所有现有隧道。
  2. 停止本地mongod服务: service mongod stop
  3. 如果打开新隧道:ssh在 Vagrant 上执行所需命令以创建所需隧道。如果本地连接,则无需执行任何操作。
  4. 重新开始mongodservice mongod start

现在我的代码可以无错误地连接。

可能有更好的方法来实现这一点,但这让我能够做我想做的事情。

相关内容