MongoDB - 分片管理
2016-04-23 20:54 abce 阅读(815) 评论(0) 编辑 收藏 举报1.状态检查
1 2 | mongos> sh.status(); mongos> sh.status( true ); |
2.检查配置信息
配置信息都存在config数据库中
1 2 3 4 5 6 7 | config.changelog #跟踪集群记录操作 config.chunks #集合中块的信息 config.collections #集群内所有分片集合的信息 config.databases #集群内所有数据库的信息 config.settings #块大小设置 config.shards #集群内所有分片信息 config.tags #标签设置 |
3.连接信息
#查看连接统计
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | mongos> db.adminCommand({ "connPoolStats" :1}) { "hosts" : { "localhost:30000::0" : { "available" : 1, "created" : 1 }, "localhost:30000::30" : { "available" : 3, "created" : 3 }, "localhost:30001::0" : { "available" : 1, "created" : 1 }, "localhost:30002::0" : { "available" : 1, "created" : 1 } }, "replicaSets" : { }, "createdByType" : { "master" : 6 }, "totalAvailable" : 6, "totalCreated" : 6, "numDBClientConnection" : 9, "numAScopedConnection" : 1, "ok" : 1 } mongos> |
#限制连接数
客户端连接到mongos,mongos会创建至少一个到分片的连接; 一个mongos最多支持创建20000个连接.
参数maxCons选项可以限制连接数,可以在运行mongos的时候,指定参数maxConns,计算分片能够处理的来自单一mongos的连接数量:
1 | maxCons = 20000-(mongos进程的数量*3)- (每个副本集的成员数量*3)- (其他/mongos进程的数量) |
(mongos进程的数量*3) :每个mongos会为每个mongod创建3个连接:一个用于转发客户端请求;一个用于追踪错误信息,即写回监听器;一个用于监控副本集状态
(每个副本集的成员数量*3):主节点会与每个备份节点创建一个连接,而每个备份节点会与主节点创建两个连接,因此总共是3个连接
(其他/mongos进程的数量):其他进程是指可能连接到mongod的进程数量
4.添加服务器
(1) 添加分片
1 2 | $./mongod --dbpath /mdb/data/s5 --logpath /mdb/mlog/s5.log --fork --port 27025 --smallfiles > sh.addShard( "172.31.11.230:27025" ); |
(2) 添加mongos
1 | ./mongos --logpath /mdb/mlog/ss2.log --fork --port 30001 --configdb 172.31.11.230:27020 |
(3) 添加配置服务器
1 2 3 | ./mongod --dbpath /mdb/data/sc --logpath /mdb/mlog/sc.log --fork --port 27020 --configsvr mongos连接多个”配置服务器“: ./mongos --configdb config-1:port,config-2:port,config-3:port... |
5.删除除分片 要保证均衡器是开启的
如果要删除的分片没有被作为primary库,直接使用
1 | > db.adminCommand({ "removeShard" : "172.31.11.230:27028" }) |
如果被作为primary库,需要将这些数据库移走:
1 2 | > db.adminCommand({ "movePrimary" : "blog" , "to" : "172.31.11.230:27109" }) > db.adminCommand({ "removeShard" : "172.31.11.230:27028" }) |
6.修改块的大小
1 2 | > use config > db.settings.save({ "_id" : "chunksize" , "value" :32}); #单位是m |
7.手动移动块
1 | sh.moveChunk( "test.users" ,{ "user_id" :NumberLong( "223439877780288900" )}, "spock" ); |
将user_id为223439877780288900的块移到名为spock的分片上。
必须使用片键来找出需要移动的块。通常指定一个块的最简单的方法是指定他的下边界,不过指定块范围内的任何值都可以(最大值除外)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | 8.特大块 如果块的大小超过了config.settings中设置的大小,均衡器就无法移动这个块了。 (1)检查特大块 sh.status(); 如果块出现jumbo属性,表明该块是特大块 (2)使用datasize命令检查块大小 使用config.chunks集合,查看块范围 > use config > var chunks = db.chunks.find({ "ns" : "shop.goods" }).toArray() > chunks.forEach(printjson); #可以查看上一步得到的变量的值 根据块的范围,找出可能的特大块 > use dbName > db.runCommand({ "datasize" : "dbName.collName" , "keyPattern" :{ "date" :1}, #片名 "min" :chunks[0]. min , "max" :chunks[0]. max }) (3) 特大块分发 ·关闭均衡器 > sh.setBalancerState( false ); ·临时调高最大块的大小值 > use config > db.settings.findOne({ "_id" : "chunksize" }); > db.settings.save({ "_id" : "chunksize" , "value" :1024}); ·使用moveChunk命令移动特大块 > sh.moveChunk( "test.users" ,{ "user_id" :NumberLong( "223439877780288900" )}, "spock" ); > db.adminCommand({ "moveChunk" : "dbName.collName" , "find" :{ "date" :new Date ( "10/03/2015" )}, "to" : "shard0002" , "secondary" Throttle: true #要求迁移过程间歇进行,以免影响性能 }) ·使用splitChunk命令对 from 分片剩余的块进行拆分(实现 from 分片数目和其他分片的块均衡) ·修改块大小 > use config > db.settings.findOne({ "_id" : "chunksize" }); > db.settings.save({ "_id" : "chunksize" , "value" :32}); ·启用均很器 > sh.setBalancerState( true ) (4) 防止特大块出现 细化片键的粒度,尽可能保证每个文档都有唯一的片键。 9.手动刷新配置 如果mongos无法从配置服务器获取配置信息,可以手动刷新 > db.adminCommand({ "flushRouterConfig" :1}); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)