MongoDB分片+副本集搭建

原创
2017/12/08 11:22
阅读数 833

一、概念

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

举例:

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、修改分片大小

展开阅读全文
打赏
0
0 收藏
分享
加载中
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部