MongoDB分片+副本集搭建

一、概念

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

举例:

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()查看分片情况

三、片键选择

四、其他

1、块

2、均衡器

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

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

PostgreSQL死锁进程及慢查询处理

1、死锁进程查看:SELECTFROMpg_stat_activityWHEREdatname'数据库名称'andwaitingtrue;pid进程id。2、慢查询SQL:selectdatname,pid,usename,application_name,client_addr,client