MongoDB

MongoDB 知识量:13 - 42 - 129

13.4 分片管理><

查看当前状态- 13.4.1 -

sh.status() 是 MongoDB shell 的一个方法,用于显示当前 MongoDB 集群的状态摘要。这个命令提供了有关集群的节点、分片、块和复制集的信息。

如果在 MongoDB shell 中执行 sh.status(),将看到类似以下的输出:

--- Sharding Status ---   
sharding version: {  
    "_id" : 1,  
    "minCompatibleVersion" : 1,  
    "currentVersion" : 5,  
    "clusterId" : ObjectId("...")  
}  
shards:  
    {  "_id" : "shard00",  "host" : "localhost:27017" }  
    {  "_id" : "shard01",  "host" : "localhost:27018" }  
databases:  
    {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }  
    {  "_id" : "testdb",  "partitioned" : true,  "primary" : "shard00" }

这里是输出的关键部分解释:

  • sharding version: 显示了当前的 sharding 版本信息。

  • shards: 列出所有的分片,包括其主机地址。

  • databases: 显示了所有数据库的分区状态和主分片。

注意:为了执行 sh.status(),需要在连接到了一个 sharded cluster 的上下文中,并且有足够的权限。

查看配置信息- 13.4.2 -

在MongoDB的分片集群中,配置服务器负责存储集群的元数据和配置信息,包括哪些数据块被分发到哪些分片,以及复制集的状态等。这些配置信息主要保存在名为config的数据库中。

为了更好地管理和监控集群,MongoDB提供了shell中的一些辅助函数来帮助用户以更直观的方式查看这些信息。这些函数包括sh.status(),它可以显示集群的状态摘要,包括分片、节点和块的分布情况。此外,还有其他一些函数可以帮助用户获取更详细的信息,如sh.databases()和sh.chunks()等。

获取连接统计- 13.4.3 -

connPoolStats 是 MongoDB 中的一个命令,用于获取关于连接池的统计信息。连接池是 MongoDB 用来管理客户端与数据库服务器之间连接的一种机制。它可以帮助优化性能,减少建立和断开连接的开销。

在 MongoDB shell 中执行 connPoolStats 命令时,将得到关于当前数据库实例的连接池的详细统计信息。这些信息可能包括:

  • 当前连接数:当前活跃的连接数。

  • 最大连接数:连接池可以容纳的最大连接数。

  • 等待连接数:正在等待获取连接的客户端数量。

  • 空闲连接数:当前没有被使用的连接数。

  • 总连接数:自连接池创建以来的总连接数。

  • 创建/失败的连接数:成功和失败的连接尝试次数。

  • 活动查询数:当前正在执行的查询数量。

  • 查询/秒:每秒执行的查询数。

  • 最近的活动:显示最近发生的事件和查询,帮助了解连接池的活动情况。

  • 时间窗口内的平均值:在给定的时间窗口内,各种指标的平均值。

这些统计信息对于诊断性能问题、了解数据库负载和优化连接池配置非常有用。在某些情况下,可能需要调整连接池的大小,以确保系统能够有效地处理并发请求,同时保持响应时间在可接受的范围内。

限制连接数量- 13.4.4 -

当客户端连接到mongos路由服务器时,mongos会创建一个连接,这个连接至少会与一个分片建立连接,以便传递客户端的请求。这意味着每个连接到mongos的客户端至少会产生一个从mongos到分片的传出连接。

如果有多个mongos进程同时运行,那么可能会创建超出分片处理能力的连接。为了限制连接数量,MongoDB提供了几种方法:

1. 使用db.runCommand限制用户连接数:可以通过db.runCommand方法使用updateUser命令来限制用户的连接数。例如,可以使用以下命令来限制用户名为"username"的用户的连接数为5:

db.runCommand({updateUser:"username", customData:{maxConns:5}})

2. 在创建用户时设置自定义数据限制:在创建MongoDB用户时,可以通过设置customData字段来限制其连接数。例如:

db.createUser({user:"username", pwd:"password", customData:{maxConns:10}, roles:[{role:"readWrite", db:"test"}]})

3. 使用角色系统限制连接数:MongoDB的角色系统可以用来限制用户的连接数。可以创建一个自定义角色,并将连接数限制作为该角色的一个权限。例如:

use admin; db.createRole({role:"customRole", privileges:[{resource:{anyResource:true}, actions:["find","insert","update","remove"]}], customData:{maxConns:20}}) db.grantRolesToUser("username",["customRole"])

4. 通过配置文件限制最大连接数:还可以通过修改MongoDB的配置文件来限制最大连接数。在配置文件中找到net: port: 27017 maxIncomingConnections: 65535行,可以修改maxIncomingConnections参数的值来限制允许的连接数。

5. 使用代码限制连接数:可以使用代码来限制MongoDB的连接数。例如,可以使用以下Java示例代码来限制连接数:

MongoClientOptions options = MongoClientOptions.builder() .maxConnectionIdleTime() 
.maxConnectionLifeTime() .maxConnectionPoolSize() .build(); MongoClient mongoClient = 
new MongoClient(new ServerAddress(), options);