14.MongoDB系列之配置分片
1. 启动服务器
1.1 启动配置服务器
配置服务器是集群的大脑,保存着关于每个服务器包含哪些数据的所有元数据,因此,必须首先创建配置服务器。
由于资源限制,在同一机器上启动三个进程
# mkdir /home/mongo/cs1
# mkdir /home/mongo/cs2
# mkdir /home/mongo/cs3
# mongod --configsvr --replSet configRS --bind_ip localhost --port 27038 --dbpath /home/mongo/cs1
# mongod --configsvr --replSet configRS --bind_ip localhost --port 27039 --dbpath /home/mongo/cs2
# mongod --configsvr --replSet configRS --bind_ip localhost --port 27040 --dbpath /home/mongo/cs3
# mongo --host localhost --port 27038
> rs.initiate(
{
_id: "configRS",
configsvr: true,
members: [
{_id: 0, host: "localhost:27038"},
{_id: 1, host: "localhost:27039"},
{_id: 2, host: "localhost:27040"}
]
})
可以看到,配置服务器副本集至此启动成功
configRS:PRIMARY> rs.isMaster()
{
"hosts" : [
"localhost:27038",
"localhost:27039",
"localhost:27040"
],
"setName" : "configRS",
"setVersion" : 1,
"ismaster" : true,
"secondary" : false
......
}
1.2 启动mongos路由进程
在3个配置服务器都运行后,启动一个mongos进程以供应用程序进行连接。为了确保高可用性,至少应该创建两个mongos进程。
# mongos --configdb configRS/localhost:27038,localhost:27039,localhost:27040 --bind_ip_all --port 27029 --fork --logpath /home/mongo/log.log
1.3 将副本集转换为分片
假设你已经创建了副本集,或参考之前文章8.MongoDB系列之创建副本集(一)进行创建副本集
连接副本集成员,并查看主节点
# mongo localhost:27018
study:PRIMARY> rs.isMaster()
{
"hosts" : [
"localhost:27018",
"localhost:27019",
"localhost:27020"
],
"setName" : "study",
"setVersion" : 2,
"ismaster" : true
.....
}
依次关闭从节点,并如下方式重新启动
mongod --replSet study --shardsvr --port 27019 --bind_ip localhost --dbpath /home/data/rs2
mongod --replSet study --shardsvr --port 27020 --bind_ip localhost --dbpath /home/data/rs3
现在将mongo shell连接到主节点,然后让其退位:
# mongo localhost:27018
study:PRIMARY> rs.stepDown()
# mongod --replSet study --shardsvr --port 27018 --bind_ip localhost --dbpath /home/data/rs1
现在可以将副本集作为分片添加到集群中了。通过mongos连接到admin数据库
# mongo localhost:27029/admin
> sh.addShard("study/localhost:27018,localhost:27019,localhost:27020")
mongos> sh.status()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("62db816632b8e5b7cc0a5018")
}
shards:
{ "_id" : "study", "host" : "study/localhost:27018,localhost:27019,localhost:27020", "state" : 1 }
active mongoses:
"4.2.6" : 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:
No recent migrations
databases:
{ "_id" : "config", "primary" : "config", "partitioned" : true }
{ "_id" : "study", "primary" : "study", "partitioned" : false, "version" : { "uuid" : UUID("edc96711-21fd-4199-b47a-45a3b89c2f1c"), "lastMod" : 1 } }
至此分片配置完成!
2. MongoDB如何追踪集群数据
每个mongos都必须能够根据一个片键来查找一个文档。MongoDB会将文档已数据块的形式进行分组,这些数据块是片键指定范围内的文档。块总是存在于分片上,因此MongoDB可以用较小的表来维护数据块跟分片的映射。一个块总是属于且仅属于一个块,因此,不能使用数组字段来作为片键。
2.1 块范围
块在shell中显示范围为$minKey和$maxKey, 块存储在config.chunks集合中
2.2 拆分块
各个分片的主节点mongod进程会跟踪他们当前的块,一旦达到某个阈值,就会检查该块是否需要拆分。
mongodb尝试分裂某个块却无法成功的过程被称为拆分风暴。防止拆分风暴的唯一方法是确保配置服务器尽可能正常运行。
3. 均衡器
均衡器负责是数据的迁移。它会定期检查分片之间是否存在不平衡,如果存在,就会对块进行迁移。
4. 变更流
变更流允许应用程序耿总数据库中数据的实时变更。通过跟踪oplog实现。跨分片集群的变更使用全局逻辑时钟来保持有序性。
14.MongoDB系列之配置分片的更多相关文章
- mongodb集群配置分片集群
测试环境 操作系统:CentOS 7.2 最小化安装 主服务器IP地址:192.168.197.21 mongo01 从服务器IP地址:192.168.197.22 mongo02 从服务器IP地址: ...
- Mongodb 笔记07 分片、配置分片、选择片键、分片管理
分片 1. 分片(sharding)是指将数据拆分,将其分散存放在不同的机器上的过程.有时也用分区(partitioning)来表示这个概念.将数据分散到不同的机器上,不需要功能强大的大型计算机就可以 ...
- mongodb系列之---副本集配置与说明
在配置副本集之前,我们先来了解一些关于副本集的知识. 1,副本集的原理 副本集的原理与主从很相似,唯一不同的是,在主节点出现故障的时候,主从配置的从服务器不会自动的变为主服务器,而是要通过手动修改配置 ...
- mongoDB系列之(三):mongoDB 分片
1. monogDB的分片(Sharding) 分片是mongoDB针对TB级别以上的数据量,采用的一种数据存储方式. mongoDB采用将集合进行拆分,然后将拆分的数据均摊到几个mongoDB实例上 ...
- 13.MongoDB系列之分片简介
1. 分片概念 分片是指跨机器拆分数据的过程,有时也会用术语分区.MongoDB既可以手工分片,也支持自动分片 2. 理解集群组件 分片的目标之一是由多个分片组成的集群对应用程序来说就像是一台服务器. ...
- mongodb系列之--mongodb 主从配置与说明
一.为什么要配置mongodb的主从: 1.做主从,可以说是做数据的备份,有利于故障的恢复 2.做主从,可以做到读写分离,主节点负责写操作,从节点负责读操作,这样就把读写压力分开,保证系统的稳定性. ...
- MongoDB系列之二(主动复制)
目前我正在进行MongoDB的双机热备方面相关的工作.根据我目前看到的MongoDB方面的材料,MongoDB的实际部署有三种方式,分别是“主动复制”,“副本集”以及“分片副本集”. 首先我们从最简单 ...
- mongoDB系列之(二):mongoDB 副本集
1. 什么是副本集 副本集就是mongoDB副本所组成的一个集群. 同期原理是,写操作发生在主库,从库同步主库的OpLog日志. 集群中没有特定的主库,主库是选举产生,如果主库down了,会再选举出一 ...
- Mongodb副本集+分片集群环境部署
前面详细介绍了mongodb的副本集和分片的原理,这里就不赘述了.下面记录Mongodb副本集+分片集群环境部署过程: MongoDB Sharding Cluster,需要三种角色: Shard S ...
随机推荐
- 使用Hexo建立一个轻量、简易、高逼格的博客
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_93 在之前的一篇文章中,介绍了如何使用Hugo在三分钟之内建立一个简单的个人博客系统,它是基于go lang的,其实,市面上还有一 ...
- Odoo Session In Redis
# odoo session in redis # 一.下载安装Session in Redis免费模块 # 下载地址:https://apps.odoo.com/apps/modules/12.0/ ...
- 将Nginx配置成系统开机启动服务
# 如何将nginx配置成我们的系统服务 # 1.在/usr/lib/systemd/system目录下面配置nginx.service内容 # 如果想要详细了解制作的过程:https://blog. ...
- 5.25 NOI 模拟
\(T1\)旅行计划 不\(sb\)的题 比较显然转化成求一个点到所有点的最短路和 考虑我们非树边很少,那么可以把非树边连接的点看做是关键点,那么我们可以预处理每个关键点之间的最短路 我们每次询问,对 ...
- Linux Shell 自动交互功能
需求背景: 近日,在安装某软件过程,发现在安装过程需要输入一些信息才能继续下一步操作,在机器数量较少情况下,我们可以单台登录上去完成安装操作,但当机器数量超过一定时,如果再手动登录操作,就会产生大 ...
- 过年好,新一代大数据任务调度系统 - Apache DolphinScheduler 1.3.5 发布
节后上班第一天,新一代大数据任务调度 - Apache DolphinScheduler(incubator) 就迎来了好消息 - 在社区 20 多位小伙伴的贡献与努力下,社区发布了 1.3.5 版本 ...
- java-异步与并发之基础
1.线程提供了一个方法: void join()该方法允许一个线程在另一个线程上等待,直到其完成工作后才解除阻塞运行.所以join可以协调线程之间同步运行线程调用join()方法,方法后就进入阻塞状态 ...
- [跨数据库、微服务] FreeSql 分布式事务 TCC/Saga 编排重要性
前言 FreeSql 支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/Firebird/达梦/Gbase/神通/人大金仓/翰高/Clickhouse/MsAcc ...
- windows优化原神
原神3.0新地图很卡顿? 锐距显卡带不动? 看一下我的配置 英特尔i5-1135G7 内存16GB可以拓展32GB 固态512GB 原神优化前帧率50左右 优化后59-60最差55 展示图原神设置图 ...
- SpringMVC 04: SpringMVC中4种页面跳转方式
转发和重定向的页面跳转方式 页面跳转方式,本质上只有2种方式:转发 + 重定向 但在SpringMVC的具体实现上,转发可以细分为:普通的页面转发 + 经由action方法的页面转发 重定向可以细分为 ...