zoukankan      html  css  js  c++  java
  • MongoDB开启分片后数据分布不均匀

    1 问题现象

    MongoDB使用shard模式,有三个分片,项目上线一段时间后,有了数据量,发现数据分布不均匀,只存在了rs02分片上。

    登录到mongos节点 查看分片状态:

    mongos> sh.status() 

    输出截图如下,rs02分片上有18chunks,rs03上1个,rs01上没有。即数据大部分存在第二个分片rs02上。

    排查问题:

    当时创建分片时确实对表开启了分片,

    查看日志:查看rs02的日志发现以下提示信息并有解决办法,应该是在创建分片时有人手动通过分片的端口即27001 创建了表handleResultMongo,导致MongoDB认为有重名的表但是UUID不同,所以无法均衡数据

    tail -f /server/mongo_data/shard2/log/shard2.log 

    2019-05-29T18:16:13.916+0800 W SHARDING [conn17] Chunk move failed :: caused by :: OperationFailed: 
    Data transfer error: Cannot receive chunk [{ _id: ObjectId('5cd95242e4b0903d331b274f') }, { _id: ObjectId('5cdcfaa7e4b05fcd865deda4') }) for collection scdataDB.handleResultMongo 
    because we already have an identically named collection with UUID ba938910-c68e-4aa6-b45b-61e021067ef7,
    which differs from the donor's UUID 3ea14aae-a87a-4a71-813e-b52c75923c35. 
    Manually drop the collection on this shard if it contains data from a previous incarnation of scdataDB.handleResultMongo

    在分片rs01 上查看确实没有数据

    删除 

    rs01:PRIMARY> db.handleResultMongo.drop()

    已经分布均匀

  • 相关阅读:
    Uboot启动流程分析(四)
    git更新提交到仓库
    MSM8953通过ADB进行AT指令操作
    Uboot启动流程分析(五)
    去除字符串中多个空格,保留一个空格
    socket握手SYN和ACK理解
    Redhat6更改yum源 (转)
    form提供的两种数据传输方式 get和post method=”post“和method=”get”
    linux误删除恢复(未验证)
    web前端学习路线
  • 原文地址:https://www.cnblogs.com/DBABlog/p/12926901.html
Copyright © 2011-2022 走看看