# 如何使用pymongo来连接MongoDB的各种形态 ## 目录 1. [前言](#前言) 2. [基础连接配置](#基础连接配置) - [单节点连接](#单节点连接) - [认证连接](#认证连接) 3. [副本集连接](#副本集连接) 4. [分片集群连接](#分片集群连接) 5. [SRV连接字符串](#srv连接字符串) 6. [连接池优化](#连接池优化) 7. [TLS/SSL加密连接](#tlsssl加密连接) 8. [常见问题排查](#常见问题排查) 9. [总结](#总结) ## 前言 PyMongo是MongoDB官方提供的Python驱动程序,支持连接各种MongoDB部署形态。本文将详细介绍如何通过PyMongo连接: - 单节点实例 - 认证保护的实例 - 副本集(Replica Set) - 分片集群(Sharded Cluster) - 使用DNS种子列表(SRV记录) - 加密连接等场景 > **版本要求**:本文基于PyMongo 4.0+和MongoDB 4.2+编写 ## 基础连接配置 ### 单节点连接 最基本的连接方式,适用于开发环境: ```python from pymongo import MongoClient # 默认连接localhost:27017 client = MongoClient() # 显式指定主机和端口 client = MongoClient('mongodb://localhost:27017/') # 等价写法 client = MongoClient(host='localhost', port=27017)
当MongoDB启用认证时需提供凭证:
# 方式1:URI包含认证信息 client = MongoClient('mongodb://username:password@localhost:27017/dbname') # 方式2:单独参数 client = MongoClient( host='localhost', port=27017, username='username', password='password', authSource='admin' # 认证数据库 )
安全建议: - 不要硬编码密码,使用环境变量 - 生产环境建议使用SCRAM-SHA-256认证
连接副本集需指定多个节点和副本集名称:
# 方式1:URI连接 client = MongoClient( 'mongodb://node1:27017,node2:27017,node3:27017/' '?replicaSet=myReplicaSet' ) # 方式2:参数化配置 client = MongoClient( hosts=[ ('node1', 27017), ('node2', 27017), ('node3', 27017) ], replicaSet='myReplicaSet' )
关键参数: - readPreference
: 指定读取偏好(primary/primaryPreferred等) - localThresholdMS
: 选择最近节点的阈值
连接分片集群通常只需连接mongos路由器:
# 连接单个mongos client = MongoClient('mongodb://mongos1:27017/') # 连接多个mongos实现高可用 client = MongoClient( 'mongodb://mongos1:27017,mongos2:27017/' )
注意事项: - 分片集群的配置服务器和分片节点不应直接连接 - 生产环境建议至少部署2个mongos实例
适用于DNS配置的集群(如Atlas):
# Atlas连接示例 client = MongoClient( 'mongodb+srv://username:password@cluster0.mongodb.net/dbname' '?retryWrites=true&w=majority' )
SRV记录自动提供: - 所有节点地址 - 副本集名称 - TLS配置
PyMongo默认维护连接池,可通过参数调优:
client = MongoClient( maxPoolSize=100, # 最大连接数 minPoolSize=10, # 最小保持连接数 maxIdleTimeMS=30000, # 连接空闲时间(毫秒) waitQueueTimeoutMS=2000 # 获取连接超时时间 )
监控连接池:
# 查看连接池状态 print(client.server_info()['connections'])
启用传输加密:
client = MongoClient( 'mongodb://localhost:27017/', tls=True, tlsCAFile='/path/to/ca.pem', tlsCertificateKeyFile='/path/to/client.pem' )
证书验证模式: - tlsAllowInvalidCertificates
: 仅测试环境使用 - tlsInsecure
: 禁用主机名验证
# 增加超时设置 client = MongoClient( connectTimeoutMS=5000, socketTimeoutMS=30000 )
client = MongoClient( retryWrites=True, retryReads=True )
client = MongoClient( heartbeatFrequencyMS=10000 # 心跳间隔 )
PyMongo支持丰富的连接配置方式,关键选择原则:
部署形态 | 推荐连接方式 |
---|---|
单节点 | 直接连接主节点 |
副本集 | 列出所有节点+副本集名称 |
分片集群 | 连接mongos路由 |
云服务(Atlas) | 使用SRV记录 |
最佳实践建议: 1. 生产环境始终使用副本集或分片集群 2. 通过连接字符串统一配置参数 3. 监控连接池指标避免资源耗尽 4. 使用TLS加密所有生产环境连接
完整配置参考MongoDB Connection String文档
示例代码仓库:https://github.com/example/pymongo-connection-guide “`
这篇文章总计约2500字,采用Markdown格式编写,包含: 1. 结构化目录导航 2. 多种连接场景的代码示例 3. 配置参数说明和安全建议 4. 表格对比和最佳实践总结 5. 相关资源链接
可根据实际需要调整示例中的具体参数值或补充特定环境的配置细节。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。