文档数据库服务 DDS
文档数据库服务 DDS
- 最新动态
- 功能总览
-
服务公告
- 漏洞公告
-
产品公告
- 【通知】2024年11月5日起文档数据库服务DDS5.0版本集群开放公测
- 【通知】2024年10月11日起文档数据库服务DDS副本集5.0版本开始转商计费
- 【通知】华为云文档数据库服务DDS3.4版本计划于2024年10月11日停售
- 【通知】2024年07月24日起文档数据库服务DDS5.0版本开放公测
- 【通知】2023年02月15日起文档数据库服务上线x86架构增强Ⅱ型副本集和集群shard的1:8系列规格
- 【通知】文档数据库服务DDS4.4邀请公测
- 【停售公告】华为云文档数据库服务DDS单节点规格计划于2023年07月15日停售内部通知
- 【通知】2023年10月8日起文档数据库服务DDS4.4版本开始转商计费
- 版本说明
- 产品发布说明
- 产品介绍
- 计费说明
- 快速入门
- 开发指南
-
用户指南
- 购买实例
- 连接实例
- 数据迁移
- 性能调优
- 权限管理
- 实例生命周期管理
- 变更实例
- 数据备份
- 数据恢复
- 参数模板管理
- 连接管理
- 数据库使用
- 数据安全性
- 监控与告警
- 审计
- 日志管理
- 任务中心
- 智能DBA助手
- SQL自动查杀
- 跨可用区容灾
- 标签管理
- 配额管理
- DDS使用规范建议
- 最佳实践
- 安全白皮书
- 性能白皮书
-
API参考
- 使用前必读
- API概览
- 如何调用API
- 快速入门
-
API v3(推荐)
- 查询API版本
- 查询数据库版本信息
- 查询数据库规格
- 查询数据库磁盘类型
-
实例管理
- 创建实例
- 重启实例
- 删除实例
- 查询实例列表和详情
- 扩容实例存储容量
- 扩容集群实例的节点数量
- 变更实例规格
- 切换副本集实例的主备节点
- 切换SSL开关
- 修改实例名称
- 修改实例备注
- 修改数据库端口
- 变更实例安全组
- 绑定弹性公网IP
- 解绑弹性公网IP
- 修改实例内网地址
- 创建集群的Shard/Config IP
- 副本集跨网段访问配置
- 查询实例可迁移到的可用区
- 实例可用区迁移
- 设置实例回收站策略
- 扩容副本集实例的节点数量
- 实例新增只读节点
- 数据库补丁升级
- 开启/关闭秒级监控
- 查询秒级监控配置
- 设置可维护时间段
- 查询实例回收站策略
- 查询回收站实例列表
- 检查弱密码
- 查询数据库补丁升级预估时长
- 查询实例磁盘信息
- 获取SSL证书下载地址
- 查询数据库复制集名称
- 修改数据库复制集名称
- 删除实例的节点
- 删除实例的只读节点
- 查询副本集跨网段访问配置
- 查询LTS日志配置信息
- 关联LTS日志流
- 解除关联LTS日志流
- 设置磁盘自动扩容策略
- 查询磁盘自动扩容策略
- 批量数据库补丁升级
- 连接管理
- 备份与恢复
- 参数配置
- 获取日志信息
- 标签管理
- 管理数据库和用户
- 配额管理
- 数据库运维
- 任务管理
- API v3(即将下线)
- 应用示例
- 权限策略和授权项
- 附录
- SDK参考
- 场景代码示例
- 常见问题
-
故障排除
- 概述
- DDS实例节点故障处理机制
- 连接失败,提示:network error while attempting to run command ‘isMaster’
- 连接失败,提示:No route to host以及connection attempt failed
- 连接失败,提示:Authentication failed
- 连接失败,提示:couldn't connect to server
- 连接失败,提示:cannot list multiple servers in URL without ‘replicaSet’ option
- Java驱动连接实例失败,提示:Timeout while receiving message
- 连接失败,提示:exception: login failed 以及 U_STRINGPREP_PROHIBITED_ERROR
- 视频帮助
- 文档下载
- 通用参考
本文导读
展开导读
链接复制成功!
集群实例负载不均衡问题排查
对于集群方式部署的实例,常见Shard间负载不均衡,一般有如下原因:没有做分片,片键选择不正确,不做chunk预置,shard间均衡速度低于数据插入速度等。
本章节主要介绍负载不均衡的常见处理方法。
排查方法
- 通过客户端连接数据库。
- 执行如下命令,查看分片信息。
sh.status()
mongos> sh.status() \--- Sharding Status --- sharding version: { "_id" : 1, "minCompatibleVersion" : 5, "currentVersion" : 6, "clusterId" : ObjectId("60f9d67ad4876dd0fe01af84") } shards: { "_id" : "shard_1", "host" : "shard_1/172.16.51.249:8637,172.16.63.156:8637", "state" : 1 } { "_id" : "shard_2", "host" : "shard_2/172.16.12.98:8637,172.16.53.36:8637", "state" : 1 } active mongoses: "4.0.3" : 2 autosplit: Currently enabled: yes balancer: Currently enabled: yes Currently running: yes Collections with active migrations: test.coll started at Wed Jul 28 2021 11:40:41 GMT+0000 (UTC) Failed balancer rounds in last 5 attempts: 0 Migration Results for the last 24 hours: 300 : Success databases: { "_id" : "test", "primary" : "shard_2", "partitioned" : true, "version" : { "uuid" : UUID("d612d134-a499-4428-ab21-b53e8f866f67"), "lastMod" : 1 } } test.coll shard key: { "_id" : "hashed" } unique: false balancing: true chunks: shard_1 20 shard_2 20
- “databases”中列出的所有数据库都是通过enableSharding开放了分片的库。
- “test.coll”表示开启分片的namespace信息,其中test为集合所在的库名,coll为开启分片的集合名。
- “shard key”表示前面集合的分片键,分片方式“_id : hashed”表示通过_id进行哈希分片,如果是“_id : -1”,则代表通过_id的范围进行分片。
- “chunks”代表分片的分布情况。
- 根据2查询出的结果,分析分片信息。
- 如果业务性能存在瓶颈的数据库和集合,在上述“databases”以及子项中不存在,则说明业务集合没有进行分片。对于集群来说这意味着业务只有一个Shard承载,没有应用DDS的水平扩展能力。
此场景下可以通过如下的命令开启分片,充分发挥实例的水平扩展能力。
mongos> sh.enableSharding("<database>") mongos> use admin mongos> db.runCommand({shardcollection:"<database>.<collection>",key:{"keyname":<value> }})
- 如果“shardKey”分片片键选择不合理,也会导致负载不均衡。典型场景有业务热点数据分布在某个范围内,而分片的片键选择范围分片的方式,那么可能会出现热点数据所在的chunk对应的Shard负载会明显的高于其他Shard,最终导致整体性能出现瓶颈。
此场景下可以通过重新设计片键的分布方式来达到目标,比如将范围分片修改为哈希分片。
mongos> db.runCommand({shardcollection:"<database>.<collection>",key:{"keyname":<value> }})
- 如果存在集中大批量的插入数据的场景,数据量超过单shard承载能力的话,可能会出现Balance速度赶不上插入速度,导致主shard存储空间占用率过高。
此场景可以使用sar命令查看服务器网络连接情况,分析每个网卡的传输量和是否达到传输上限。
sar -n DEV 1 //1为间隔时间 Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil Average: lo 1926.94 1926.94 25573.92 25573.92 0.00 0.00 0.00 0.00 Average: A1-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: A1-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: NIC0 5.17 1.48 0.44 0.92 0.00 0.00 0.00 0.00 Average: NIC1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: A0-0 8173.06 92420.66 97102.22 133305.09 0.00 0.00 0.00 0.00 Average: A0-1 11431.37 9373.06 156950.45 494.40 0.00 0.00 0.00 0.00 Average: B3-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: B3-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
说明:
- “rxkB/s”为每秒接收的kB数。
- “txkB/s”为每秒发送的kB数。
检查完后,按“Ctrl+Z”键退出查看。
对于网络过高的情况,建议对MQL语句进行分析,优化思路,降低带宽消耗,提升规格扩大网络吞吐能力。
- 建议排查业务是否存在分片集合的情况消息中未携带ShardKey的情况,此场景下请求消息会进行广播,增加带宽消耗。
- 控制客户端并发线程数,降低网络带宽流量。
- 以上操作无法解决问题时,请及时提升实例规格,高规格节点对应更高网络吞吐能力的虚拟机。
- 如果业务性能存在瓶颈的数据库和集合,在上述“databases”以及子项中不存在,则说明业务集合没有进行分片。对于集群来说这意味着业务只有一个Shard承载,没有应用DDS的水平扩展能力。
父主题: 性能调优