MongoDB ServerSelectionTimeoutError: Nenhum membro do conjunto de réplicas disponível para o nome do conjunto de réplicas “abc”

3

Sou um programador experiente, mas um novato em Python, Ubuntu e Linux. Peço desculpas, também, se essa questão fosse melhor em um fórum diferente.

Estou trabalhando em um projeto em Python usando PyCharm, com código executando em um ambiente Ubuntu no Vagrant. Tem que acessar um banco de dados MongoDb.

Quando o banco de dados é local, não tenho dificuldades. Eu também posso conectar a um banco de dados remoto. No entanto, o banco de dados ao qual eu mais quero me conectar é parte de um conjunto de réplicas, e esse parece ser o problema.

(Devo dizer que o banco de dados com o conjunto de réplicas tem um desempenho muito bom em seu papel real. Parece que eu sou o único com o problema.)

Nós configuramos alguns ssh túneis usando estas sugestões:

Conectando-se a um conjunto de réplicas do Mongo via SSH

Nós configuramos hosts e ifconfig apropriadamente.

Meu supervisor agora pode se conectar com dificuldade mínima. Eu, no entanto, continuo recebendo esta mensagem:

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

As informações de conexão incluem todos os 3 servidores de conjunto de réplicas como parte da sequência host , além do nome do conjunto de réplicas especificado e ReadPreference.PRIMARY .

A faixa da pilha é assim:

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"

A mensagem específica No replica set members available for replica set name "abc" parece ser relativamente incomum, pois não encontrei nenhum acesso ao Google por problemas com um conjunto específico de réplicas.

Qualquer sugestão seria muito apreciada.

    
por Ann L. 20.03.2018 / 16:38

1 resposta

0

Eu resolvi meu próprio problema.

Acontece que, para alterar em qual banco de dados eu executo o código, preciso fazer o seguinte:

  1. Mate todas as ssh sessões no Vagrant, para fechar quaisquer túneis existentes.
  2. Pare o mongod service local: service mongod stop
  3. Se abrir um novo túnel: execute o comando ssh desejado no Vagrant para criar o túnel desejado. Se conectar localmente, não faça nada.
  4. Reinicie o mongod : service mongod start

E agora meu código se conectará sem erros.

Pode ser que haja uma maneira melhor de conseguir isso, mas isso me permite fazer o que eu queria fazer.

    
por Ann L. 21.03.2018 / 15:04