前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mongodb的分片和副本集

Mongodb的分片和副本集

作者头像
张凝可
发布2019-08-22 15:55:39
8050
发布2019-08-22 15:55:39
举报
文章被收录于专栏:技术圈技术圈

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/qq_27717921/article/details/51321180

mongodb的分片目的很简单,一是为了数据存储,而是为了避免单点故障,提高可靠性和稳定性。

构建mongodb的分片首先至少需要四个mongodb的服务进程,分别扮演不同的角色。一个是config server,一个是Route Process,还需要两个服务作为分片。 分片步骤: 这里将C:\Program Files\MongoDB\Server\3.2\bin路径下的mongod服务作为配置服务器,端口号为2222 将D:\MongoDB\Server\3.2\bin作为mongos服务器,也就是路由服务器,端口号为3333 将E:\MongoDB\Server\3.2\bin作为一个shard实例,端口号为4444,将E:\data\MongoDB\Server\3.2\bin作为另一个实例,端口号为5555。 1 开启配置服务器 mongod –dbpath “数据存放路径”( C:\Program Files\MongoDB\data)–port 2222 2 开启mongos服务() mongos –port 3333 –configdb=127.0.0.1:2222(配置服务器的地址) 3 开启分片的mongod服务 mongod –dbpath “数据存放路径”( E:\MongoDB\data)–port 4444 mongod –dbpath “数据存放路径”( E:\data\MongoDB\data)–port 5555 分片采用副本集的优点 Mongodb存储了海量数据,分片采用副本集,可以实现数据的可靠性。如果shard出现问题,可以通过副本集中的推选,选出新的主节点,从而避免了数据的丢失。 采用副本集来构造分片的过程 (1) 建立副本集 在开启mongod服务时指明副本集名称 Mongod –shardsvr –port 10000 –replSet shard1 –dbpath “数据的存储路径” 这里的shard1就是副本集的名称 同样的,在shard1副本集中的服务器都要在开启服务的时候指明副本集的名称。 (2) 配置副本集 config={_id:“shard1”,members:[{_id:0,host:”127.0.0.1:10000”},{_id:1,host:”127.0.0.1:10001”},{_id:1,host:”127.0.0.1:10002”}]} rs.initiate 4 配置服务 Mongos与客户端交互,连接mongos服务器,然后将4444和5555进行处理,添加分片处理。 Mongo 127.0.0.1:3333/admin db.runCommand({“addshard”:“127.0.0.1:4444”,allowLocal:true})//allowLocal 指的是可以本地进行分片,因而设置为true db.runCommand({“addshard”:“127.0.0.1:5555”,allowLocal:true}) 如果是用副本集来作为分片的话 db.runCommand({addshard:“shard1/127.0.0.1:10000,127.0.0.1:10001,127.0.0.1:10002” }) 不采用副本集则以下面为准 db.runCommand({“enablesharding”:“test”})//test为待分片的数据库 db.runCommand({“shardcollection”:“test.student”,“key”:{“name”:1}}) //test.student 为待分片的数据表,而key为分片的依据,这里是学生得姓名。 在设置片键时,需要注意:如果待分片的collection存在数据,在shardcollection时需要提前建立索引,如果不存在数据,mongdb会在激活集合分片(shardcollection)时创建索引。 可以通过db.表名.getIndexes()来查看collection上的索引。 创建索引: db.表名.ensure({“username”:“hashed”})//或者可以使用db.表名.createIndex(“要建立索引的片键”:“hashed”) db.表名.getIndex()就可以获得在这个表上所有的索引。 //username为要设置为片键的键值 在分片时 sh.shardCollection(“test.data”,{“username”:“hashed”}) //test为数据库名称,test为数据库中的表名,而片键则是在属性username上所建立的索引。 通过mongos服务插入数据 Use test for(var i=0;i<1000;i++) {db.student.insert({“name”:”jack”+i,”age”:i})} 通过配置服务器进行查看。配置服务器存放了分片节点的配置信息。 mongo 127.0.0.1:2222/admin db.printShardingStatus() 可以看到分片的相关状态和信息 db.表名.stats()可以查看表中的数据在shards和chunks的分布情况。 对mongodb数据库分片的维护包括添加新的分片,移除分片,这要求在admin数据库下进行执行。 在config数据库下可以查看目前的shards以及chunks

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年05月05日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档