MongoDB分片集群使用说明

需要事先说明一下MongoDB的片键分类

MongoDB支持两种类型的shard key:

1.Hashed(哈希):数据库根据指定的字段值,算出一个哈希值,然后根据这个哈希值把数据写入相应的服务器中。

好处:数据会分布得比较均匀。

缺点:当我们使用mongos查找时,由于数据过于分散,所以自然查找效率会变慢,消耗也会变大,如果我们使用场景是大量的写入,同时查询较少时,会比较推荐使用哈希。

2.Ranged(范围):按照指定字段的范围进行划分,它把数据切分成连续的几个区间。取值相近的纪录会放进同一个 shard 服务器。

好处:查询连续取值纪录时,查询效率可以得到保证。当数据库查询语句发送到 mongos 中时,mongos 会很快的找到目标 shard,而且不需要将语句发送到所有的 shard 上,一般只需要少量的 shard 就可以完成查询操作。

缺点:不能保证数据的平均分配,在数据插入和修改时会产生比较严重的性能瓶颈。

MongoDB分片集群使用说明

分片设置

在为集合collection分片前,我们需要先给对应集合的数据库赋予分片的功能,可以使用下列命令给数据库开启分片功能。 

> use admin;                                                                         //必须进入admin库
> sh.enableSharding("Test")    或    > db.runCommand({enableSharding:"Test"})        //给Test库开启分片功能,在做该操作时,其实库就会被自己创建了

Hashed(哈希)

采用哈希算法设置shard key

Ranged其实就是把{"id":"hashed"}修改成{"id":1}即可

# 将 Test 库中的 Vast 里的 _id 为key,hash模式进行分片
> sh.shardCollection("Test.vast",{"_id":"hashed"})

> db.runCommand({shardCollection:"Test.Vast","key":{"_id":"hashed"},numInitialChunks:1024}) //可选项numInitialChunks:可以预创建指定数量的chunk块,用以在生产环境减少chunk块初始分裂频率,

#此时,要是你有其他库的数据,就可以将其进行导入了

因为我没有,所以手动进入对应库对设置的集合插入数据验证

> use Test
> for(i=0;i<=100;i++){db.vast.insert({"id":i,"age":i})}

这时候我们的数据就会被合理的分配到了各个shard上,可以登录相关shard节点,使用db.vast.count()统计下节点上的该集合数量是多少。

需要注意的是,因为我们shard是副本集的方式,所以过程其实是数据分配到了shard的主(PRIMARY)节点上,然后从(SECONDARY)节点去主节点进行同步数据。

chunk操作

查看chunk信息

> use config
> db.chunks.find()

很奇怪,在我部署的这个mongodb里没有config.settings这个集合,是我开启了Balancer后才有的settings

Balancer操作

启动/关闭Balancer

> use config
> sh.startBalancer()
> sh.stopBalancer()

查看Balancer是否已开启

> sh.getBalancerState()

查看是否有chunk在迁移

> sh.isBalancerRunning()

MongoDB分片集群其它操作

新增shard节点

> use admin
> db.runCommand({addshard:"shard1/192.168.36.137:22001,192.168.36.138:22001,192.168.36.139:22001"})  // shard名称/该shard的节点

查看当前所有shard节点信息

mongos> use config
mongos> db.shards.find() { "_id" : "shard1", "host" : "shard1/192.168.36.137:22001,192.168.36.138:22001", "state" : 1 } { "_id" : "shard2", "host" : "shard2/192.168.36.138:22002,192.168.36.139:22002", "state" : 1 }

查看当前所有数据库分布信息

mongos> use config
mongos> db.databases.find()
{ "_id" : "testdb", "primary" : "shard1", "partitioned" : true }
{ "_id" : "test", "primary" : "shard2", "partitioned" : true }
{ "_id" : "pric", "primary" : "shard2", "partitioned" : true }
{ "_id" : "HashTest", "primary" : "shard1", "partitioned" : true }
{ "_id" : "student", "primary" : "shard1", "partitioned" : true }
{ "_id" : "xuexiao", "primary" : "shard1", "partitioned" : true }
{ "_id" : "testdba", "primary" : "shard1", "partitioned" : true }

查看MongoDB集群信息

> sh.status()

 

 

 

持续更新。。。。。

 

posted @ 2022-03-01 16:56  RFAA  阅读(184)  评论(0编辑  收藏  举报