1、id分片例子
(1)激活数据库分片功能
mongo --port 38017 admin
admin> ( { enablesharding : "数据库名称" } )
eg:
admin> db.runCommand( { enablesharding : "test" } )
(2)、指定分片建对集合分片
eg:范围片键
--创建索引
use test
> db.vast.ensureIndex( { id: 1 } )
--开启分片
use admin
> db.runCommand( { shardcollection : "test.vast",key : {id: 1} } )
(3)集合分片验证
admin> use test
test> for(i=1;i<500000;i++){ db.vast.insert({"id":i,"name":"shenzheng","age":70,"date":new Date()}); }
test> db.vast.stats()
(4)分片结果测试
shard1:
mongo --port 38021
db.vast.count();
shard2:
mongo --port 38024
db.vast.count();
2、Hash分片例子:
对oldboy库下的vast大表进行hash
创建哈希索引
(1)对于oldboy开启分片功能
use admin
admin> db.runCommand( { enablesharding : "oldboy" } )
(2)对于oldboy库下的vast表建立hash索引
use oldboy
oldboy> db.vast.ensureIndex( { id: "hashed" } )
(3)开启分片
use admin
admin > sh.shardCollection( "oldboy.vast", { id: "hashed" } )
(4)录入10w行数据测试
use oldboy
for(i=1;i<100000;i++){ db.vast.insert({"id":i,"name":"shenzheng","age":70,"date":new Date()}); }
(5)hash分片结果测试
mongo --port 38021
use oldboy
db.vast.count();
mongo --port 38024
use oldboy
db.vast.count();
总结:分片键
--范围片键
admin> sh.shardCollection("数据库名称.集合名称",key : {分片键: 1} )
或
admin> db.runCommand( { shardcollection : "数据库名称.集合名称",key : {分片键: 1} } )
eg:
admin > sh.shardCollection("test.vast",key : {id: 1} )
或
admin> db.runCommand( { shardcollection : "test.vast",key : {id: 1} } )
--哈希片键
admin > sh.shardCollection( "数据库名.集合名", { 片键: "hashed" } )
3、分片详情
(1)判断是否Shard集群
admin> db.runCommand({ isdbgrid : 1})
(2)列出所有分片信息
admin> db.runCommand({ listshards : 1})
(3)列出开启分片的数据库
admin> use config
config> db.databases.find( { "partitioned": true } )
或者:
config> db.databases.find() //列出所有数据库分片情况
(4)查看分片的片键
config> db.collections.find().pretty()
{
"_id" : "test.vast",
"lastmodEpoch" : ObjectId("58a599f19c898bbfb818b63c"),
"lastmod" : ISODate("1970-02-19T17:02:47.296Z"),
"dropped" : false,
"key" : {
"id" : 1
},
"unique" : false
}
(5)查看分片的详细信息
admin> db.printShardingStatus()
或
admin> sh.status()
4、删除分片节点
(1)确认blance是否在工作
sh.getBalancerState()
(2)删除shard2节点
mongos> db.runCommand( { removeShard: "shard2" } )
5、blancer操作
介绍:
mongos的一个重要功能,自动巡查所有shard节点上的chunk的情况,自动做chunk迁移。
什么时候工作?
1、自动运行,会检测系统不繁忙的时候做迁移
2、在做节点删除的时候,立即开始迁移工作
3、blancer只能在预设定的时间窗口内运行
有需要时可以关闭和开启blancer(备份的时候)
mongos> sh.stopBalancer()
mongos> sh.startBalancer()
5.1、自定义 自动平衡进行的时间段
// connect to mongos
> db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "00:00", stop : "5:00" } } }, true )
5.2关于集合的balance(了解下)
关闭某个集合的balance
sh.disableBalancing("students.grades")
打开某个集合的balance
sh.enableBalancing("students.grades")
确定某个集合的balance是开启或者关闭
db.getSiblingDB("config").collections.findOne({_id : "students.grades"}).noBalance;
6、分片集群重点
1、分片集群的架构原理(3大部分功能)
2、搭建过程
3、状态查看
db.runCommand({ listshards : 1})
sh.status()
4、balancer 时间窗口设置
db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "00:00", stop : "5:00" } } }, true )
5、两种分片建 的设置
eg:范围片键
–创建索引
use test
> db.vast.ensureIndex( { id: 1 } )
use admin
> db.runCommand( { shardcollection : "test.vast",key : {id: 1} } )
集合分片验证
admin> use test
test> for(i=0;i<2000000;i++){ db.vast.insert({"id":i,"name":"shenzheng","age":70,"date":new Date()}); }
test> db.vast.stats()
eg:
创建哈希索引
use admin
admin> db.runCommand( { enablesharding : "oldboy" } )
use oldboy
oldboy> db.vast.ensureIndex( { id: "hashed" } )
use admin
admin > sh.shardCollection( "oldboy.vast", { id: "hashed" } )
use oldboy
for(i=0;i<10000;i++){ db.vast.insert({"id":i,"name":"shenzheng","age":70,"date":new Date()}); }
文档更新时间: 2019-03-28 09:55 作者:李延召