千家信息网

Mongodb实现分片功能

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章为大家带来有关Mongodb实现分片功能的详细介绍。大部分Mongodb知识点都是大家经常用到的,为此分享给大家做个参考。一起跟随小编过来看看吧。MongoDB 分片概述分片在Mongodb里
千家信息网最后更新 2026年11月02日Mongodb实现分片功能

这篇文章为大家带来有关Mongodb实现分片功能的详细介绍。大部分Mongodb知识点都是大家经常用到的,为此分享给大家做个参考。一起跟随小编过来看看吧。

MongoDB 分片概述


分片

在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。

当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。


为什么使用分片

  • 复制所有的写入操作到主节点

  • 延迟的敏感数据会在主节点查询

  • 单个副本集限制在12个节点

  • 当请求量巨大时会出现内存不足。

  • 本地磁盘不足

  • 垂直扩展价格昂贵


MongoDB分片

下图展示了在MongoDB中使用分片集群结构分布:

上图中主要有如下所述三个主要组件:

  • Shard:

    用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障

  • Config Server:

    mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。

  • Query Routers:

    前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。

分片实例

192.168.1.100 : mongos

192.168.1.110 : config server

192.168.1.101 : Shard1

192.168.1.102 : Shard2

以上四个主机上都以安装mongodb数据库。

一.配置config server

编辑配置文件mongod.conf:

vim /etc/mongod.conf

添加如下并启用config server服务:

configsvr=true

重新启动mongodb服务:

service mongod restart

注:默认监听27019端口。也可以使用如下命令启动mongod进程。

# mongod --configsvr --dbpath  --port 

此时,默认端口由27017变为27019:

二.配置mongos实例

安装mongos:

yum install mongodb-org-mongos-2.6.1-1.x86_64.rpm

启动mongos:

mongos --configdb=192.168.1.110 --fork --logpath=/var/log/mongodb/mongos.log

注:mongos属于轻量级应用,完全可以与其它服务运行于同一节点;启动时,需要为mongos实例指明各config服务器的访问地址;

默认情况下,mongos监听于27017端口;可以使用如下命令启动mongos实例。

# mongos --configdb 

也可以直接编辑配置文件:

1、注释dbpath指令;

2、添加configdb指令,并指定config服务器的地址;

而后使用如下命令启动mongos实例:

# mongos -f /etc/mongod.conf

登录mongos并配置shard节点:

mongo --host 192.168.1.100mongos> sh.addShard("192.168.1.101"){ "shardAdded" : "shard0000", "ok" : 1 }mongos> sh.addShard("192.168.1.102"){ "shardAdded" : "shard0001", "ok" : 1 }

查看shard状态:

mongos> sh.status()--- Sharding Status ---   sharding version: {"_id" : 1,"version" : 4,"minCompatibleVersion" : 4,"currentVersion" : 5,"clusterId" : ObjectId("58d4bd8a102ad4bdad74aa1d")}  shards:{  "_id" : "shard0000",  "host" : "192.168.1.101:27017" }{  "_id" : "shard0001",  "host" : "192.168.1.102:27017" }  databases:{  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }

启动sharding功能:

mongos> sh.enableSharding("testdb");{ "ok" : 1 }

注:mongodb的shard功能实现于collection级别,但若要在collection上启动shard,还需要事先其相关的数据库上启用之。在数据库上启用shard功能后,MongoDB会为其指定一个主shard。

启用过程需要mongos实例上实现,可以使用sh.enableSharding()方法,也可以使用db.runCommand()的"enableSharding命令,它们的使用格式分别如下所示:

sh.enableSharding("")db.runCommand( { enableSharding:  } )

此时,再次查看shard状态为:

mongos> sh.status()--- Sharding Status ---   sharding version: {"_id" : 1,"version" : 4,"minCompatibleVersion" : 4,"currentVersion" : 5,"clusterId" : ObjectId("58d4bd8a102ad4bdad74aa1d")}  shards:{  "_id" : "shard0000",  "host" : "192.168.1.101:27017" }{  "_id" : "shard0001",  "host" : "192.168.1.102:27017" }  databases:{  "_id" : "testdb",  "partitioned" : true,  "primary" : "shard0000" }

测试:

在collection上进行sharding:

mongos> sh.shardCollection("testdb.student",{"age":1}){ "collectionsharded" : "testdb.student", "ok" : 1 }

插入数据:

mongos> for (i=1;i<=100000;i++) db.student.insert({name:"student"+i,age:(i0),classes:"class+(i)"});WriteResult({ "nInserted" : 1 })

此时我们再次查看sharding状态如下:

关于Mongodb实现分片功能就分享到这里了,解决问题并不止文章中和大家分析的办法,不过本文分析的方法准确性是不容置疑的。如果喜欢本篇文章,不妨把它分享出去让更多的人看到。

数据 实例 功能 数据库 节点 存储 服务 配置 命令 机器 状态 端口 集群 主机 再次 前端 地址 实际 指令 文件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司华为 科技与互联网 狮子座互联网科技 互联网科技缩写 上海致骋互联网科技 菲比寻常互联网科技 新华互联网科技校企合作 广西拼得多互联网科技有限公司 成都玖崟互联网科技有限公司乐商圈怎么样 金融科技与互联网金融相同和不同 互联网金融科技公司干啥的 上海宁丞科技互联网 米聚互联网科技南京有限公司排面 互联网科技扶贫时间 互联网科技公司营业执照怎么办理 每天都有哪些好的互联网科技 上海钢联属于互联网科技股吗 城市宝互联网科技有限公司 互联网科技包装股份有限公司上市 广西泛欧互联网科技有限公司 互联网最新的科技有限公司 齐家互联网科技 艾特科技互联网 上游互联网科技 科技赋能互联网健康 武汉健翔互联网络科技有限公司 互联网科技人工智能实验室 群盈汇互联网科技有限公司 互联网科技大会大佬 华人运通互联网科技公司
0