1、id分片例子

(1)激活数据库分片功能

mongo --port 38017 admin

admin>  ( { enablesharding : "数据库名称" } )

egadmin> 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   作者:李延召