云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'}}}
相关文章
|
JavaScript 前端开发
HTML+CSS+JAVASCRIPT实现——球球坠落小游戏
本文主要介绍如何使用HTML三件套来实现制作一个网页小游戏-----球球坠落,玩家需要控制键盘来移动小球落在不断上升的台阶上,避免碰到最顶部或者掉进悬崖中,看能持续多久时间,获得更高的得分
704 0
HTML+CSS+JAVASCRIPT实现——球球坠落小游戏
|
9月前
|
弹性计算 网络协议 Cloud Native
阿里云DDoS原生防护2.0(包年包月)中小企业普惠版收费价格10402元一年
阿里云DDoS原生防护2.0中小企业普惠版,年费10402元,含每月2次防护,支持1个Region、IPv4/IPv6二选一,最高1Gbps带宽,适用于低风险企业,详情见官方页。
|
消息中间件 固态存储 Java
RocketMQ 消息发送system busy、broker busy原因分析与解决方案
RocketMQ 消息发送system busy、broker busy原因分析与解决方案
RocketMQ 消息发送system busy、broker busy原因分析与解决方案
|
存储 Kubernetes 监控
一文带你玩转全新采集配置 CRD:AliyunPipelineConfig
相较于 AliyunLogConfig,AliyunPipelineConfig 在配置格式、行为逻辑上做了很大改进,主打灵活、简单、稳定。点击本文,手把手教你如何配置 AliyunPipelineConfig,欢迎大家使用~
37410 120
|
SQL 存储 安全
DDL、DML、DCL 的区别
【8月更文挑战第1天】
2169 0
DDL、DML、DCL 的区别
|
监控 Linux 数据中心
在阿里云容器服务ACK下启用cgroup v2
Kubernetes采用CGroup实现容器的资源隔离。CGroup分为V1和V2版本,V2版本提供了更一致的体验和更丰富的功能。例如, 支持CGroup级别的eBPF挂载,可以实现Pod级别的资源监控、网络重定向等, 基于eBPF的网络优化也依赖于它。 本文介绍如何在阿里云容器服务ACK下启用cgroup v2。
1744 1
|
easyexcel Java API
Apache POI与easyExcel:Excel文件导入导出的技术深度分析
Apache POI与easyExcel:Excel文件导入导出的技术深度分析
|
网络协议 数据安全/隐私保护 Windows
libpcap/wwinpcap
winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。winpcap 驱动各项功能  1. 捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据  winpcap结构包;   2. 在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;   3. 在网络上发送原始的数据包;   4.收集网络通信过程中的统计信息。
1269 0