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

简介: 阿里云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'}}}
相关文章
|
9月前
|
NoSQL MongoDB 微服务
微服务——MongoDB常用命令——文档的分页查询
本文介绍了文档分页查询的相关内容,包括统计查询、分页列表查询和排序查询。统计查询使用 `count()` 方法获取记录总数或按条件统计;分页查询通过 `limit()` 和 `skip()` 方法实现,控制返回和跳过的数据量;排序查询利用 `sort()` 方法,按指定字段升序(1)或降序(-1)排列。同时提示,`skip()`、`limit()` 和 `sort()` 的执行顺序与编写顺序无关,优先级为 `sort()` &gt; `skip()` &gt; `limit()`。
344 1
|
9月前
|
JSON NoSQL MongoDB
微服务——MongoDB常用命令——文档基本CRUD
本文介绍了MongoDB中文档的基本操作,包括插入、查询、更新和删除。单个文档插入使用`insert()`或`save()`方法,批量插入用`insertMany()`。查询所有文档用`find()`,条件查询可在`find()`中添加参数,投影查询控制返回字段。更新文档通过`update()`实现,支持覆盖修改、局部修改(使用`$set`)和批量修改。列值增长可用`$inc`实现。删除文档用`remove()`,需谨慎操作以免误删数据。此外,文档键值对有序,区分大小写,不能有重复键。
212 1
|
9月前
|
存储 NoSQL MongoDB
微服务——MongoDB常用命令——MongoDB索引知识概述
本文介绍MongoDB索引相关知识,包括其在查询中的重要作用。索引可避免全集合扫描,显著提升查询效率,尤其在处理海量数据时。通过B树数据结构存储字段值并排序,支持相等匹配、范围查询及排序操作。文中还提供了官方文档链接以供深入学习。
162 0
|
9月前
|
存储 NoSQL MongoDB
微服务——MongoDB常用命令——MongoDB索引的类型
本节介绍了MongoDB中索引的几种类型及其特点。包括单字段索引,支持升序/降序排序,索引顺序对操作无影响;复合索引,字段顺序重要,可实现多级排序;地理空间索引,支持平面与球面几何查询;文本索引,用于字符串搜索并存储词根;哈希索引,基于字段值散列,适合等值匹配但不支持范围查询。
238 1
微服务——MongoDB常用命令——MongoDB索引的类型
|
9月前
|
存储 JSON NoSQL
MongoDB常用命令
本文介绍了将文章评论数据存储到MongoDB中的操作方法,包括数据库和集合的基本操作。主要内容涵盖:选择与创建数据库(如`articledb`)、数据库删除、集合的显式与隐式创建及删除、文档的CRUD操作(插入、查询、更新、删除)。此外,还详细说明了分页查询、排序查询以及统计查询的方法,例如使用`limit()`、`skip()`实现分页,`sort()`进行排序,`count()`统计记录数。通过实例展示了如何高效管理MongoDB中的数据。
|
9月前
|
NoSQL 关系型数据库 MongoDB
微服务——MongoDB常用命令——集合操作
本节主要介绍MongoDB中的集合操作,包括显式与隐式创建集合的方法。显式创建使用`db.createCollection(name)`,需遵循命名规范(如不能以&quot;system.&quot;开头或包含`\0`字符)。隐式创建则通过直接向不存在的集合插入文档实现,更为常用。此外,还介绍了集合删除方法`db.collection.drop()`及其返回值规则,帮助用户管理数据库中的集合资源。
354 0
|
9月前
|
存储 NoSQL MongoDB
微服务——MongoDB常用命令1——数据库操作
本节介绍了 MongoDB 中数据库的选择、创建与删除操作。使用 `use 数据库名称` 可选择或创建数据库,若数据库不存在则自动创建。通过 `show dbs` 或 `show databases` 查看所有可访问的数据库,用 `db` 命令查看当前数据库。注意,集合仅在插入数据后才会真正创建。数据库命名需遵循 UTF-8 格式,避免特殊字符,长度不超过 64 字节,且部分名称如 `admin`、`local` 和 `config` 为系统保留。删除数据库可通过 `db.dropDatabase()` 实现,主要用于移除已持久化的数据库。
643 0
|
存储 JSON NoSQL
MongoDB常用命令
MongoDB常用命令
117 1
MongoDB常用命令
|
NoSQL MongoDB 数据库
MongoDB是一个NoSQL数据库,有着多种不同的命令和操作。以下是一些常见的MongoDB命令:
一些常用的MongoDB命令,如数据库和集合的管理、数据的插入、查询、更新、删除以及聚合操作等。
188 1
|
SQL NoSQL 安全
MongoDB命令汇总
这篇文章提供了一个MongoDB命令的汇总,包括数据库操作、DDL和DML命令、安全管理、数据备份恢复、远程连接管理和聚合操作等。
596 2

推荐镜像

更多