mongodb系列~mongodb集群介绍与管理
mongodb 集群维护
1 简介
谈谈mongodb的集群架构
2 常用的维护命令
1 查看状态 sh.status()
1 version
2 shards: 分片集群shard成员
3 balancer: 平衡器的相关状态:运行状态 尝试次数
平衡器 sh.setBalancerState(true) 开启
sh.stopBalancer() 关闭
sh.getBalancerState() 查看状态
4 database: 注意几个值
1 partitioned:false代表没有采用分片
2 primary s1 代表在s1片上 如果有分片 会列出分片信息 比如 shard key 和chunks
2 config服务库
db.collection.status()查看分片信息
3 如何开启分片
1 库开启分片功能
use admin && db.runCommand( { enablesharding : "test" } )
2 集合片键加索引
use test && db.vast.ensureIndex( { id: 1 } )
3创建片键
use admin && db.runCommand( { shardcollection : "test.vast1",key : {id: 1,name:1} } )
4 数据插入测试
for(i=0;20000<i<40000;i++){ db.vast1.insert({"id":i,"name":"clsn","age":70,"date":new Date()}); }
db.vast.stats()
5 相关总结:
1 片键必须是集合文档中的单索引或者是混合索引
2 片键添加方法sh.shardCollection( namespace, key ) namespace 参数是 database.collection
3 片键一经定义后是无法修改的,定义后有且只有一个,索引本身有唯一性
4 方法 db启动分片->分片加索引->collection启动分片
4 谈分片
1 理想分片:
目标:将插入数据均匀分布到各个分片上;保证CRUD操作能够利用局部性;有足够的粒度进行块拆分。
影响:增加可用的RAM,增加可用磁盘空间,减轻单台服务器的负载,处理单个mongod无法承受的吞吐量
分片场景
1 业务上线时已指定好合理的分片字段,后期不用再更改
需要制定合理的分片规则
2 业务上线制定不合理的分片字段,后期需要重新制定分片规则
需要mongodump出数据,再制定分片,mongorestore导入
3 业务上线时并没有指定任何分片字段,后期需要制定分片规则
需要指定合理的分片规则,然后执行分片命令,这里需要的时间比较长,建议后台执行
可能出现的问题
1 数据分配不均匀,常见于片键的选择不合理 可以通过sh.status() shard的数量对比来判断是否分配不均匀
2 在move chunk过程中,查询的数据不准确
2 分片分类
范围分片
eg:id,date等带有明显顺序的
优势 如果使用升序片键,那么数据物理上会是连续的,有利于基于范围的查询
缺点 1 降低写入性能,空间块利用率不高 2 需要大量的move chunk,因为降低了数据均衡处理能力
启用命令
db.runCommand( { shardcollection : "test.vast1",key : {date:1} } )
Hash 分片
eg:是用户名 邮件地址 udid(唯一设备标识符) md5散列值 或者是数据集中其他一些没有规律的键
优势 能非常好的平均分配到各个shard上
缺点 1 查询性能不高,需要与磁盘更多的IO交互
启用命令
db.runCommand( { shardcollection : "test.vast2",key : {date:"hashed"} } )
联合分片
随机值+范围值组成的联合索引
推荐
注意:
1 采用hash分片的策略chunk总数远远小于升序分片的个数
2 无论采用什么分片策略都要考虑业务本身,业务快是唯一的条件
5 谈谈move chunk
触发条件
1 写入数据时,会先创建一个min,max的chunk,随着数据量不断增加,超过分裂阈值,就会触发chunk分裂
2 当各个分片的chunk分布不均衡,会触发移动过程
决定机制
Balancer在工作时,会根据shardtag,集合的chunk数量,shard间的chunk数量差值来决定是否需要迁移
迁移过程
1 原分片开始启动moveChunk命令,在移动的过程中,所有的操作还会指向原来的分片
2 目标分片开始创建所需要的索引,在3.0以后,moveChunk需要在移动之前,目标分片中存在所有的索引,可以理解为先在目标分片中创建这个索引。
3 目标分片开始向原分片请求数据,并复制数据
4 当数据全部写入到目标分片中,目标分片连接并更新config数据库对应的块信息
5 最后,原分片将这部分块删除。
6 迁移完成标记sh.status()的balance
"state" : 0, #0:非活动状态,1:正在获取,但还没有执行,2:正在均衡,迁移,有锁
Migration Results for the last 24 hours
success 数值不断增长,代表正在进行move chunk
手动触发迁移
希望分隔一个已经存在数据的集合,这个集合所有的数据都在一个分片中
手动触发命令
Sh.moveChunk({“test.vfast1”,{id},”shard_2”})
参数1为namespace 参数2为片键名称 参数3为shard实例名
日志
moving chunk 可以在route.log中观测到
类似于 [Balancer] moving chunk ns
6 集群自动扩容
1 无论何种分片方式都可以实现shard的自动扩容
2 采用db.runCommand({addshard)即可
3 等待move chunk完成
7 相关错误汇总
1 MongoDB chunk too big to move
1 sh.stopBalancer() //关闭平衡器
2 use config && db.chunks.find({jumbo:true}) //查找大块
3 sh.splitAt("db.collection", {shardkye:"拆分的临界值"})//进行手动拆分
4 sh.moveChunk("db.collection", {shardkey:"shardkey所在的块"}, "需要移动的目标分片ID");//进行手动迁移
5 sh.startBalancer()//打开平衡器
总结 2.4.6版本以上,在这个版本里修复了SERVER-9365的问题,能平均地拆分数据块。值得注意的是,由于有的数据块包含有非常多的文档,将会花一定的时间将这些大数据块拆分成可以迁移的小数据块。在这个过程中,您可能还会看到”chunk too big to move”的错误。
8 管理难度
1单副本集(易)
2集群简单分片(中)
3集群复杂分片(难)
补充一点 能简单就简单,不要硬上集群,哪怕上了集群,要简单分片,否则管理难度会成倍增大
9 备份补充
mongo --eval "sh.stopBalancer()"
mongodump -o $TAR_FILE_PATH
mongo --eval "sh.setBalancerState(true)"
mongodb系列~mongodb集群介绍与管理的更多相关文章
- Elasticsearch系列---生产集群的索引管理
概要 索引是我们使用Elasticsearch里最频繁的部分日常的操作都与索引有关,本篇从运维人员的视角,来玩一玩Elasticsearch的索引操作. 基本操作 在运维童鞋的视角里,索引的日常操作除 ...
- MongoDB之分片集群(Sharding)
MongoDB之分片集群(Sharding) 一.基本概念 分片(sharding)是一个通过多台机器分配数据的方法.MongoDB使用分片支持大数据集和高吞吐量的操作.大数据集和高吞吐量的数据库系统 ...
- 【七】MongoDB管理之分片集群介绍
分片是横跨多台主机存储数据记录的过程,它是MongoDB针对日益增长的数据需求而采用的解决方案.随着数据的快速增长,单台服务器已经无法满足读写高吞吐量的需求.分片通过水平扩展的方式解决了这个问题.通过 ...
- Mongodb主从复制/ 副本集/分片集群介绍
前面的文章介绍了Mongodb的安装使用,在 MongoDB 中,有两种数据冗余方式,一种 是 Master-Slave 模式(主从复制),一种是 Replica Sets 模式(副本集). Mong ...
- MongoDB之分片集群与复制集
分片集群 1.1.概念 分片集群是将数据存储在多台机器上的操作,主要由查询路由mongos.分片.配置服务器组成. ●查询路由根据配置服务器上的元数据将请求分发到相应的分片上,本身不存储集群的元数据, ...
- 搭建一个分布式MongoDB鉴权集群
今天休假在家,测试并搭建了一个replica set shard MongoDB鉴权集群.replica set shard 鉴权集群中文资料比较少,本文是个人笔记,同时也希望对后来者有所帮助.本文仅 ...
- (转)MongoDB分片实战 集群搭建
环境准备 Linux环境 主机 OS 备注 192.168.32.13 CentOS6.3 64位 普通PC 192.168.71.43 CentOS6.2 64位 服务器,NUMA CPU架构 Mo ...
- mongodb 3.4 集群搭建:分片+副本集
mongodb是最常用的nodql数据库,在数据库排名中已经上升到了前六.这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群. 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置 ...
- MongoDB高可用集群搭建(主从、分片、路由、安全验证)
目录 一.环境准备 1.部署图 2.模块介绍 3.服务器准备 二.环境变量 1.准备三台集群 2.安装解压 3.配置环境变量 三.集群搭建 1.新建配置目录 2.修改配置文件 3.分发其他节点 4.批 ...
随机推荐
- quartz和spring集成使用一例子【我】
首先在spring配置文件中增加: <!-- 调度器 --> <bean name="scheduler" lazy-init="false" ...
- Educational Codeforces Round 55 (Rated for Div. 2) A - Vasya and Book
传送门 https://www.cnblogs.com/violet-acmer/p/10035971.html 题意: 一本书有n页,每次只能翻 d 页,问从x页到y页需要翻动几次? 注意:往前翻最 ...
- Symbol特殊用途
1. Symbol.iterator 定义对象的迭代器 一般我们遍历一个对象用for...in es6新增了一个for...of 但是对象却不能用 因为对象没有“迭代器”,那么我们给它定制一个 有了迭 ...
- Hadoop生态圈-Ambari控制台功能简介
Hadoop生态圈-Ambari控制台功能简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在经历一系列安装过程之后(部署过HDP后我终于发现为什么大家喜欢用它了,部署比CDH简 ...
- java bio总结
.同步异步.阻塞非阻塞(目前不是很清楚,这篇博客写完后,后续进行处理) 1.同步和异步:关注的是消息的通讯机制, 同步:发起调用后,如果没有得到结果,该调用是不会返回的:该调用者会主动等待调用返回. ...
- 转 如何阅读TensorFlow源码
通过bazel学习之后,大概了解了TensorFlow的项目的源文件和描述文件. 下面是一篇不错的介绍,搬砖here. 在静下心来默默看了大半年机器学习的资料并做了些实践后,打算学习下现在热门的T ...
- linux 下安装ftp 并远程连接
1.确认是否已安装 ftp 1 pgrep vsftpd #查看ftp 服务进程 无结果如下图所示 2.执行安装 1 yum install vsftpd #安装ftp 服务 3.执行过程 ...
- HDU 1064(求平均数 **)
题意是求 12 个浮点数的平均数,这题不用读题,看到运行时间为 200 ms 再看下样例就能猜出题目的要求了,代码如下: #include <bits/stdc++.h> using na ...
- PHP7 学习笔记(十二)Stream 函数详解
官方:http://php.net/manual/zh/ref.stream.php Stream_*系列函数 PHP中对流的描述如下:每一种流都实现了一个包装器(wrapper),包装器包含一些额外 ...
- pycharm仿sublime配色
1.设置IDE皮肤主题 file->setting->appearance->theme->darcula 2.setting中搜索python,将主题设置成Monokai,然 ...