MongoDB分片+副本集搭建

Wesley13
• 阅读 706

一、概念

把大量的数据,根据某个条件分开来存储;

举例:

1000W条用户数据,根据用户名,a-h开头的用户放入节点1,i-s的放入2,t-z的放入3;

分片需要:

需要1-n个节点,需要一个路由进程,需要一个配置库(配置节点);

当客户端发送查询请求后,通过路由进程,去配置库查询用户所需的数据在哪个节点中;然由路由进程去节点取数据,返回结果到客户端;

二、启动过程

1、启动配置库(一般只要3台)

(1)新建一个用于存放配置库的文件夹

E:\mongodata\confdata和conflogs文件夹

(2)启动配置库

mongod -configsvr -dbpath E:\mongodata\confdata1 -logpath E:\mongodata\conflogs1\log.txt -port 30001

mongod -configsvr -dbpath E:\mongodata\confdata2 -logpath E:\mongodata\conflogs2\log.txt -port 30002

mongod -configsvr -dbpath E:\mongodata\confdata3 -logpath E:\mongodata\conflogs3\log.txt -port 30003

2、启动路由进程,并关联配置库(默认端口27017)

mongos -port 27017 -configdb localhost:30001,localhost:30002,localhost:30003 -logpath E:\mongodata\mongoslogs\log.txt

3、启动副本集或节点 1-n个

启动副本集查看另一篇博客《MongoDB副本集》,123集群,456集群:

https://my.oschina.net/u/1407079/blog/1586772

或者起单台(不建议)

mongod –dbpath d:\node1 –port 44444

mongod –dbpath d:\node2 –port 55555

mongod –dbpath d:\node3 –port 66666

4、关联路由进程和节点(添加分片)

(1)登录路由进程mongos(cmd下)

mongo localhost:27017/admin

(2)添加分片

添加副本集分片,副本集名称/副本集内任意一台的ip

mongos会自动根据副本集情况,找到其他几台

db.runCommand({ addshard: 'cnrep/127.0.0.1:20002'});

db.runCommand({ addshard: 'cnrep2/127.0.0.1:20004'});

添加单台分片

db.runCommand({“addshard”:”127.0.0.1:44444”,allowLocal:true})

db.runCommand({“addshard”:”127.0.0.1:55555”,allowLocal:true})

db.runCommand({“addshard”:”127.0.0.1:66666”,allowLocal:true})

allowLocal表示是否允许客户端不经过路由进程,直接连接节点

5、添加分片成功后查看分片状态

sh.status()

6、开启分片功能

路由进程中

(1)指定某个数据库开启分片功能

sh.enableSharding(“myshdb”)

db.runCommand({“enablesharding”:”test”})

(2)指定某个表进行分片,指定分片的片键

sh.shardCollection("myshdb.users", {userId:1})

或db.runCommand({“shardcollection”:”test.person”,”key”:{“name”:1}})

6、插入数据

for(var i = 0; i < 10000; i++){

    db.users.insert({userId:'user'+i, name:'name'+i})

}

然后用sh.status()查看分片情况

三、片键选择

MongoDB分片+副本集搭建

MongoDB分片+副本集搭建

MongoDB分片+副本集搭建

四、其他

1、块

MongoDB分片+副本集搭建

2、均衡器

MongoDB分片+副本集搭建

3、修改分片大小

MongoDB分片+副本集搭建

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
PostgreSQL死锁进程及慢查询处理
1、死锁进程查看:SELECTFROMpg_stat_activityWHEREdatname'数据库名称'andwaitingtrue;pid进程id。2、慢查询SQL:selectdatname,pid,usename,application_name,client_addr,client
Wesley13 Wesley13
3年前
MongoDB学习笔记10——分片
分片(Sharding)这种技术可以将数据分散到多台机器,但对于应用而言,仍然如同在使用单个数据库一样。在使用MongoDB时,水平分区是唯一可采用的方式。在MongoDB中由MongoS路径进程管理数据的分割,并将请求路由到必需的分片服务器。在进行分片的时候需要mongod配置服务器和mongos分片服务器。1)创建分片设置:打开新的终端窗
Wesley13 Wesley13
3年前
MongoDB与MySQL关于写确认的异同
!(https://pic3.zhimg.com/80/v2af9f6637b50b09be60b00a42f3812d5e_1440w.jpg)云妹导读:所谓写确认,是指用户将数据写入数据库之后,数据库告知用户写入成功的一个概念。根据数据库的特点和配置,可以在不同的写入程度上,返回给用户,而这其中,就涉及到了不同的性能、数据
Stella981 Stella981
3年前
Mongodb集群节点故障恢复场景分析(转)
一个适当配置的Mongodb分片集群是没有单点故障。本文描述了分片集群中存在的几种不同的潜在的节点故障场景,以及Mongodb对这些节点故障是怎么处理的。1、Mongos节点宕机一个Mongos进程应该运行在每一个应用程序服务器上,这个服务器应该独占这个Mongos进程,并且通过它与分片集群来通讯。Mongos进程不是持久化的,相反,
Wesley13 Wesley13
3年前
MongoDB 的分片技术
   在MongoDB中分片技术也就是集群。需要1台配置服务器配置各个节点的配置信息,1台路由服务器来知道每一台节点都在哪个地方并给用户提供各个节点数据的访问功能,还有多台节点服务器,存储节点数据。   当前我有三台机器192.168.0.114,192.168.0.115,192.168.0.116,规划如下:  搭建配置服务器:192.1