本文汇总了文档数据库 MongoDB 版网络连接的常见问题。
支持。您可以为 MongoDB 实例申请公网地址,以便 VPC 外的设备通过公网地址来访问 MongoDB 实例。公网地址申请方法,请参见申请公网地址。
文档数据库 MongoDB 版完全兼容官方 MongoDB 协议,因此文档数据库 MongoDB 版与官方 MongoDB 支持的客户端(如 Node.js、PHP、Java、Python、C、C++、Scala、Golang、.NET Core 等 )一致。关于多语言客户端的更多详情,请参见 MongoDB Drivers。
文档数据库 MongoDB 版创建成功后,系统会默认在 admin 数据库中创建一个超级管理员账号 root,因此 MongoDB 的默认连接地址中 authSource
值为 admin
(即会默认连接到 admin
库)。
若您自行创建的账号属于其它数据库(如 testdb1
),您需要将 authSource
后 admin
改为自建账号所在的数据库(如 testdb1
)。详细操作步骤,请参见通过 Mongo Shell 工具连接实例。
MongoDB 实例的各节点规格都有对应的默认推荐连接数,具体信息,请参见产品规格。
推荐连接数是指实例中单个节点的默认连接数上限。例如,1 核 2GiB 的副本集实例的单节点推荐连接数为 1000,表示该实例的主节点和从节点(隐藏节点仅用于保障高可用,不提供连接服务)的默认连接数上限均为 1000。
连接数使用达到上限后,系统会拒绝新建的连接。若您需要使用更多的连接数,您可以通过 net.maxIncomingConnections
参数修改实例的单节点最大并发连接数,关于该参数的更多信息,请参见参数支持。您也可以通过升级节点规格获得更大的连接数。
您可以通过如下步骤来查看 MongoDB 实例当前连接数使用情况。
在安装了 Mongo Shell 的本地服务器或 ECS 中,通过 Mongo Shell 工具连接 MongoDB 实例。具体操作步骤,请参见通过 Mongo Shell 工具连接实例。
执行如下命令来查看实例的连接数使用情况。
db.serverStatus().connections
返回结果示例如下。
说明
您可以重点关注 current
和 available
参数,实例的最大连接数 = 当前已建连的连接数 + 剩余可用的连接数。
{ "current" : 14, // 当前已建连的连接数 "available" : 386, // 剩余可用的连接数 "totalCreated" : 65, "internalCurrent" : 15, "internalTotalCreated" : 618540, "active" : 3 }
您可以通过如下步骤来查看连接 MongoDB 实例的客户端来源(包括 IP 地址和端口号信息)。
部分返回结果示例如下。db.currentOp({"active" : true})
说明
您可以重点关注查询结果中 client
参数(即当前连接所对应的客户端信息),来确认各客户端与 MongoDB 实例建立的连接数情况。关于 db.currentOp()
命令的更多用法,请参见 db.currentOp()。
{ ... "client" : "192.168.***.***:****", // 当前连接所对应的客户端信息 "appName" : "MongoDB Shell", "active" : true, "currentOpTime" : "2023-01-28T16:45:51.243+0800", "opid" : 7339****, ... "secs_running" : NumberLong(0), "microsecs_running" : NumberLong(137), "op" : "command", "ns" : "admin.$cmd.aggregate", "command" : { "currentOp" : 1, ... "$db" : "admin" }, "numYields" : 0, "locks" : { }, "waitingForLock" : false, "lockStats" : { }, ... }
您可以在连接 MongoDB 实例时,通过 &maxPoolSize=[$Integer]
参数,设置客户端连接池的最大连接数。
例如,当使用 Mongo Shell 工具连接 MongoDB 实例时,您可以在连接地址字符串的末尾添加 &maxPoolSize=[$Integer]
参数,具体命令示例如下(本文示例中以副本集实例私网连接地址为例,连接池数量为 2000)。
"mongodb://<user>:<password>@mongoreplicae9d7d321****0.mongodb.ivolces.com:3717,mongoreplicae9d7d321****1.mongodb.ivolces.com:3717/?authSource=admin&replicaSet=rs-mongo-replica-e9d7d321****&retryWrites=true&maxPoolSize=2000
不同语言客户端限制连接池数量的说明,请参见 MongoDB Drivers。
为副本集实例新增节点或为分片集群新增 Mongos 节点后,您不修改客户端的连接地址串,MongoDB 也能自动发现并连接上新增节点。
但为保证故障切换和负载均衡效果,还是建议您在新增节点后,将客户端上的连接地址串代码替换为新的完整连接地址串代码(如下图所示),来连接 MongoDB 实例。具体操作步骤,请参见通过 Mongo Shell 工具连接实例。
首先并不是所有客户端(如旧版本的 MongoDB 客户端)都支持 SRV 记录;此外,使用 SRV 记录需要额外的 DNS 解析成本会对性能造成一定影响。出于如上兼容性和性能考虑,文档数据库 MongoDB 版不支持 SRV 的连接方式。建议您直接使用标准的完整连接地址串方式来访问 MongoDB 实例,具体操作步骤,请参见通过 Mongo Shell 工具连接实例。
您可以参考如下步骤查看 MongoDB 连接地址对应的 IP 地址:
说明
返回结果示例如下。ping mongoreplicac1a11ecf5****.mongodb.ivolces.com
当前仅支持修改副本集实例和分片集群实例中 Mongos 节点连接地址的私网或公网连接地址域名,但不支持修改分片集群实例中 Shard 分片或 ConfigServer 节点的连接地址域名。详细操作步骤,请参见修改连接地址。