跳转至

02 mongo使用副本集时连接报错

mongo 使用副本集时连接报错

问题描述

mongo部署方案

  • 副本集 :rs0

  • 部署方式: docker

  • 连接方式: pymongo

  • 脚本:

    from pymongo import MongoClient
    
    # 连接到MongoDB实例
    client = MongoClient('mongodb://localhost:27017/')
    
    # 使用admin数据库
    db = client['admin']
    
    # 查询服务器状态
    server_status = db.command('serverStatus')
    
    # 打印服务器状态信息
    print(server_status)
    

  • 报错如下:

$ server_status = db.command('serverStatus')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib64/python3.9/site-packages/pymongo/_csot.py", line 108, in csot_wrapper
    return func(self, *args, **kwargs)
  File "/usr/local/lib64/python3.9/site-packages/pymongo/database.py", line 893, in command
    with self.__client._conn_for_reads(read_preference, session, operation=command_name) as (
  File "/usr/local/lib64/python3.9/site-packages/pymongo/mongo_client.py", line 1375, in _conn_for_reads
    server = self._select_server(read_preference, session, operation)
  File "/usr/local/lib64/python3.9/site-packages/pymongo/mongo_client.py", line 1322, in _select_server
    server = topology.select_server(
  File "/usr/local/lib64/python3.9/site-packages/pymongo/topology.py", line 368, in select_server
    server = self._select_server(
  File "/usr/local/lib64/python3.9/site-packages/pymongo/topology.py", line 346, in _select_server
    servers = self.select_servers(
  File "/usr/local/lib64/python3.9/site-packages/pymongo/topology.py", line 253, in select_servers
    server_descriptions = self._select_servers_loop(
  File "/usr/local/lib64/python3.9/site-packages/pymongo/topology.py", line 303, in _select_servers_loop
    raise ServerSelectionTimeoutError(
pymongo.errors.ServerSelectionTimeoutError: Could not reach any servers in [('mongo', 27017)]. Replica set is configured with internal hostnames or IPs?, Timeout: 30s, Topology Description: <TopologyDescription id: 66bc5c2bc962cd21a880378c, topology_type: ReplicaSetNoPrimary, servers: [<ServerDescription ('mongo', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('mongo:27017: [Errno -3] Temporary failure in name resolution (configured timeouts: socketTimeoutMS: 20000.0ms, connectTimeoutMS: 20000.0ms)')>]>

解决方案

1、连接时指定:directConnection=true

directConnection=true

image-20240814160057698

2、 对于副本集来说, 主节点是自动选举出来的;

- 单节点副本集无法自动选举主节点
- 多节点副本集可以通过调整优先级来干预自动选举主节点

参考文档