0

    因服务器资源限制,为每日写入200G的系统搭建Mongodb分片集群时,选择的是一主一从一仲裁节点的搭建模式。主从主机逻辑卷划分约27T存储空间。
   开始搭建时,将分片1的数据写入到lv1中。目前已使用约23T。
   今日添加lv2,约27T存储,并添加分片2,数据存储指向lv2。所有操作执行完成。但经过8小时的观察,分片1已有集合数据未能通过均衡器迁移到分片2上。
  主要有两个问题想请教:
  ①分片1的逻辑卷有27T空间,数据最大能写入多大的存储空间?总容量的85%?
  ②已有集合数据未能均衡到新的分片,可能是哪里有问题?
                                                  期待各位老师的指导,感恩与感谢。

因社区上传图片一直报错,此处贴上查询结果:

mongos> db.stats()db.stats()
{
“raw” : {
“shard3/192.168.1.167:22003,192.168.1.168:22003” : {
“db” : “rf_db”,
“collections” : 0,
“views” : 0,
“objects” : 0,
“avgObjSize” : 0,
“dataSize” : 0,
“storageSize” : 0,
“numExtents” : 0,
“indexes” : 0,
“indexSize” : 0,
“scaleFactor” : 1,
“fileSize” : 0,
“fsUsedSize” : 0,
“fsTotalSize” : 0,
“ok” : 1
},
“shard2/192.168.1.167:22002,192.168.1.168:22002” : {
“db” : “rf_db”,
“collections” : 6,
“views” : 0,
“objects” : 238588633,
“avgObjSize” : 103180.52150836121,
“dataSize” : 24617699578907,
“storageSize” : 24775974219776,
“numExtents” : 0,
“indexes” : 14,
“indexSize” : 7591469056,
“scaleFactor” : 1,
“fsUsedSize” : 24908139327488,
“fsTotalSize” : 29992543059968,
“ok” : 1
}
},
“objects” : 238588633,
“avgObjSize” : 103180,
“dataSize” : NumberLong(“24617699578907”),
“storageSize” : NumberLong(“24775974219776”),
“numExtents” : 0,
“indexes” : 14,
“indexSize” : 7591469056,
“scaleFactor” : 1,
“fileSize” : 0,
“ok” : 1,
“operationTime” : Timestamp(1641978491, 616),
“$clusterTime” : {
“clusterTime” : Timestamp(1641978491, 616),
“signature” : {
“hash” : BinData(0,”PPsrhnJIPunsfMQpXCbKRFmeS8U=”),
“keyId” : NumberLong(“7015467819726798850”)
}
}
}
mongos>

mongos> sh.status()sh.status()
— Sharding Status —
sharding version: {
“_id” : 1,
“minCompatibleVersion” : 5,
“currentVersion” : 6,
“clusterId” : ObjectId(“608a2217e1b722d5ac04c74f”)
}
shards:
{ “_id” : “shard2”, “host” : “shard2/192.168.1.167:22002,192.168.1.168:22002”, “state” : 1 }
{ “_id” : “shard3”, “host” : “shard3/192.168.1.167:22003,192.168.1.168:22003”, “state” : 1 }
active mongoses:
“4.2.8” : 1
autosplit:
Currently enabled: yes
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
512 : Success
databases:
{ “_id” : “config”, “primary” : “config”, “partitioned” : true }
config.system.sessions
shard key: { “_id” : 1 }
unique: false
balancing: true
chunks:
shard2 512
shard3 512
too many chunks to print, use verbose if you want to force print
{ “_id” : “rf_db”, “primary” : “shard2”, “partitioned” : true, “version” : { “uuid” : UUID(“dd83579d-2fc8-49df-889e-8fa6cb1adce9”), “lastMod” : 1 } }
rf_db.pho
shard key: { “files_id” : 1, “n” : 1 }
unique: false
balancing: true
chunks:
shard2 1
{ “files_id” : { “$minKey” : 1 }, “n” : { “$minKey” : 1 } } –>> { “files_id” : { “$maxKey” : 1 }, “n” : { “$maxKey” : 1 } } on : shard2 Timestamp(1, 0)
rf_db.pho2
shard key: { “files_id” : 1, “n” : 1 }
unique: false
balancing: true
chunks:
shard2 1
{ “files_id” : { “$minKey” : 1 }, “n” : { “$minKey” : 1 } } –>> { “files_id” : { “$maxKey” : 1 }, “n” : { “$maxKey” : 1 } } on : shard2 Timestamp(1, 0)

mongos>

选择最佳答案

感谢您的回复。
目前rf_db.pho 数据为22T。rf_db.pho2为60G。
确实如您所说,最开始分片是失败的,现在添加分片后未正常写入分片数据,因此我对rf_db.pho.chunks 添加索引,但是在报错。还想继续请教一下。
执行:sh.shardcol1ection(“rf_db.pho.chunks” , {“files_id”: 1,”n”:1 } )
返回:”code”:10334,
“errmisg” : “esowobj size:42819740(0.280509C) is inwalid. size must be between 0 and 16795(13ns) First element: operationTime:timestamp(15013221,22)..
详细日志提示:[ShardRegistry] warning: log line attempted (41816kB) over max size (10kB), printing beginning and end … Assertion: BSONObjectTooLarge: BSONObj size: 30896244 (0x1D77074) is invalid. Size must be between 0 and 16793600(16MB) First element: splitKeys: [ { files_id: ObjectId(‘609340a641337455d8999886’), n: 0 }
搜索了一下,大家意思是这个是数据同步异常,需要重建副本。但我的数据比较大。是否有其他处理办法呢?或者能否手工设置一个同步的时段,让均衡器将该同步时段之后的数据用来做均衡?
这部分资料较少,未找到有帮助的,所以再来请教。

是Ojbect超过16M了。

继续请教一下,object超过16M之后无法创建chunks索引,该如何处理呢?
可以尝试找到单个文件超过16M的文档并将其删除,再创建,是否可行呢?