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.批 ...
随机推荐
- HTTP认证模式:Basic and Digest Access Authentication
一. Basic 认证 客户端以“ : ”连接用户名和密码后,再经BASE64编码( Base64 Content-Transfer-Encoding )通过Authorization请求头发送该密文 ...
- Failed to start Vsftpd ftp daemon错误
配置 vsftpd.conf文件后 重启ftp服务出现 Failed to start Vsftpd ftp daemon错误 总是 启动失败 解决方法 将配置文件中的 listen=YES 改为 l ...
- octave基本操作
参考: https://blog.csdn.net/iszhenyu/article/details/78712228: 吴恩达机器学习视频: 在学习机器学习的过程中,免不了要跟MATLAB.Oct ...
- ES6(promise)_解决回调地狱初体验
一.前言 通过这个例子对promise解决回调地狱问题有一个初步理解. 二.主要内容 1.回调地狱:如下图所示,一个回调函数里面嵌套一个回调函数,这样的代码可读性较低也比较恶心 2.下面用一个简单的例 ...
- day-17(基础加强)
回顾: listener(了解) 监听器,监听javaweb中三个域对象 监听对象的创建和销毁 ServletContextListener 在项目启动的时候加载配置文件 ServletRequest ...
- CodeForces165E 位运算 贪心 + 状压dp
http://codeforces.com/problemset/problem/165/E 题意 两个整数 x 和 y 是 兼容的,如果它们的位运算 "AND" 结果等于 0,亦 ...
- 给笔记本更换SSD硬盘
给笔记本更换SSD硬盘... ---------- 给笔记本更换SSD硬盘 带活动字样的一个新的系统盘,一个之前的主分区的系统盘 ----------------------------
- JSP学习记录
<%@ page contentType="text/html;charset=gb2312" %> <html> <h1>计算器</h1 ...
- django中文学习资料
Django 2.0 中文官方文档地址: https://docs.djangoproject.com/zh-hans/2.0/ <Django Girls>中文版地址: https:// ...
- SQL Server日志过大,清理日志
直接执行下面的代码 USE [master] GO ALTER DATABASE 数据库 SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE 数据库 ...