16.MongoDB系列之分片管理
1. 查看当前状态
1.1 查看配置信息
mongos> use config
// 查看分片
mongos> db.shards.find()
{ "_id" : "study", "host" : "study/localhost:27018,localhost:27019,localhost:27020", "state" : 1 }
// 查看分片集合信息
mongos> db.collections.find().pretty()
{
"_id" : "config.system.sessions",
"lastmodEpoch" : ObjectId("62db964a7decd7b3c3f36bc1"),
"lastmod" : ISODate("1970-02-19T17:02:47.296Z"),
"dropped" : false,
"key" : {
"_id" : 1
},
"unique" : false,
"uuid" : UUID("5351f3f9-63e3-44b8-af9a-a0261e681bef")
}
// 查询集合中块信息
mongos> db.chunks.find().pretty()
{
"_id" : "config.system.sessions-_id_MinKey",
"ns" : "config.system.sessions",
"min" : {
"_id" : { "$minKey" : 1 }
},
"max" : {
"_id" : { "$maxKey" : 1 }
},
"shard" : "study",
"lastmod" : Timestamp(1, 0),
"lastmodEpoch" : ObjectId("62db964a7decd7b3c3f36bc1"),
"history" : [
{
"validAfter" : Timestamp(1658558026, 4),
"shard" : "study"
}
]
}
// 跟踪集群拆分和迁移情况
mongos> db.changelog.find({'what': 'split'}).pretty()
2. 跟踪网络连接
mongos> db.adminCommand({'connPoolStats':1})
{
"numClientConnections" : 0,
"numAScopedConnections" : 0,
"totalInUse" : 0,
"totalAvailable" : 9,
"totalCreated" : 14,
"totalRefreshing" : 0,
"pools" : {
"NetworkInterfaceTL-ShardRegistry" : {
"poolInUse" : 0,
"poolAvailable" : 3,
"poolCreated" : 8,
"poolRefreshing" : 0,
"localhost:27038" : {
"inUse" : 0,
"available" : 1,
"created" : 2,
"refreshing" : 0
},
"localhost:27039" : {
"inUse" : 0,
"available" : 1,
"created" : 5,
"refreshing" : 0
},
"localhost:27040" : {
"inUse" : 0,
"available" : 1,
"created" : 1,
"refreshing" : 0
}
},
"NetworkInterfaceTL-TaskExecutorPool-0" : {
"poolInUse" : 0,
"poolAvailable" : 6,
"poolCreated" : 6,
"poolRefreshing" : 0,
"localhost:27018" : {
"inUse" : 0,
"available" : 1,
"created" : 1,
"refreshing" : 0
},
"localhost:27019" : {
"inUse" : 0,
"available" : 1,
"created" : 1,
"refreshing" : 0
},
"localhost:27020" : {
"inUse" : 0,
"available" : 1,
"created" : 1,
"refreshing" : 0
},
"localhost:27038" : {
"inUse" : 0,
"available" : 1,
"created" : 1,
"refreshing" : 0
},
"localhost:27039" : {
"inUse" : 0,
"available" : 1,
"created" : 1,
"refreshing" : 0
},
"localhost:27040" : {
"inUse" : 0,
"available" : 1,
"created" : 1,
"refreshing" : 0
}
}
},
"hosts" : {
"localhost:27018" : {
"inUse" : 0,
"available" : 1,
"created" : 1,
"refreshing" : 0
},
"localhost:27019" : {
"inUse" : 0,
"available" : 1,
"created" : 1,
"refreshing" : 0
},
"localhost:27020" : {
"inUse" : 0,
"available" : 1,
"created" : 1,
"refreshing" : 0
},
"localhost:27038" : {
"inUse" : 0,
"available" : 2,
"created" : 3,
"refreshing" : 0
},
"localhost:27039" : {
"inUse" : 0,
"available" : 2,
"created" : 6,
"refreshing" : 0
},
"localhost:27040" : {
"inUse" : 0,
"available" : 2,
"created" : 2,
"refreshing" : 0
}
},
"replicaSets" : {
"configRS" : {
"hosts" : [
{
"addr" : "localhost:27038",
"ok" : true,
"ismaster" : false,
"hidden" : false,
"secondary" : true,
"pingTimeMillis" : 0
},
{
"addr" : "localhost:27039",
"ok" : true,
"ismaster" : true,
"hidden" : false,
"secondary" : false,
"pingTimeMillis" : 0
},
{
"addr" : "localhost:27040",
"ok" : true,
"ismaster" : false,
"hidden" : false,
"secondary" : true,
"pingTimeMillis" : 0
}
]
},
"study" : {
"hosts" : [
{
"addr" : "localhost:27018",
"ok" : true,
"ismaster" : false,
"hidden" : false,
"secondary" : true,
"pingTimeMillis" : 0,
"tags" : {
"dc" : "sh"
}
},
{
"addr" : "localhost:27019",
"ok" : true,
"ismaster" : true,
"hidden" : false,
"secondary" : false,
"pingTimeMillis" : 0,
"tags" : {
"dc" : "sh"
}
},
{
"addr" : "localhost:27020",
"ok" : true,
"ismaster" : false,
"hidden" : false,
"secondary" : true,
"pingTimeMillis" : 0,
"tags" : {
"dc" : "bj"
}
}
]
}
},
"ok" : 1,
"operationTime" : Timestamp(1658569778, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1658569778, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
可以在命令行配置 --maxConns选项来限制其可以创建的连接数
2. 服务器管理
2.1 添加服务器
可以在任何时候添加新的mongos进程。
可以使用addShard命令添加新的分片
2.2 修改分片中的服务器
要更改一个分片的成员,需要直接连接到该分片的主节点(而不是通过mongos),并重新配置副本集。集群配置会监测到变更并自动更新config.shards.不要手动修改config.shards
2.3 删除分片
> db.adminCommand({'removeShard': 'study'})
当有数据库将被移除的分片作为其主分片,则会提示you need to drop or movePrimary these databases
此时先将此数据库移动到其他分片, 在执行删除即可
> db.adminCommand({'movePrimary': 'video', to: 'shard01'})
> db.adminCommand({'removeShard': 'study'})
3. 数据均衡
3.1 均衡器
关闭均衡器是大部分管理操作的先决条件。
// 关闭均衡器
mongos> sh.setBalancerState(false)
// 检查是否仍有均衡过程正在进行
mongos> db.locks.find({'_id': 'balancer'})['state']
mongos> sh.setBalancerState(true)
// 设置均衡时间窗口
mongos> db.settings.update({_id: "balancer"}, {$set: {"activeWindow": {start: "13:00", stop: "16:00"}}}, {upsert:true})
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : "balancer" })
3.2 修改块的大小
// 修改块大小为32M
mongos> db.settings.save({'_id': 'chunksize', 'value': 32})
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : "chunksize" })
3.3 移动块
> sh.moveChunk('video.movies', {imdId: 50000}, "shard0002")
3.4 超大块
当一个块大于config.settings中所设置的最大块大小时,均衡器就不允许移动这个块了。这些不可拆分、不可移动的块被称为超大块
// 检测超大块,其会被标记有jumbo属性
> sh.status()
...
{"x": 5} -->> {"x":6} on : shard0001 jumbo
...
// 拆分超大块,需要先找出片键的拆分点
> sh.splitAt('video.movies', {'imdId': NumberLong('7000000000000000000000')})
对于分发超大块,可以关闭均衡器,临时设置块大小大于该超大块,然后手工移动该块,后恢复块大小及启动均衡器。为了避免超大块,可以修改片键使其具有更小的粒度,如年月日片键,修改为年月日小时分钟秒。
4. 刷新配置
当mongos不能从配置服务器正确更新配置,则可以
> db.adminCommand({'flushRouterConfig': 1})
如果还没有解决,则需要重新启动所有的mongos或mongod进程以清除所有缓存数据
16.MongoDB系列之分片管理的更多相关文章
- mongodb系列之--分片的原理与配置
1.分片的原理概述 分片就是把数据分成块,再把块存储到不同的服务器上,mongodb的分片是自动分片的,当用户发送读写数据请求的时候,先经过mongos这个路由层,mongos路由层去配置服务器请求分 ...
- 13.MongoDB系列之分片简介
1. 分片概念 分片是指跨机器拆分数据的过程,有时也会用术语分区.MongoDB既可以手工分片,也支持自动分片 2. 理解集群组件 分片的目标之一是由多个分片组成的集群对应用程序来说就像是一台服务器. ...
- mongo 3.4分片集群系列之八:分片管理
这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...
- MongoDB 分片管理
在MongoDB(版本 3.2.9)中,分片集群(sharded cluster)是一种水平扩展数据库系统性能的方法,能够将数据集分布式存储在不同的分片(shard)上,每个分片只保存数据集的一部分, ...
- Mongodb 笔记07 分片、配置分片、选择片键、分片管理
分片 1. 分片(sharding)是指将数据拆分,将其分散存放在不同的机器上的过程.有时也用分区(partitioning)来表示这个概念.将数据分散到不同的机器上,不需要功能强大的大型计算机就可以 ...
- MongoDB系列---用户及权限管理02
MongoDB-——Privilege 学习大纲: 1.用户权限管理 2.用户操作 知识回顾: 本系列上一篇博文我们讲述了如何搭建环境以及配置我们的MongoDB,通过搭建环境后我们又学习了如何通过 ...
- MongoDB 分片管理(三)服务器管理
MongoDB 分片管理(三)服务器管理
- 14.MongoDB系列之配置分片
1. 启动服务器 1.1 启动配置服务器 配置服务器是集群的大脑,保存着关于每个服务器包含哪些数据的所有元数据,因此,必须首先创建配置服务器. 由于资源限制,在同一机器上启动三个进程 # mkdir ...
- mongoDB系列之(三):mongoDB 分片
1. monogDB的分片(Sharding) 分片是mongoDB针对TB级别以上的数据量,采用的一种数据存储方式. mongoDB采用将集合进行拆分,然后将拆分的数据均摊到几个mongoDB实例上 ...
随机推荐
- 如何应对外包公司(文思海辉)的Python后端面试
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_151 最近春招如火如荼,我接触到的几位同学也纷纷去市场里试了试水,不得不说由于疫情的影响,导致目前中等水平的开发者择业有了些许困难 ...
- 使用 Liquibase 管理数据库版本 - SpringBoot 2.7 .2 实战基础
优雅哥 SpringBoot 2.7 .2 实战基础 - 05 -使用 Liquibase 管理数据库版本 在企业开发中,数据库版本管理好像是一个伪命题,大多项目都是通过 Power Designer ...
- Apache DolphinScheduler 1.2.0 使用文档(1/8):架构及名词解释
本文章经授权转载,原文链接: https://blog.csdn.net/MiaoSO/article/details/104770720 目录 1. 架构及名词解释 1.1 DolphinSched ...
- day20--Java集合03
Java集合03 8.LinkedList 1)linkedList底层实现了双向链表和双端队列的特点 2)可以添加任意元素(元素可以重复),包括null 3)线程不安全,没有实现同步 LinkedL ...
- Spring源码 04 IOC XML方式
参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...
- ceph 007 双向池同步 rgw对象网关配置 s3对象存储
增量导入导出要基于快照 导出的过程当中害怕镜像被修改所以打快照.快照的数据是不会变化的 镜像级别的双向同步 镜像主到备,备到主.一对一 就算是池模式的双向同步,镜像也具有主备关系 双向同步,池模式 [ ...
- as 和 which 引导非限制性定语从句的区别
定语从句关系代词作用表格:as 和 which 都可以指代整个句子.as 引导非限制性定语从句可以放在主句之前.主句之后.主句之中:which 引导非限制性定语从句只能放在先行词之后. (一)As i ...
- 中国剩余定理+扩展中国剩余定理 讲解+例题(HDU1370 Biorhythms + POJ2891 Strange Way to Express Integers)
0.引子 每一个讲中国剩余定理的人,都会从孙子的一道例题讲起 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二.问物几何? 1.中国剩余定理 引子里的例题实际上是求一个最小的x满足 关键是,其中 ...
- CF914G Sum the Fibonacci (快速沃尔什变换FWT + 子集卷积)
题面 题解 这是一道FWT和子集卷积的应用题. 我们先设 cnt[x] 表示 Si = x 的 i 的数量,那么 这里的Nab[x]指满足条件的 Sa|Sb=x.Sa&Sb=0 的(a,b)二 ...
- 用Python实现广度优先搜索
图是一种善于处理关系型数据的数据结构,使用它可以很轻松地表示数据之间是如何关联的 图的实现形式有很多,最简单的方法之一就是用散列表 背景 图有两种经典的遍历方式:广度优先搜索和深度优先搜索.两者是相似 ...