mongo集群分片
来源:互联网 发布:淘宝皇冠店铺多少钱 编辑:程序博客网 时间:2024/04/24 17:02
启动集群分片:
要对一个集合分片,首先你要对这个集合的数据库启用分片,执行如下命令:
sh.enableSharding("test")
mydb被配置成启用分片后,配置信息是存放在配置服务器的数据库config的databases集合里!
片键:片键是集合的一个键,MongoDB根据这个键拆分数据。例如:username 。在启用分片之前,先在希望作为片键的键上创建索引:
db.users.ensureIndex({"username":1})
mydb的users集合被配置成启用分片后,配置信息是存放在配置服务器的数据库config的collections集合里!
对集合分片:
sh.shardCollection("test.users",{"username":1})
路由服务器是不会存放配置信息(不用配置dbpath也是这个原因,但会缓存配置服务器上的配置!)
mongos路由会在后台对各片进行负载均衡,直至各片的chunks块数量相等!。分片的balance,可以在规定时间执行这个操作,推荐在业务非繁忙的时候做。下面来做一下数据库,在片上均衡实验(数据库为分片情况)
mongos> use mydb1
switched to db mydb1
mongos> db.mytest.insert({name:"zhang"});
WriteResult({ "nInserted" : 1 })
mongos> sh.status();
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("57146d38f71635a4755aa902")
}
shards:
{ "_id" : "rs1", "host" : "rs1/mongodb01:10001,mongodb02:10001" }
{ "_id" : "rs2", "host" : "rs2/mongodb02:10002,mongodb03:10002" }
{ "_id" : "rs3", "host" : "rs3/mongodb01:10003,mongodb03:10003" }
{ "_id" : "rs4", "host" : "rs4/mongodb01:10004,mongodb02:10004" }
active mongoses:
"3.2.5" : 3
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 5
Last reported error: could not find host matching read preference { mode: "primary" } for set rs4
Time of Reported error: Mon Apr 18 2016 16:54:52 GMT+0800 (CST)
Migration Results for the last 24 hours:
No recent migrations
databases:
{ "_id" : "mydb", "primary" : "rs2", "partitioned" : true }
mydb.mycol1
shard key: { "id" : 1 }
unique: false
balancing: true
chunks:
rs2 1
{ "id" : { "$minKey" : 1 } } -->> { "id" : { "$maxKey" : 1 } } on : rs2 Timestamp(1, 0)
{ "_id" : "sisyphus", "primary" : "rs2", "partitioned" : true }
{ "_id" : "mydb1", "primary" : "rs1", "partitioned" : false }
mongos> use mydb2
switched to db mydb2
mongos> db.mytest.insert({name:"zhang"});
WriteResult({ "nInserted" : 1 })
mongos> sh.status();
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("57146d38f71635a4755aa902")
}
shards:
{ "_id" : "rs1", "host" : "rs1/mongodb01:10001,mongodb02:10001" }
{ "_id" : "rs2", "host" : "rs2/mongodb02:10002,mongodb03:10002" }
{ "_id" : "rs3", "host" : "rs3/mongodb01:10003,mongodb03:10003" }
{ "_id" : "rs4", "host" : "rs4/mongodb01:10004,mongodb02:10004" }
active mongoses:
"3.2.5" : 3
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 5
Last reported error: could not find host matching read preference { mode: "primary" } for set rs4
Time of Reported error: Mon Apr 18 2016 16:54:52 GMT+0800 (CST)
Migration Results for the last 24 hours:
No recent migrations
databases:
{ "_id" : "mydb", "primary" : "rs2", "partitioned" : true }
mydb.mycol1
shard key: { "id" : 1 }
unique: false
balancing: true
chunks:
rs2 1
{ "id" : { "$minKey" : 1 } } -->> { "id" : { "$maxKey" : 1 } } on : rs2 Timestamp(1, 0)
{ "_id" : "sisyphus", "primary" : "rs2", "partitioned" : true }
{ "_id" : "mydb1", "primary" : "rs1", "partitioned" : false }
{ "_id" : "mydb2", "primary" : "rs3", "partitioned" : false }
可以看到对于未启动分片的数据库,可以看出我们随便创建的数据库的集合,他可以随机分布在不同的片上,mongo用这种机制实现主的平均分布,实现数据库 的均衡。扩展一下,对于分片通常实验范围分片和hash分片,分片具体看业务情况的。而且分片以后是不能直接更改的,除非删除数据库或者collection,停业务实验mongodump重新导数据,这个代价太大,所以分片时候要谨慎。
范围分片:
1,适合普通范围查询,可以优化到让热查询定位到某个片,数据集中取出避免数据分散而走网络取数据
2,最好给分片键建立序列,实践证明依据序列查找比全片所有chunk查找快的多
3,缺点在于,如果shardkey有明显递增(或者递减)趋势,则新插入的文档多会分布到同一个chunk,无法扩展写的能力
hash分片:
1,适合大规模插入,由于范围平均可以充分利用整个集群的性能
2,适合高并发,集群的各个集群平均分担压力,
3,不能高效的服务范围查询,所有的范围查询要分发到后端所有的Shard才能找出满足条件的文档
1 0
- mongo集群分片
- Mongo分片集群搭建
- 构建一个Mongo分片集群
- Mongo 整体架构介绍(1)-------分片集群
- mongo分片
- mongo-分片
- mongo分片
- mongo分片
- mongo 分片
- Mongo服务器集群配置学习三——分片
- Mongo服务器集群配置学习三——分片
- Mongo集群安装与设置(分片+副本集)
- 从零搭建mongo分片集群的简洁方法
- 【Mongo】架构从复制集到分片集群
- Mongo实战-分片集群的查询与索引
- mongo分片及驱动
- mysql、redis、mongo 分片
- Mongo 集群
- QWebEngineView与js交互
- 智能指针----ScopedPtr和ScopedPtrArray
- select poll epoll系统调用详细分析
- 【记录】实现delay
- 在windows下搭建RocketMQ
- mongo集群分片
- 自学python之获取bing每日图片
- 人生经验 自动化的学生如何学习C语言
- 同台电脑部署多个tomcat
- 单例模式与static的区别
- [Hibernate 1]Hibernate的环境搭建
- Java8 Stream流操作在用户系统中的妙用
- 如何判断链表中是否有环
- 7.0、Android Studio命令行工具