云服务器内容精选

  • 监控指标 表1 DDS推荐的监控指标 指标ID 指标名称 指标含义 取值范围 测量对象 监控周期(原始指标) mongo007_connections_usage 当前活动连接数百分比 该指标用于统计试图连接到实例节点的连接数占可用连接数百分比,以百分比为单位。 0~100% 文档数据库集群实例下的dds mongos节点 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 5秒 mongo032_mem_usage 内存使用率 该指标用于统计测量对象的内存利用率,以百分比为单位。 0~100% 文档数据库集群实例下的dds mongos节点 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 5秒 mongo031_cpu_usage CPU使用率 该指标用于统计测量对象的CPU利用率,以百分比为单位。 0~100% 文档数据库集群实例下的dds mongos节点 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 5秒 mongo035_disk_usage 磁盘利用率 该指标用于统计测量对象的磁盘利用率,以百分比为单位。 0~100% 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 表2 DDS支持的监控指标 指标ID 指标名称 指标含义 取值范围 测量对象 监控周期(原始指标) mongo001_command_ps command执行频率 该指标用于统计平均每秒command语句在节点上执行次数,以次数/秒为单位。 ≥ 0 Executions/s 文档数据库实例 文档数据库集群实例下的dds mongos节点 文档数据库副本集实例下的只读节点 文档数据库实例下的主节点 文档数据库实例下的备节点 文档数据库实例下的隐藏节点 1分钟 5秒 mongo002_delete_ps delete语句执行频率 该指标用于统计平均每秒delete语句在节点上执行次数,以次数/秒为单位。 ≥ 0 Executions/s 文档数据库实例 文档数据库集群实例下的dds mongos节点 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 5秒 mongo003_insert_ps insert语句执行频率 该指标用于统计平均每秒insert语句在节点上执行次数,以次数/秒为单位。 ≥ 0 Executions/s 文档数据库实例 文档数据库集群实例下的dds mongos节点 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 5秒 mongo004_query_ps query语句执行频率 该指标用于统计平均每秒query语句在节点上执行次数,以次数/秒为单位。 ≥ 0 Executions/s 文档数据库实例 文档数据库集群实例下的dds mongos节点 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 5秒 mongo005_update_ps update语句执行频率 该指标用于统计平均每秒update语句在节点上执行次数,以次数/秒为单位。 ≥ 0 Executions/s 文档数据库实例 文档数据库集群实例下的dds mongos节点 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 5秒 mongo006_getmore_ps getmore语句执行频率 该指标用于统计平均每秒getmore语句在节点上执行次数,以次数/秒为单位。 ≥ 0 Executions/s 文档数据库实例 文档数据库集群实例下的dds mongos节点 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 5秒 mongo007_chunk_num1 分片一的chunk数 该指标用于统计分片一的chunk个数,以个数为单位。 0~64 Counts 文档数据库集群实例 1分钟 mongo007_chunk_num2 分片二的chunk数 该指标用于统计分片二的chunk个数,以个数为单位。 0~64 Counts 文档数据库集群实例 1分钟 mongo007_chunk_num3 分片三的chunk数 该指标用于统计分片三的chunk个数,以个数为单位。 0~64 Counts 文档数据库集群实例 1分钟 mongo007_chunk_num4 分片四的chunk数 该指标用于统计分片四的chunk个数,以个数为单位。 0~64 Counts 文档数据库集群实例 1分钟 mongo007_chunk_num5 分片五的chunk数 该指标用于统计分片五的chunk个数,以个数为单位。 0~64 Counts 文档数据库集群实例 1分钟 mongo007_chunk_num6 分片六的chunk数 该指标用于统计分片六的chunk个数,以个数为单位。 0~64 Counts 文档数据库集群实例 1分钟 mongo007_chunk_num7 分片七的chunk数 该指标用于统计分片七的chunk个数,以个数为单位。 0~64 Counts 文档数据库集群实例 1分钟 mongo007_chunk_num8 分片八的chunk数 该指标用于统计分片八的chunk个数,以个数为单位。 0~64 Counts 文档数据库集群实例 1分钟 mongo007_chunk_num9 分片九的chunk数 该指标用于统计分片九的chunk个数,以个数为单位。 0~64 Counts 文档数据库集群实例 1分钟 mongo007_chunk_num10 分片十的chunk数 该指标用于统计分片十的chunk个数,以个数为单位。 0~64 Counts 文档数据库集群实例 1分钟 mongo007_chunk_num11 分片十一的chunk数 该指标用于统计分片十一的chunk个数,以个数为单位。 0~64 Counts 文档数据库集群实例 1分钟 mongo007_chunk_num12 分片十二的chunk数 该指标用于统计分片十二的chunk个数,以个数为单位。 0~64 Counts 文档数据库集群实例 1分钟 mongo008_connections 实例当前活动连接数 该指标用于统计试图连接到DDS实例的总连接数,以个数为单位。 0~200 Counts 文档数据库实例 1分钟 mongo009_migFail_num 过去一天块迁移的失败次数 该指标用于统计过去一天中块迁移失败的次数,以次数为单位。 ≥ 0 Counts 文档数据库集群实例 1分钟 mongo007_connections 当前活动连接数 该指标用于统计试图连接到DDS实例节点的总连接数,以个数为单位。 0~200 Counts 文档数据库集群实例下的dds mongos节点 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 5秒 mongo007_connections_usage 当前活动连接数百分比 该指标用于统计试图连接到实例节点的连接数占可用连接数百分比,以百分比为单位。 0~100% 文档数据库集群实例下的dds mongos节点 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 5秒 mongo008_mem_resident 驻留内存 该指标用于统计当前驻留内存的大小,以兆字节为单位。 ≥ 0 MB 文档数据库集群实例下的dds mongos节点 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo009_mem_virtual 虚拟内存 该指标用于统计当前虚拟内存的大小,以兆字节为单位。 ≥ 0 MB 文档数据库集群实例下的dds mongos节点 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo010_regular_asserts_ps 常规断言频率 该指标用于统计常规断言频率,以次数/秒为单位。 ≥ 0 Executions/s 文档数据库集群实例下的dds mongos节点 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo011_warning_asserts_ps 警告频率 该指标用于统计警告频率,以次数/秒为单位。 ≥ 0 Executions/s 文档数据库集群实例下的dds mongos节点 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo012_msg_asserts_ps 消息断言频率 该指标用于统计消息断言频率,以次数/秒为单位。 ≥ 0 Executions/s 文档数据库集群实例下的dds mongos节点 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo013_user_asserts_ps 用户断言频率 该指标用于统计用户断言频率,以次数/秒为单位。 ≥ 0 Executions/s 文档数据库集群实例下的dds mongos节点 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo014_queues_total 等待锁的操作数 该指标用于统计当前等待锁的操作数,以个数为单位。 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo015_queues_readers 等待读锁的操作数 该指标用于统计当前等待读锁的操作数,以个数为单位。 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo016_queues_writers 等待写锁的操作数 该指标用于统计当前等待写锁的操作数,以个数为单位。 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo017_page_faults 缺页错误数 该指标用于统计当前节点上的缺页错误数,以个数为单位。 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo018_porfling_num 慢查询数 该指标用于统计当前节点上的慢查询数,以个数为单位。 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo019_cursors_open 当前维护游标数 该指标用于统计当前节点上的维护游标数,以个数为单位。 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo020_cursors_timeOut 服务超时游标数 该指标用于统计当前节点上的服务超时游标数,以个数为单位。 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo021_wt_cahe_usage 内存中数据量(WiredTiger引擎) 该指标用于统计当前内存中数据量(WiredTiger引擎),以兆字节为单位。 ≥ 0 MB 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo022_wt_cahe_dirty 内存中脏数据量(WiredTiger引擎) 该指标用于统计当前内存中脏数据量(WiredTiger引擎),以兆字节为单位。 ≥ 0 MB 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo023_wInto_wtCache 写入WiredTiger内存的频率 该指标用于统计当前内存中写入频率(WiredTiger引擎),字节/秒为单位。 ≥ 0 Bytes/s 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo024_wFrom_wtCache 从WiredTiger内存写入磁盘频率 该指标用于统计当前内存写入磁盘频率(WiredTiger引擎),字节/秒为单位。 ≥ 0 Bytes/s 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo025_repl_oplog_win 主节点的Oplog中可用时间 该指标用于统计当前实例下的主节点的Oplog中可用时间,以小时为单位。 ≥ 0 Hours 文档数据库实例下的主节点 1分钟 mongo026_oplog_size_ph 主节点生成Oplog的速率 该指标用于统计当前实例下的主节点生成Oplog的速率,以兆字节/小时为单位。 ≥ 0 MB/Hour 文档数据库实例下的主节点 1分钟 mongo025_repl_headroom 主备Oplog重叠时长 该指标用于统计实例下的主节点和Secondary节点之间Oplog重叠时长,以秒为单位。 ≥ 0 Seconds 文档数据库实例下的备节点 1分钟 mongo026_repl_lag 主备延时 该指标用于统计实例下的主节点和Secondary节点之间的复制延时,以秒为单位。 ≥ 0 Seconds 文档数据库实例下的备节点 1分钟 mongo027_repl_command_ps 备节点复制的command执行频率 该指标用于统计平均每秒Secondary节点复制的command语句执行次数,以次/秒为单位。 ≥ 0 Executions/s 文档数据库实例下的备节点 1分钟 mongo028_repl_update_ps 备节点复制的update语句执行频率 该指标用于统计平均每秒Secondary节点复制的update语句执行次数,以次/秒为单位。 ≥ 0 Executions/s 文档数据库实例下的备节点 1分钟 mongo029_repl_delete_ps 备节点复制的delete语句执行频率 该指标用于统计平均每秒Secondary节点复制的delete语句执行次数,以次/秒为单位。 ≥ 0 Executions/s 文档数据库实例下的备节点 1分钟 mongo030_repl_insert_ps 备节点复制的insert语句执行频率 该指标用于统计平均每秒Secondary节点复制的insert语句执行次数,以次/秒为单位。 ≥ 0 Executions/s 文档数据库实例下的备节点 1分钟 mongo031_cpu_usage CPU使用率 该指标用于统计测量对象的CPU利用率,以百分比为单位。 0~100% 文档数据库集群实例下的dds mongos节点 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 5秒 mongo032_mem_usage 内存使用率 该指标用于统计测量对象的内存利用率,以百分比为单位。 0~100% 文档数据库集群实例下的dds mongos节点 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 5秒 mongo033_bytes_out 网络输出吞吐量 该指标用于统计平均每秒从测量对象的所有网络适配器输出的流量,以字节/秒为单位。 ≥ 0 Bytes/s 文档数据库集群实例下的dds mongos节点 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 5秒 mongo034_bytes_in 网络输入吞吐量 该指标用于统计平均每秒从测量对象的所有网络适配器输入的流量,以字节/秒为单位。 ≥ 0 Bytes/s 文档数据库集群实例下的dds mongos节点 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 5秒 mongo035_disk_usage 磁盘利用率 该指标用于统计测量对象的磁盘利用率,以百分比为单位。 0~100% 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo036_iops IOPS 该指标用于统计当前实例节点,单位时间内系统处理的I/O请求数量(平均值),以请求/秒为单位。 ≥ 0 Counts/s 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo037_read_throughput 硬盘读吞吐量 硬盘平均每秒读字节数,以字节/秒为单位。 ≥ 0 Bytes/s 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo038_write_throughput 硬盘写吞吐量 硬盘平均每秒写字节数,以字节/秒为单位。 ≥ 0 bytes/s 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo039_avg_disk_sec_per_read 硬盘读耗时 该指标用于统计某段时间平均每次读取硬盘所耗时间,以秒为单位。 ≥ 0 Seconds 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo040_avg_disk_sec_per_write 硬盘写耗时 该指标用于统计某段时间平均每次写入硬盘所耗时间,以秒为单位。 ≥ 0 Seconds 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo042_disk_total_size 磁盘总大小 该指标用于统计测量对象的磁盘总大小,以吉字节为单位。 0~1000 GB 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo043_disk_used_size 磁盘使用量 该指标用于统计测量对象的磁盘已使用总大小,以吉字节为单位。 0~1000 GB 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo044_swap_usage SWAP利用率 交换内存SWAP使用率百分数,以百分比为单位。 0~100% 文档数据库集群实例下的dds mongos节点 文档数据库实例下的备节点 1分钟 mongo050_top_total_time 集合花费的总时间 Mongotop-total time指标,集合操作花费的时间总和,以毫秒为单位。 ≥ 0 Milliseconds 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo051_top_read_time 集合读花费的总时间 Mongotop-read time指标,集合读操作花费的时间总和,以毫秒为单位。 ≥ 0 Milliseconds 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo052_top_write_time 集合写花费的总时间 Mongotop-write time指标,集合写操作花费的时间总和,以毫秒为单位。 ≥ 0 Milliseconds 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo053_wt_flushes_status 周期Checkpoint的触发次数 WiredTiger一个轮询间隔期间checkpoint的触发次数,记录周期内发生的次数单位。 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo054_wt_cache_used_percent Wiredtiger使用中的缓存百分比 Wiredtiger使用中的缓存大小百分数,以百分比为单位。 0~100% 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo055_wt_cache_dirty_percent Wiredtiger脏数据的缓存百分比 Wiredtiger脏数据的缓存大小百分数,以百分比为单位。 0~100% 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo070_rocks_active_memtable memtable中的数据大小 采集当前活动memtable中的数据大小 0~100 GB 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo071_rocks_oplogcf_active_memtable oplogcf上memtable中的数据大小 采集当前用于oplogcf上活动memtable中的数据大小 0~100 GB 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo072_rocks_all_memtable memtable和immutable-mem中的总数据大小 采集当前memtable和immutable-mem中的总数据大小 0~100 GB 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo073_rocks_oplogcf_all_memtable oplogcf上memtable和immutable-mem中的总数据大小 采集当前用于oplogcf上memtable和immutable-mem中的总数据大小 0~100 GB 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo074_rocks_snapshots 未释放的snapshot的数量 采集当前未释放的snapshot的数量 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo075_rocks_oplogcf_snapshots oplogcf上未释放的snapshot的数量 采集当前oplogcf上未释放的snapshot的数量 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo076_rocks_live_versions 活动的版本数量 采集当前活动的版本数量 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo077_rocks_oplogcf_live_versions oplogcf上活动的版本数量 采集当前oplogcf上活动的版本数量 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo078_rocks_block_cache 驻留在blockcache中的数据大小 采集当前驻留在blockcache中的数据大小 0~100 GB 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo079_rocks_background_errors 后台累积错误数量 采集记录后台累积错误数量 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo080_rocks_oplogcf_background_errors oplogcf上后台累积错误数量 采集记录oplogcf上后台累积错误数量 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo081_rocks_conflict_bytes_usage 事务写写冲突处理缓冲区使用率 采集事务写中写冲突处理缓冲区使用率 0~100% 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo082_rocks_uncommitted_keys 未提交的key的数量 采集当前未提交的key的数量 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo083_rocks_committed_keys 提交的key的数量 采集当前已提交的key的数量 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo084_rocks_alive_txn 活跃事务链表的长度 采集记录活跃事务链表的长度 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo085_rocks_read_queue 读队列的长度 采集当前读队列的长度 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo086_rocks_commit_queue 提交队列的长度 采集当前提交队列的长度 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo087_rocks_ct_write_out 已使用并发写事务数 采集当前已使用并发写事务数 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo088_rocks_ct_write_available 剩余可用并发写事务数 采集当前剩余可用并发写事务数 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo089_rocks_ct_read_out 已使用并发读事务数 采集当前已使用并发读事务数 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo090_rocks_ct_read_available 剩余可用并发读事务数 采集当前剩余可用并发读事务数 ≥ 0 Counts 文档数据库实例下的主节点 文档数据库实例下的备节点 1分钟 mongo091_active_session_count 周期活跃会话数 该指标用于统计自上次刷新周期以来Mongo实例在内存中缓存的所有活跃本地会话的数目 ≥ 0 Counts 文档数据库实例 文档数据库副本集实例下的只读节点 文档数据库实例下的主节点 文档数据库实例下的备节点 文档数据库实例下的隐藏节点 1分钟 mongo092_rx_errors 接收报文错误率 该指标用于统计监控周期内接收报文中错误报文数量与全部接收报文比值。 0~100% 文档数据库实例 1分钟 5秒 mongo093_rx_dropped 接收报文丢包率 该指标用于监控周期内统计接收报文中丢失报文数量与全部接收报文比值。 0~100% 文档数据库实例 1分钟 5秒 mongo094_tx_errors 发送报文错误率 该指标用于监控周期内统计发送报文中错误报文数量与全部发送报文比值。 0~100% 文档数据库实例 1分钟 5秒 mongo095_tx_dropped 发送报文丢包率 该指标用于监控周期内统计发送报文中丢失报文数量与全部发送报文比值。 0~100% 文档数据库实例 1分钟 5秒 mongo096_retrans_segs 重传包数目 该指标用于监控周期内统计重传包数目。 ≥ 0 Counts 文档数据库实例 1分钟 5秒 mongo097_retrans_rate 重传比例 该指标用于监控周期内统计重传包比例。 0~100% 文档数据库实例 1分钟 5秒 mongo098_out_rsts_nums 发送RST数目 该指标用于监控周期内统计RST数目。 ≥ 0 Counts 文档数据库实例 1分钟 5秒 指标ID中含有“rocks”的监控指标均用于监测4.2版本的实例或实例节点。
  • 请求消息 参数说明 表2 参数说明 名称 参数类型 是否必选 描述 target_type String 否 待重启对象的类型。 重启集群实例下的节点或组时,该参数必选。 重启mongos节点时,取值为“mongos”。 重启shard组时,取值为“shard”。 重启config组时,取值为“config”。 重启只读节点时,取值为readonly。 重启副本集实例下的节点。 重启readonly节点时,取值为“readonly”。 重启实例(集群、副本集、单节点)时,不传该参数。 枚举值: mongos shard config readonly target_id String 是 待重启对象的ID,可以调用“查询实例列表”接口获取。如果未申请实例,可以调用“创建实例”接口创建。 重启集群实例下的节点时,对于mongos节点,取值为mongos节点ID,对于只读节点,取值为只读节点ID,对于shard和config组,取值为shard和config组ID。 重启整个实例时,取值为实例ID。 重启副本集实例时,取值为实例ID。对于readonly节点,取值为readonly节点ID。 重启单节点实例时,取值为实例ID。
  • 请求示例 根据target_id重启整个实例 { "target_id":"9136fd2a9fcd405ea4674276ce36dae8in02" } 根据target_type和target_id重启shard组 { "target_type":"shard", "target_id":"84e7c96b82aa4fedb3b00f98edd71ba4gr02" } 根据target_type和target_id重启config组 { "target_type":"config", "target_id":"06439baa35c146d3a8965af59d370908gr02" } 根据target_type和target_id重启mongos节点 { "target_type":"mongos", "target_id":"bd4dccbd53ae48d5bd3046bebf715079no02" }
  • URI URI格式 POST https://{Endpoint}/v3/{project_id}/instances/{instance_id}/restart URI样例 https://dds.cn-north-1.myhuaweicloud.com/v3/0549b4a43100d4f32f51c01c2fe4acdb/instances/9136fd2a9fcd405ea4674276ce36dae8in02/restart
  • 响应消息 参数说明 表10 参数说明 名称 参数类型 是否必选 描述 id String 否 实例ID。 name String 否 实例名称,与请求参数相同。 datastore Object 否 数据库信息,与请求参数相同。详情请参见表11。 created String 否 创建时间为本地时间,格式为“yyyy-mm-dd hh:mm:ss”。 status String 否 实例状态,取值为“creating”。 region String 否 区域ID,与请求参数相同。 availability_zone String 否 可用区ID,与请求参数相同。 vpc_id String 否 虚拟私有云ID,与请求参数相同。 subnet_id String 否 子网ID,与请求参数相同。 security_group_id String 否 实例所属的安全组ID列表,与请求参数相同。 port Integer 否 数据库访问端口。 disk_encryption_id String 否 磁盘加密的密钥ID,与请求参数相同。 mode String 否 实例类型,与请求参数相同。 configurations Array of objects 否 参数组配置信息。 详情请参见表12。 flavor Array of objects 否 实例规格详情,与请求参数相同。详情请参见表6。 backup_strategy Object 否 高级备份策略,与请求参数相同。详情请参见表7。 enterprise_project_id String 否 企业项目ID。取值为“0”,表示为default企业项目。 dss_pool_id String 否 Dec用户专属存储ID。 job_id String 否 创建实例的工作流ID。 ssl_option String 否 SSL开关选项,与请求参数相同。 tags Array of objects 否 标签列表,与请求参数相同。 详情请参见表15。 order_id String 否 创建实例的订单ID,仅创建包年包月实例时返回该参数。 charge_info Object 否 付费方式信息,与请求参数相同。 详情请参见表16。 表11 datastore字段数据结构说明 名称 参数类型 是否必选 描述 type String 是 数据库版本类型。取值为“DDS-Community”。 version String 是 数据库版本。支持4.4、4.2、4.0、3.4版本,取值为“4.4”、“4.2”、“4.0”、“3.4”。 storage_engine String 是 存储引擎。支持WiredTiger/RocksDB存储引擎。 数据库版本为4.2时,存储引擎为RocksDB,取值为“rocksDB”。 数据库版本为4.0和3.4时,存储引擎为WiredTiger,取值为“wiredTiger”。 表12 configurations字段数据结构说明 参数 参数类型 是否必选 描述 type String 是 节点类型。取值: 集群实例包含mongos、shard和config节点,各节点下该参数取值分别为“mongos”、“shard”和“config”。 副本集实例下该参数取值为“replica”。 单节点实例下该参数取值为“single”。 枚举值: mongos shard config replica single configuration_id String 是 参数组id。 表13 flavor字段数据结构说明 名称 参数类型 是否必选 描述 type String 是 节点类型。 取值: 集群实例包含mongos、shard和config节点,各节点下该参数取值分别为“mongos”、“shard”和“config”。 副本集实例下该参数取值为“replica”。 单节点实例下该参数取值为“single”。 num String 是 节点数量或组数量。 取值: type取值“mongos”,num表示集群实例下mongos节点的数量,取值2~16。 type取值“shard”,num表示集群实例下shard组的数量,取值2~16。 type取值“config”,num表示集群实例下config组的数量,只能取值1。 type取值“replica”,num表示副本集实例下副本节点的数量,可取值3,5,7。 type取值“single”,num表示单节点实例下节点的数量,只能取值1。 storage String 否 磁盘类型。 size String 否 磁盘大小。 对于除mongos外的其他节点,该参数必选。mongos节点下,该参数无意义。 取值:必须为10的整数倍。单位为GB。 对于集群实例,shard组可取10GB~2000GB,config组仅可取20GB。mongos节点不涉及选择磁盘,该参数无意义。 对于副本集实例,可取10GB~3000GB。 对于单节点实例,可取10GB~1000GB。 spec_code String 是 资源规格编码。获取方法请参见查询数据库规格中响应参数“spec_code”的值。 集群实例下,需要指定多个规格,要求所有规格的系列一致,均为通用型(s6)、增强型(c3)、或增强Ⅱ型(c6)。 示例: dds.mongodb.s6.large.4.mongos和dds.mongodb.s6.large.4.config是同一规格系列。 dds.mongodb.s6.large.4.mongos和dds.mongodb.c3.large.4.config不是同一规格系列。 表14 backup_strategy字段数据结构说明 名称 参数类型 是否必选 描述 start_time String 是 备份时间段。自动备份将在该时间段内触发。 取值范围:非空,格式必须为hh:mm-HH:MM,且有效,当前时间指UTC时间。 HH取值必须比hh大1。 mm和MM取值必须相同,且取值必须为00。 不传该参数,默认的备份时间段不传该参数,默认的备份时间段为00:00-01:00。 取值示例: 23:00-00:00 keep_days String 否 指定已生成的备份文件可以保存的天数。 取值范围:0~732。 取0值,表示不设置自动备份策略。 不传该参数,默认开启自动备份策略,备份文件默认保存7天。 表15 tags字段数据结构说明 名称 参数类型 是否必选 描述 key String 是 标签键。最大长度36个unicode字符。 key不能为空,不能为空字符串,不能重复。 字符集:A-Z,a-z , 0-9,‘-’,‘_’,UNICODE字符(\u4E00-\u9FFF)。 value String 是 标签值。最大长度43个unicode字符。 可以为空字符串。 字符集:A-Z,a-z , 0-9,‘.’,‘-’,‘_’,UNICODE字符(\u4E00-\u9FFF)。 表16 charge_info字段数据结构说明 参数 参数类型 是否必选 描述 charge_mode String 是 计费模式。 取值范围: prePaid:预付费,即包年/包月。 postPaid:后付费,即按需付费。 period_type String 否 订购周期类型。 “charge_mode”为“prePaid”时生效,且为必选值。 取值范围: month:包月。 year:包年。 period_num Integer 否 “charge_mode”为“prePaid”时生效,且为必选值,指定订购的时间。 取值范围: 当“period_type”为“month”时,取值为1~9。 当“period_type”为“year”时,取值为1~3 is_auto_renew Boolean 否 创建包周期实例时可指定,表示是否自动续订,续订的周期和原周期相同,且续订时会自动支付。 取值范围: true,表示自动续订。 false,表示不自动续订,默认为该方式。 is_auto_pay Boolean 否 创建包周期实例时可指定,表示是否自动从账户中支付,该字段不影响自动续订的支付方式。 取值范围: true,表示自动从账户中支付。 false,表示手动从账户中支付,默认为该支付方式。 响应示例中参数“region”和“availability_zone”的值为示例值。 响应示例 集群实例: { "id": "39b6a1a278844ac48119d86512e0000bin02", "name": "test-cluster-01", "datastore": { "type": "DDS-Community", "version": "3.4", "storage_engine": "wiredTiger" }, "created": "2019-01-16 09:34:36", "status": "creating", "region": "aaa", "availability_zone": "az1xahz", "vpc_id": "490a4a08-ef4b-44c5-94be-3051ef9e4fce", "subnet_id": "0e2eda62-1d42-4d64-a9d1-4e9aa9cd994f", "security_group_id": "2a1f7fc8-3307-42a7-aa6f-42c8b9b8f8c5", "disk_encryption_id": "2gfdsh-844a-4023-a776-fc5c5fb71fb4", "mode": "Sharding", "configurations": [ { "type": "mongos", "configuration_id": "acb288dbd1174f26a8960b45591bd98apr02" }, { "type": "shard", "configuration_id": "5bca546f0be64b038124ef9cedd1bfa1pr02" }, { "type": "config", "configuration_id": "4d123b3ba8294921802b11bf4d8c5735pr02" } ], "flavor": [ { "type": "mongos", "num": "2", "spec_code": "dds.mongodb.c6.medium.4.mongos" }, { "type": "shard", "num": "2", "storage": "ULTRAHIGH", "spec_code": "dds.mongodb.c6.medium.4.shard", "size": "20" }, { "type": "config", "num": "1", "storage": "ULTRAHIGH", "spec_code": "dds.mongodb.c6.large.2.config", "size": "20" } ], "backup_strategy": { "start_time": "08:15-09:15", "keep_days": "8" }, "enterprise_project_id": "", "ssl_option": "1", "dss_pool_id": "f5f84ed7-6f19-4bd4-99d7-b450ad6cc4dd", "job_id": "c010abd0-48cf-4fa8-8cbc-090f093eaa2f", "tags" : [{ "key" : "dds001", "value" : "dds001" }] }
  • 请求示例 集群根据备份文件恢复到新实例: { "name": "test-cluster-01", "datastore": { "type": "DDS-Community", "version": "3.2", "storage_engine": "wiredTiger" }, "region": "aaa", "availability_zone": "az1xahz", "vpc_id": "674e9b42-cd8d-4d25-a2e6-5abcc565b961", "subnet_id": "f1df08c5-71d1-406a-aff0-de435a51007", "security_group_id": "7aa51dbf-5b63-40db-9724-dad3c4828b58", "password": "******", "mode": "Sharding", "configurations": [ { "type": "mongos", "configuration_id": "acb288dbd1174f26a8960b45591bd98apr02" }, { "type": "shard", "configuration_id": "5bca546f0be64b038124ef9cedd1bfa1pr02" }, { "type": "config", "configuration_id": "4d123b3ba8294921802b11bf4d8c5735pr02" } ], "restore_point": { "backup_id": "8f643d252d834a4c916b2db4322f99552734" }, "flavor": [ { "type": "mongos", "num": "2", "spec_code": "dds.mongodb.c6.medium.4.mongos" }, { "type": "shard", "num": 2, "storage": "ULTRAHIGH", "size": 20, "spec_code": "dds.mongodb.c6.medium.4.shard" }, { "type": "config", "num": 1, "storage": "ULTRAHIGH", "size": 20, "spec_code": "dds.mongodb.c6.large.2.config" } ], "backup_strategy": { "start_time": "08:15-09:15", "keep_days": "8" }, "ssl_option": "1", "dss_pool_id": "f5f84ed7-6f19-4bd4-99d7-b450ad6cc4dd", "server_group_policies": [ "anti-affinity" ], "tags": [ { "key": "dds001", "value": "dds001" } ] } 副本集根据备份文件恢复到新实例: { "name": "test-replicaset", "datastore": { "type": "DDS-Community", "version": "3.4", "storage_engine": "wiredTiger" }, "region": "aaa", "availability_zone": "az1xahz", "vpc_id": "674e9b42-cd8d-4d25-a2e6-5abcc565b961", "subnet_id": "f1df08c5-71d1-406a-aff0-de435a51007", "security_group_id": "7aa51dbf-5b63-40db-9724-dad3c4828b58", "password": "******", "mode": "ReplicaSet", "configurations": [ { "type": "replica", "configuration_id": "f17e3aad778440fbb68603c8c9032003pr02" } ], "restore_point": { "backup_id": "8f643d252d834a4c916b2db4322f99552734" }, "flavor": [ { "type": "replica", "num": "1", "storage": "ULTRAHIGH", "size": "30", "spec_code": "dds.mongodb.s2.medium.4.shard" } ], "backup_strategy": { "start_time": "08:15-09:15", "keep_days": "8" }, "ssl_option": "1", "tags" : [{ "key" : "dds001", "value" : "dds001" }] } 单节点根据备份文件恢复到新实例: { "name": "test-singlenode", "datastore": { "type": "DDS-Community", "version": "3.2", "storage_engine": "wiredTiger" }, "region": "aaa", "availability_zone": "az1xahz", "vpc_id": "674e9b42-cd8d-4d25-a2e6-5abcc565b961", "subnet_id": "f1df08c5-71d1-406a-aff0-de435a51007", "security_group_id": "7aa51dbf-5b63-40db-9724-dad3c4828b58", "password": "******", "mode": "Single", "configurations": [ { "type": "single", "configuration_id": "b8e962e66ede47609a94cba591735b49pr02" } ], "restore_point": { "backup_id": "8f643d252d834a4c916b2db4322f99552734" }, "flavor": [ { "type": "single", "num": "1", "storage": "ULTRAHIGH", "size": "30", "spec_code": "dds.mongodb.c6.medium.4.single" } ], "backup_strategy": { "start_time": "08:15-09:15", "keep_days": "8" }, "ssl_option": "1", "tags" : [{ "key" : "dds001", "value" : "dds001" }] } 副本集根据时间点恢复到新实例: { "name": "replica-liuyunj1", "datastore": { "type": "DDS-Community", "version": "3.2", "storage_engine": "wiredTiger" }, "region": "aaa", "availability_zone": "az1xahz", "vpc_id": "dcdadabc-efed-4518-8b34-4af66fcd97e7", "subnet_id": "4a9348f2-f232-4700-a440-2f1641d80960", "security_group_id": "c57b9db2-cccb-4c0d-b058-7ea51dda0c99", "mode": "ReplicaSet", "flavor": [ { "type": "replica", "num": 1, "storage": "ULTRAHIGH", "size": 100, "spec_code": "dds.mongodb.c6.large.2.repset" } ], "backup_strategy": { "start_time": "08:00-09:00", "keep_days": "8" }, "restore_point": { "instance_id": "d5833c2854a4486cb7960f829269e211in02", "type": "timestamp", "restore_time": 1607689584000 }, "ssl_option": "1", "tags" : [{ "key" : "dds001", "value" : "dds001" }] }
  • python mongo客户端 前提条件 连接数据库的弹性云服务器必须和DDS实例之间网络互通,可以使用curl命令连接DDS实例服务端的IP和端口号,测试网络连通性。 curl ip:port 返回“It looks like you are trying to access MongoDB over HTTP on the native driver port.”,说明网络互通。 在弹性云服务器上安装Python以及第三方安装包pymongo。推荐使用pymongo2.8版本。 如果开启SSL,需要在界面上下载根证书,并上传到弹性云服务器。 连接代码 SSL开启 import ssl import os from pymongo import MongoClient # 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全 # 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV rwuser = os.getenv('EXAMPLE_USERNAME_ENV') password = os.getenv('EXAMPLE_PASSWORD_ENV') conn_urls="mongodb://%s:%s@ip:port/{mydb}?authSource=admin" connection = MongoClient(conn_urls % (rwuser, password),connectTimeoutMS=5000,ssl=True, ssl_cert_reqs=ssl.CERT_REQUIRED,ssl_match_hostname=False,ssl_ca_certs=${path to certificate authority file}) dbs = connection.database_names() print "connect database success! database names is %s" % dbs SSL关闭 import ssl import os from pymongo import MongoClient # 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密),确保安全 # 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV rwuser = os.getenv('EXAMPLE_USERNAME_ENV') password = os.getenv('EXAMPLE_PASSWORD_ENV') conn_urls="mongodb://%s:%s@ip:port/{mydb}?authSource=admin" connection = MongoClient(conn_urls % (rwuser, password),connectTimeoutMS=5000) dbs = connection.database_names() print "connect database success! database names is %s" % dbs 注意事项 {mydb}代表要连接数据库的名称。 URL中的认证数据库必须为“admin”,即“authSource=admin”。
  • mongo shell连接 前提条件 连接数据库的弹性云服务器必须和DDS实例之间网络互通,可以使用curl命令连接DDS实例服务端的IP和端口号,测试网络连通性。 curl ip:port 返回“It looks like you are trying to access MongoDB over HTTP on the native driver port.”,说明网络互通。 在MongoDB官网,下载与数据库实例版本号一致的客户端安装包。解压后获取其中的“mongo”文件,并上传到弹性云服务器。 如果开启SSL,需要在界面上下载根证书,并上传到弹性云服务器。 连接命令 SSL开启 ./mongo ip:port --authenticationDatabase admin -u username -p password --ssl --sslCAFile $path to certificate authority file --sslAllowInvalidHostnames SSL关闭 ./mongo ip:port --authenticationDatabase admin -u username -p password 表1 参数说明 参数 说明 ip 如果通过弹性云服务器连接,“ip”是主机IP,即“基本信息”页面该实例的“内网地址”。 如果通过连接了公网的设备访问,“ip”为该实例已绑定的“弹性公网IP”。 port 端口,默认8635,当前端口,参考“基本信息”页面该实例的“数据库端口”。 username 当前用户名。 password 当前用户的密码。 path to certificate authority file SSL证书的路径。 注意事项 如果开启SSL,连接命令中必须包含“--ssl”和“--sslCAFile”选项。 数据库认证“--authenticationDatabase”必须为“admin”,rwuser用户必须要在admin上认证。 更多信息,请参见《文档数据库服务快速入门》中各实例类型下“连接实例”的内容。
  • 选择合适的分片键 背景 分片集群中数据的分片以集合为基础单位,集合中的数据通过分片键被分成多个部分。分片键是在集合中选择的一个合适的字段,数据拆分时以该分片键的值为依据均衡地分布到所有分片中。如果您没有选择到合适的的分片键,可能会降低集群的使用性能,出现执行分片语句时执行过程卡住的问题。 分片键一旦设置后不能再更改。如果未选取到合适的分片键,需要使用正确的分片策略,将数据迁移到新的集合后重新执行分片。 合适的分片键的特点 所有的插入、更新以及删除操作,将会均匀分发到集群中的所有分片中。 key的分布足够离散。 尽量避免scatter-gather查询。 如果所选分片键不具备以上所有特点,将会影响集群的读写扩展性。例如,通过find()操作读取的工作量在分片中非均匀分布,最终会产生查询热分片。同样,如果写工作量(插入、更新和修改)在分片中非均匀分布,最终会产生写热分片,严重限制分片的优势。因此,您需要根据应用读写状态(重读取还是重写入)、经常查询及写入的数据等业务需求,调整您的分片键。 需要注意,对已有数据分片后,如果update请求的filter中未携带片键字段并且选项upsert:true或者multi:false,那么update 请求会报错,并返回“An upsert on a sharded collection must contain the shard key and have the simple collation.” 判断标准 您可以通过表2中的几个维度,判断所选分片键是否能够满足业务需求。 表2 合理分片键的判断依据 判断依据 说明 片键基数 片键基数是指划分数据块的能力。例如,要记录某个学校的学生信息,由于学生的年龄比较集中,如果选择年龄作为分片键,同一个数据段中将存储很多同龄学生的数据,影响集群的性能以及可管理性。由于学生的学号唯一,如果选择学号作为分片键,分片基数较大,有利于数据的均匀分布。 写分布 若用户业务在同一时间段有大量写操作,则希望这些写操作能够均匀分布到各个分片上。如果数据分布策略为范围分片,并以一个单调递增的值作为分片键,此时,大量写入的数据同样是片键字段递增,数据将写入同一个分片。 读分发 若用户业务在同一时间段有大量读操作,则希望这些读操作能够均匀分布到各个分片上,以充分利用各分片节点的计算性能。 定向读 dds mongos查询路由器可以执行定向查询(只查询一个分片)或scatter/gather查询(查询所有分片)。只有查询中存在分片键,dds mongos才能定位到单一分片,因此,您需要选择在业务运行时可用于普遍查询的分片键。如果您选择合成的分片键,将无法在定向查询中使用该片键,所有的查询方式将变成scatter/gather查询,从而限制扩展读数据的能力。
  • 选择合适的数据分布策略 分片集群支持将单个集合的数据分散存储在多个分片上,用户可以根据集合内文档的分片键来分布数据。 目前,主要支持两种数据分布策略,即范围分片(Range based sharding)和Hash分片(Hash based sharding),设置方式请参见4。 下面分别介绍这两种数据分布策略以及各自的优缺点。 范围分片 基于范围进行分片,即集群按照分片键的范围把数据分成不同部分。假设有一个数字分片键,为一条从负无穷到正无穷的直线,每一个片键的值均在直线上进行标记。可以理解为将该直线划分为更短的不重叠的片段,并称之为数据块,每个数据块包含了分片键在一定的范围内的数据。 图1 数据分布示意图 如上图所示,x表示范围分片的片键,x的取值范围为[minKey,maxKey],且为整型。将整个取值范围划分为多个chunk,每个chunk(通常配置为64MB)包含其中一小段的数据。其中,chunk1包含x值在[minKey, -75]中的所有文档,每个chunk的数据都存储在同一个分片上,每个分片可以存储多个chunk,并且chunk存储在分片中的数据会存储在config服务器中,dds mongos也会根据各分片上的chunk的数据自动执行负载均衡。 范围分片能够很好的满足范围查询的需求,例如,查询x的取值在[-60,20]中的文档,仅需dds mongos将请求路由到chunk2。 范围分片的缺点在于,如果分片键有明显递增(或递减)趋势,新插入的文档很大程度上会分布到同一个chunk,从而无法扩展写的能力。例如,使用“_id”作为分片键,集群自动生成id的高位值将是递增的时间戳。 Hash分片 根据用户的分片键值计算出Hash值(长度64bit且为整型),再按照范围分片策略,根据Hash值将文档分布到不同的chunk中。基于Hash分片主要的优势为保证数据在各节点上分布基本均匀,具有“相近”片键的文档很可能不会存储在同一个数据块中,数据的分离性更高。 图2 数据分布示意图 Hash分片与范围分片互补,能将文档随机分散到各个chunk,充分扩展写能力,弥补范围分片的不足。但所有的范围查询要分发到后端所有的分片,才能获取满足条件的文档,查询效率低。
  • 选择合适的分片键 背景 分片集群中数据的分片以集合为基础单位,集合中的数据通过分片键被分成多个部分。分片键是在集合中选择的一个合适的字段,数据拆分时以该分片键的值为依据均衡地分布到所有分片中。如果您没有选择到合适的的分片键,可能会降低集群的使用性能,出现执行分片语句时执行过程卡住的问题。 分片键一旦设置后不能再更改。如果未选取到合适的分片键,需要使用正确的分片策略,将数据迁移到新的集合后重新执行分片。 合适的分片键的特点 所有的插入、更新以及删除操作,将会均匀分发到集群中的所有分片中。 key的分布足够离散。 尽量避免scatter-gather查询。 如果所选分片键不具备以上所有特点,将会影响集群的读写扩展性。例如,通过find()操作读取的工作量在分片中非均匀分布,最终会产生查询热分片。同样,如果写工作量(插入、更新和修改)在分片中非均匀分布,最终会产生写热分片,严重限制分片的优势。因此,您需要根据应用读写状态(重读取还是重写入)、经常查询及写入的数据等业务需求,调整您的分片键。 需要注意,对已有数据分片后,如果update请求的filter中未携带片键字段并且选项upsert:true或者multi:false,那么update 请求会报错,并返回“An upsert on a sharded collection must contain the shard key and have the simple collation.” 判断标准 您可以通过表2中的几个维度,判断所选分片键是否能够满足业务需求。 表2 合理分片键的判断依据 判断依据 说明 片键基数 片键基数是指划分数据块的能力。例如,要记录某个学校的学生信息,由于学生的年龄比较集中,如果选择年龄作为分片键,同一个数据段中将存储很多同龄学生的数据,影响集群的性能以及可管理性。由于学生的学号唯一,如果选择学号作为分片键,分片基数较大,有利于数据的均匀分布。 写分布 若用户业务在同一时间段有大量写操作,则希望这些写操作能够均匀分布到各个分片上。如果数据分布策略为范围分片,并以一个单调递增的值作为分片键,此时,大量写入的数据同样是片键字段递增,数据将写入同一个分片。 读分发 若用户业务在同一时间段有大量读操作,则希望这些读操作能够均匀分布到各个分片上,以充分利用各分片节点的计算性能。 定向读 dds mongos查询路由器可以执行定向查询(只查询一个分片)或scatter/gather查询(查询所有分片)。只有查询中存在分片键,dds mongos才能定位到单一分片,因此,您需要选择在业务运行时可用于普遍查询的分片键。如果您选择合成的分片键,将无法在定向查询中使用该片键,所有的查询方式将变成scatter/gather查询,从而限制扩展读数据的能力。
  • 选择合适的数据分布策略 分片集群支持将单个集合的数据分散存储在多个分片上,用户可以根据集合内文档的分片键来分布数据。 目前,主要支持两种数据分布策略,即范围分片(Range based sharding)和Hash分片(Hash based sharding),设置方式请参见4。 下面分别介绍这两种数据分布策略以及各自的优缺点。 范围分片 基于范围进行分片,即集群按照分片键的范围把数据分成不同部分。假设有一个数字分片键,为一条从负无穷到正无穷的直线,每一个片键的值均在直线上进行标记。可以理解为将该直线划分为更短的不重叠的片段,并称之为数据块,每个数据块包含了分片键在一定的范围内的数据。 图1 数据分布示意图 如上图所示,x表示范围分片的片键,x的取值范围为[minKey,maxKey],且为整型。将整个取值范围划分为多个chunk,每个chunk(通常配置为64MB)包含其中一小段的数据。其中,chunk1包含x值在[minKey, -75]中的所有文档,每个chunk的数据都存储在同一个分片上,每个分片可以存储多个chunk,并且chunk存储在分片中的数据会存储在config服务器中,dds mongos也会根据各分片上的chunk的数据自动执行负载均衡。 范围分片能够很好的满足范围查询的需求,例如,查询x的取值在[-60,20]中的文档,仅需dds mongos将请求路由到chunk2。 范围分片的缺点在于,如果分片键有明显递增(或递减)趋势,新插入的文档很大程度上会分布到同一个chunk,从而无法扩展写的能力。例如,使用“_id”作为分片键,集群自动生成id的高位值将是递增的时间戳。 Hash分片 根据用户的分片键值计算出Hash值(长度64bit且为整型),再按照范围分片策略,根据Hash值将文档分布到不同的chunk中。基于Hash分片主要的优势为保证数据在各节点上分布基本均匀,具有“相近”片键的文档很可能不会存储在同一个数据块中,数据的分离性更高。 图2 数据分布示意图 Hash分片与范围分片互补,能将文档随机分散到各个chunk,充分扩展写能力,弥补范围分片的不足。但所有的范围查询要分发到后端所有的分片,才能获取满足条件的文档,查询效率低。
  • 使用RocksDB存储引擎的华为云DDS在执行大量增删改操作时,发现监控中出现磁盘来回波动、CPU毛刺的现象,这是为什么? RocksDB存储引擎下,所有的写入均为追加写,不管是更新还是删除,都不会直接修改原数据,而是追加写在尾端,因此同key可能会在磁盘上存在不同版本的值。追加写过程中,同一条数据的多版本同时存在,磁盘容量会上升。 不同版本的值最终会在新写入的数据量到达一定量后触发后台归并,即RocksDB的Compaction动作。归并数据动作是异步操作,当一轮运行结束后会将本轮涉及到的多版本数据进行归并合一,归并后会生成新的单版本数据数据文件,删除老的多版本数据文件,在生成新文件和删除老文件这段过渡期,新老文件会同时存在,即磁盘此时会短暂上涨,归并数据结束后,磁盘容量会即时下降。 归并数据操作本身会占用少量CPU资源,因此可能会出现轻微的CPU毛刺现象。 如果发现磁盘和CPU占用持续过高,请联系华为工程师处理。
  • RocksDB和WiredTiger两者有什么区别? 写机制的区别 WiredTiger存储引擎的数据结构为B+ tree,落盘数据中一个键(key)对应一个版本号(version),对某一个键(key)进行插入、更新或删除操作都是直接操作对应的数据节点。 Rocksdb存储引擎的数据结构为LSM-tree,写数据就像写日志,以追加写的方式进行。落盘数据除了一个键(key),值(value)之外,还有对应的版本号(version)。同一个键(key)在磁盘上有多个版本(version)的数据。业务层的插入、更新、删除操作,在Rocksdb侧都是写操作。这些多版本数据积压到一定阈值后,会触发后台自动归并,对多版本(version)的数据进行合并,这个行为就是RocksDB的Compaction。 数据组织的区别 WiredTiger存储引擎中一个集合(collection)的数据或者一个索引的数据对应一个磁盘文件,集合是多大,对应的文件就是多大。 RocksDB存储引擎下则没有集合(collection)维度,而是64M一个文件分布在磁盘上。
  • 华为云DDS 4.2及其以上版本将存储引擎切换为RocksDB会对业务产生影响吗? 功能方面:存储引擎是数据库的一个组件,负责管理数据在内存和磁盘中的存储方式。RocksDB和WiredTiger虽然是不同的存储引擎,数据库服务会封装存储引擎,极大兼容社区接口使用方式,开发者使用层面无使用差异感知,业务无差异影响。 性能方面:当前RocksDB存储引擎已经经过长期的社区演进,结合DDS团队对其定制化的开发,性能方面二者切换无明显差异,部分查询场景下RocksDB存储引擎表现更优,存储或计算资源使用方面或存在少量差异。