大数据 MongoDB 3.2.1 分片
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,MongoDB 分片在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的
千家信息网最后更新 2025年02月03日大数据 MongoDB 3.2.1 分片
MongoDB 分片
在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。
- 当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。
分片的目的
高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询量会将单机的CPU耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁盘IO上。
解决方法 :
有两个基本的方法: 垂直扩展和水平扩展。
垂直扩展:增加更多的CPU和存储资源来扩展容量。
- 水平扩展:将数据集分布在多个服务器上。水平扩展即分片
分片结构图(图片来源于网络) :
MongoDB 分片群集的组成(图片来源于网络) :
MongoDB分片群集的三个主要组件:
Shard:
用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障
Config Server:
mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。
Query Routers:
前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
分片群集的简单部署 :
实验环境 :
1台路由实例(端口27017)。
1台配置实例(端口37017)。
2台shard实例(端口47017、47018)。
1.配置配置服务器 :
vim mongodb1.confport=37017dbpath=/data/mongodb/mongodb1logpath=/data/logs/mongodb1.loglogappend=truefork=truemaxConns=5000storageEngine=mmapv1configsvr=true #开启配置服务mongod -f /usr/local/mongodb/bin/mongodb1.conf #开启配置实例
2.配置分片服务器 :
vim mongodb2.confport=47017dbpath=/data/mongodb/mongodb2logpath=/data/logs/mongodb2.loglogappend=truefork=truemaxConns=5000storageEngine=mmapv1shardsvr=true #开启分片服务vim mongodb3.confport=47018dbpath=/data/mongodb/mongodb3logpath=/data/logs/mongodb3.loglogappend=truefork=truemaxConns=5000storageEngine=mmapv1shardsvr=true #开启分片服务mongod -f /usr/local/mongodb/bin/mongodb2.conf #开启分片实例mongod -f /usr/local/mongodb/bin/mongodb3.conf
3.启动路由服务器 :
[root@localhost bin]# ./mongos --port 27017 --fork --logpath=/usr/local/mongodb/bin/route.log --configdb 192.168.217.134:37017 --chunkSize 12018-07-23T14:15:28.185+0800 W SHARDING [main] Running a sharded cluster with fewer than 3 config servers should only be done for testing purposes and is not recommended for production.about to fork child process, waiting until server is ready for connections.forked process: 15337child process started successfully, parent exiting
4.添加分片服务器 :
[root@localhost bin]# mongoMongoDB shell version: 3.2.1......mongos> show dbsconfig 0.031GBmongos> sh.status() #查看分片状态--- Sharding Status --- sharding version: { "_id" : 1, "minCompatibleVersion" : 5, "currentVersion" : 6, "clusterId" : ObjectId("5b557280f9effb757fd31cdb")} shards: #分片为空 active mongoses: "3.2.1" : 1 balancer: Currently enabled: yes Currently running: no Failed balancer rounds in last 5 attempts: 0 Migration Results for the last 24 hours: No recent migrations databases:mongos> sh.addShard("192.168.217.134:47017") #添加分片{ "shardAdded" : "shard0000", "ok" : 1 }mongos> sh.addShard("192.168.217.134:47018"){ "shardAdded" : "shard0001", "ok" : 1 }mongos> sh.status() #查看分片状态--- Sharding Status --- sharding version: { "_id" : 1, "minCompatibleVersion" : 5, "currentVersion" : 6, "clusterId" : ObjectId("5b557280f9effb757fd31cdb")} shards: #分片信息 { "_id" : "shard0000", "host" : "192.168.217.134:47017" } { "_id" : "shard0001", "host" : "192.168.217.134:47018" } active mongoses: "3.2.1" : 1 balancer: Currently enabled: yes Currently running: no Failed balancer rounds in last 5 attempts: 0 Migration Results for the last 24 hours: No recent migrations databases:
4.启用分片服务器 :
mongos> use testswitched to db testmongos> for(var i=1;i<=10000;i++)db.users.insert({"id":i,"name":"tom"+i}) #添加数据WriteResult({ "nInserted" : 1 })mongos> sh.status() ....... databases: { "_id" : "test", "primary" : "shard0000", "partitioned" : false } #partitioned 值为false 表示数据库尚未分片。mongos> sh.enableSharding("test") #启用数据库分片mongos> db.users.createIndex({"id":1}) #创建索引mongos> sh.shardCollection("test.users",{"id":1}) #表分片{ "collectionsharded" : "test.users", "ok" : 1 }mongos> sh.status()...... { "id" : { "$minKey" : 1 } } -->> { "id" : 2341 } on : shard0001 Timestamp(5, 1) { "id" : 2341 } -->> { "id" : 4682 } on : shard0001 Timestamp(3, 0) { "id" : 4682 } -->> { "id" : 7023 } on : shard0000 Timestamp(6, 1) { "id" : 7023 } -->> { "id" : 9364 } on : shard0000 Timestamp(1, 3) { "id" : 9364 } -->> { "id" : 13407 } on : shard0000 Timestamp(3, 2) { "id" : 13407 } -->> { "id" : 21295 } on : shard0000 Timestamp(3, 3) { "id" : 21295 } -->> { "id" : 25976 } on : shard0001 Timestamp(4, 2) { "id" : 25976 } -->> { "id" : 33545 } on : shard0001 Timestamp(4, 3) { "id" : 33545 } -->> { "id" : 38226 } on : shard0000 Timestamp(5, 2) { "id" : 38226 } -->> { "id" : 45910 } on : shard0000 Timestamp(5, 3) { "id" : 45910 } -->> { "id" : { "$maxKey" : 1 } } on : shard0001 Timestamp(6, 0) #数据存放在两个分片服务器上即:shard0000、shard0001中。
5.给分片添加标签 :
mongos> sh.status()...... shards: { "_id" : "shard0000", "host" : "192.168.217.134:47017" } { "_id" : "shard0001", "host" : "192.168.217.134:47018" }mongos> sh.addShardTag("shard0000","sales00") #添加标签mongos> sh.addShardTag("shard0001","sales01")mongos> sh.status()...... shards: { "_id" : "shard0000", "host" : "192.168.217.134:47017", "tags" : [ "sales00" ] } { "_id" : "shard0001", "host" : "192.168.217.134:47018", "tags" : [ "sales01" ] }
6.删除分片节点 :
mongos> use adminmongos> db.runCommand({"removeshard":"192.168.217.134:47018"}) #删除分片节点
ps:MongoDB 4以上的版本做分片,需要先把实例做成复制集。
数据
服务
实例
服务器
存储
配置
数据库
单机
压力
机器
水平
端口
路由
较大
两个
信息
前端
吞吐量
图片
实际
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发工程师资格证
删除数据库的语法
北京鑫凌网络技术有限公司
更新不同数据库同名表
mysql 数据库表格移植
学习网络安全和前端有联系吗
猛犸软件开发
广州软件开发解决方案应用
长宁区网络技术服务案例
华为的无线网络技术
服务器挂机池图片大全
pacs服务器硬件配置
绝地求生俄罗斯服务器怎么设
去软件开发培训机构当老师
手机登录kk服务器设置
旺本软件开发
音乐网站数据库源码
点击按钮提交数据到数据库
关于征集网络安全的主题绘画
湖南对口升学计算机网络技术
食堂售饭机软件开发
数据库关联查询 存的是数组
微软rds服务器
上海网络软件开发定制收费
怎么更换服务器供应商
大话西游2如何换服务器
无盘服务器内存
数据库安全动画
未转变者服务器专用端口
navkit备份数据库