mongoDB的介绍和相关操作(5)

分片集群(sharding cluster)

这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monodb系统。

要构建一个 MongoDB Sharding Cluster,需要三种角色:

Shard Server: mongod 实例,用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个relica set承担,防止主机单点故障

Config Server: mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息。

Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。

模拟2个shard服务和一个config服务, 均运行在192.168.37.4机器上,只是端口不同:

Shard1:27020

Shard2:27021

Config:27022

Mongos启动时默认使用的27017端口

在D,E,F磁盘下分别解压MongoDB

建立如下文件夹:

mongodb\data

 

启动shardServer

d:\mongodb-27020\mongodb\bin\mongod --dbpath d:\mongodb-27020\mongodb\data\ --port 27020

E:\mongodb-27021\mongodb\bin\mongod --dbpath E:\mongodb-27021\mongodb\data\ --port 27021

启动configServer

F:\mongodb-27022\mongodb\bin\mongod --configsvr --dbpath F:\mongodb-27022\mongodb\data\ --port 27022

启动mongos ,默认开启了27017端口

F:\mongodb-27022\mongodb\bin\mongos --configdb 192.168.37.4:27022

 

 进入F:\mongodb-27022\mongodb\bin

>mongo   进入

> use admin       --登陆admin数据库
> db.runCommand( { addshard : "192.168.37.4:27020", allowLocal : 1} )    --添加分片
> db.runCommand( { addshard : "192.168.37.4:27021", allowLocal : 1} )    --添加分片
> config = connect("192.168.37.4:27022")  --登陆config
> config = config.getSisterDB("config")  获得config数据
> testDB1=db.getSisterDB("test_db1");创建test_db1数据库

 

 

> db.runCommand({enablesharding:"test_db1"})--激活数据库分片

 

 通过执行以上命令,可以让数据库跨shard,如果不执行这步,数据库只会存放在一个shard,一旦激活数据库分片,数据库中不同的collection将被存放在不同的shard上,但一个collection仍旧存放在同一个shard上,要使单个collection也分片,还需单独对collection作些操作

> db.runCommand( { shardcollection : "test_db1.shardcollect", key : { id : 1 } , unique : true  } )--激活collection分片,配置shard key唯一

 

> db.printShardingStatus();     //查看分片状态信息,会看到shards和databases的详细信息,包括刚建立的test_db1的主分片信息和test_db1.shardcollect的分片信息。
  sharding version: { "_id" : 1, "version" : 3 }
  shards:
      { "_id" : "shard0000", "host" : "192.168.37.4:27020" }
      { "_id" : "shard0001", "host" : "192.168.37.4:27021" }
  databases:
        { "_id" : "admin", "partitioned" : false, "primary" : "config" }
        { "_id" : "test_db1", "partitioned" : true, "primary" : "shard0000" }
                test_db1.shardcollect chunks:
                                shard0001       8
                                shard0000       6
                        { "id" : { $minKey : 1 } } -->> { "id" : 0 } on : shard0001 { "t" : 6000, "i" : 1 }
                        { "id" : 0 } -->> { "id" : 70081 } on : shard0000 { "t": 5000, "i" : 1 }
                        { "id" : 70081 } -->> { "id" : 130186 } on : shard0001 { "t" : 3000, "i" : 2 }
                        { "id" : 130186 } -->> { "id" : 190374 } on : shard0001{ "t" : 3000, "i" : 4 }
                        { "id" : 190374 } -->> { "id" : 250531 } on : shard0000{ "t" : 4000, "i" : 2 }
                        { "id" : 250531 } -->> { "id" : 310680 } on : shard0000{ "t" : 4000, "i" : 4 }
                        { "id" : 310680 } -->> { "id" : 370846 } on : shard0000{ "t" : 4000, "i" : 6 }
                        { "id" : 370846 } -->> { "id" : 431019 } on : shard0000{ "t" : 4000, "i" : 8 }
                        { "id" : 431019 } -->> { "id" : 491216 } on : shard0001{ "t" : 5000, "i" : 2 }
                        { "id" : 491216 } -->> { "id" : 611561 } on : shard0001{ "t" : 5000, "i" : 4 }
                        { "id" : 611561 } -->> { "id" : 731941 } on : shard0001{ "t" : 5000, "i" : 6 }
                        { "id" : 731941 } -->> { "id" : 852261 } on : shard0001{ "t" : 5000, "i" : 8 }
                        { "id" : 852261 } -->> { "id" : 972562 } on : shard0001{ "t" : 5000, "i" : 10 }
                        { "id" : 972562 } -->> { "id" : { $maxKey : 1 } } on : shard0000 { "t" : 6000, "i" : 0 }

 

列出了 shard0001       8trunkshard0000       6trun

按照id字段shard,并列出了每个trunk所在的shardingid的范围

 

>show collections     --查看数据集情况
>db.shardcollect.stats()       --查看shardcollect数据集信息 

  通过以上设置就完成了最简单数据库集群配置

 

 


 

你可能感兴趣的:(mongodb,F#)