云Mongodb Sharding如何在指定的Shard上执行Profile等命令

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 阿里云mongodb sharding集群处于安全的考虑用户所有的请求都是都是通过mongos来完成,而不能直连其中节点。而mongos官方目前支持的命令有限,这种情况下,用户想在某一个节点上执行一些命令,例如开启某个shard的primary节点的profile,或者某个shard的primary节点空间比较紧张执行compact命令释放空间,都无法支持;为此云mongo团队开发了一个新的命令runCommandOnShard来满足这部分需求。

runCommandOnShard命令允许用户通过mongos,在某一个指定的shard执行指定的命令。格式如下:

{runCommandOnShard: <shardId>, command: [running comamnd]}
字段 类型 含义
runCommandOnShard string 期望执行命令的shard的shardId,对于mongo sharding就是db节点的实例名称
command json 实际期望执行的命令

执行runCommandOnShard命令用db.runCommand( { <command> } )的方式。

指定shard的具体节点

云mongo sharding模式下一个shard也是三副本。默认情况下,runCommandOnShard指定的命令是在shard的primary节点上执行。如果用户想在secondary节点上执行,可以利用mongodb官方的ReadPreference机制,通过如下的方式来实现这个目的:

{runCommandOnShard: "dds-xxx", "command": {profile:2}, $queryOptions: {$readPreference: {mode: 'secondary'}}}

关于ReadPreference的介绍可以参考官方的文档,mongodb支持多种形式的ReadPreference,但是在runCommandSharding这个命令中,只建议采用如上secondary的形式,其它形式一律不建议。

授权的命令列表

出于安全,runCommandOnShard只支持部分命令,用户可以通过如下方式查看支持的命令列表:

{runCommandOnShard: "", help: true}

将会返回如下结果:

{
    "help" : "help for: runCommandOnShard specify a shard then execute the command on the shard
                    usage: {runCommandOnShard : <shardId>, command : [running command]}
                    authorized commands :'profile'
                                         'compact'
                                         'find
                                         'aggregate'
                                         'count'
                                         'currentOp'
                                         'killOp'
                                         'serverStatus'
                                         'distinct'
                                         'group'
                                         'mapReduce'
                                         ",
    "lockType" : 0,
    "ok" : 1
}

例子

针对用户需求比较集中的profile命令和compact命令,分别举例说明如何通过runCommandOnShard执行这两个命令。

比如用户想在shardId为dds-xx1的shard上开启对慢查询的profile,只需要执行如下命令:

{runCommandOnShard: "dds-xx1", "command": {profile:1, slowms: 200}}

执行这样完这样的命令后,profile只会在dds-xx1的primary节点上开启,如果用户的读请求也可能访问secondary节点,希望在secondary上也设置想要的profile级别,那么需要如上面所言设置ReadPeference,使用如下命令:

{runCommandOnShard: "dds-xx1", "command": {profile:1, slowms: 200}, $queryOptions: {$readPreference: {mode: 'secondary'}}}

如果用户想通过compact命令来释放dds-xx1 db节点的磁盘空间,和上面的profile命令类似,在primary节点执行compact可以通过以下命令:

{runCommandOnShard: "dds-xx1", "command": {compact: user_collection}}

compact命令和profile一样不会扩散到备节点,如果想通过compact命令释放secondary节点的空间,也需要指定ReadPeference在secondary节点上再执行一次:

{runCommandOnShard: "dds-xx1", "command": {compact: user_collection}, $queryOptions: {$readPreference: {mode: 'secondary'}}}
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
7月前
|
存储 JSON NoSQL
3-MongoDB常用命令
MongoDB常用命令
198 2
|
NoSQL 数据可视化 关系型数据库
mongoDB入门教程三:数据库的创建和删除(增删改查)基本命令
mongoDB入门教程三:数据库的创建和删除(增删改查)基本命令
204 0
|
存储 JSON NoSQL
数据库系列课程(22)-MongoDB 常用命令
数据库系列课程(22)-MongoDB 常用命令
291 0
|
1月前
|
存储 JSON NoSQL
MongoDB常用命令
MongoDB常用命令
39 1
MongoDB常用命令
|
2月前
|
NoSQL MongoDB 数据库
MongoDB是一个NoSQL数据库,有着多种不同的命令和操作。以下是一些常见的MongoDB命令:
一些常用的MongoDB命令,如数据库和集合的管理、数据的插入、查询、更新、删除以及聚合操作等。
36 1
|
3月前
|
SQL NoSQL 安全
MongoDB命令汇总
这篇文章提供了一个MongoDB命令的汇总,包括数据库操作、DDL和DML命令、安全管理、数据备份恢复、远程连接管理和聚合操作等。
53 2
|
4月前
|
存储 JSON NoSQL
3-MongoDB常用命令
本文档介绍MongoDB中关于文章评论数据的操作命令。首先定义了一个名为`articledb`的数据库及评论数据结构,包括评论ID、文章ID、内容、用户ID、昵称、创建时间、点赞数、状态等字段。随后详细讲解了数据库与集合的创建、选择、删除等基础操作,并提供了具体示例。此外,还介绍了文档的增删改查等基本CRUD操作,包括单个文档和批量文档的插入、查询、更新和删除的方法及参数说明。文档进一步解释了如何进行投影查询、批量更新以及使用`$inc`运算符来增量更新数值字段。最后,讲解了如何进行分页查询和排序操作,帮助用户高效管理大量评论数据。
|
5月前
|
JSON NoSQL 关系型数据库
MongoDB常用命令大全,概述、备份恢复
MongoDB常用命令大全:服务启动停止、查看状态、备份;数据库相关,集合操作,文档操作,其他常用命令;数据备份恢复/导入导出——mongodump、mongorestore;MongoDB与SQL比较
|
5月前
|
JSON NoSQL MongoDB
mongodb 系统命令总结
mongodb 系统命令总结
52 0
|
5月前
|
存储 NoSQL 关系型数据库
MongoDB基本命令
MongoDB基本命令
67 0