学习MongoDB--(10-2):分片(建立分片)

MongoDB分片系统通常由以下3部分组成:

1》 片: 片就是一个存放集合数据的容器。我们上一篇也提到,其可以是一个单独的mongod服务,也可以是一个副本集(多个mongod服务,一个是主活跃节点),这个视使用环境来确定片的形态!

2》 mongos: MongoDB自带的路由服务进程,它路由所有的客户端请求,并将各个片的结果进行汇聚返回。这个服务进程本身不会存储任何数据或配置信息(有时会缓存配置服务器的相关配置信息)。

3》 配置服务器: 这个也是一个mongod服务进行,但这个数据库服务仅仅是为mongos路由服务提供配置信息存储的位置!启动mongos服务时,需要提供一个mongod服务,以便路由服务访问或存储相关的配置信息。配置信息主要包括:分片与数据的对应关系!

【创建分片】

1》 启动配置服务器,就是一个mongod服务,配置服务器不需要很大的空间,估算每200M数据需要1KB的配置空间,所以通过这个,可以估算一下自己的配置服务器需要多大的空间。

C:\>mongod --dbpath e:\mdbconfig --logpath e:\mdbconfiglog\log.log --port 20000
all output going to: e:\mdbconfiglog\log.log


2》 启动mongos路由服务,注意启动这个服务,要通过--configdb选项指定配置服务器的地址:

C:\>mongos --port 30000 --configdb localhost:20000
Sun Sep 02 16:36:44 mongos db version v2.0.7, pdfile version 4.5 starting (--hel
p for usage)
Sun Sep 02 16:36:44 git version: 875033920e8869d284f32119413543fa475227bf
Sun Sep 02 16:36:44 build info: windows sys.getwindowsversion(major=6, minor=0,
build=6002, platform=2, service_pack='Service Pack 2') BOOST_LIB_VERSION=1_42
Sun Sep 02 16:36:44 [Balancer] about to contact config servers and shards
Sun Sep 02 16:36:44 [Balancer] config servers and shards contacted successfully
Sun Sep 02 16:36:44 [Balancer] balancer id: uf2011xxxxx:30000 started at Sep 02
16:36:44
Sun Sep 02 16:36:44 [Balancer] creating WriteBackListener for: localhost:20000 s
erverID: 50431a9cd000d75f5dfa10b3
Sun Sep 02 16:36:44 [websvr] admin web console waiting for connections on port 3
1000

启动mongos服务也要指定一个端口,以后我们操作分片或客户端进行各种数据库操作都会与这个mongos服务进行通信。

3》 启动一个mongod服务,并将其以“片”的形式添加到我们的分片系统中:

C:\>mongod --dbpath e:\mdbshard1 --logpath e:\mdblog1\log.log --port 10001
all output going to: e:\mdblog1\log.log

连接mongos服务,通过运行命令addshard命令添加分片:

C:\>mongo localhost:30000/admin
MongoDB shell version: 2.0.7
connecting to: localhost:30000/admin
mongos> db.runCommand({"addshard" : "localhost:10001", "allowLocal" :true});
{ "shardAdded" : "shard0000", "ok" : 1 }
mongos>

通过上述命令我们将一个mongod服务添加的分片系统中了。这里必须要设定键“allowLocal”为true,因为MongoDB尽量避免因为误操作将数据库集群(分片系统)配置到本地,通过这个键,我们可以告诉MongoDB,我们这是在测试环境,不是生产环境!

通过多次使用addshard命令,我们可以讲多台mongod服务加入到这个数据库集群中!

【切分数据】

构建好了我们的数据库集群后,我们还有一个工作要做,就是在数据库和集合级别将分片功能打开!(注意以后对数据库集群的各种操作都是连接mongos这个路由服务进行的):

C:\>mongo localhost:30000/admin
MongoDB shell version: 2.0.7
connecting to: localhost:30000/admin
mongos> db.runCommand({"enablesharding" : "mydb"});
{ "ok" : 1 }

通过上述命令,我们设置数据库mydb的分片功能打开,然后我们运行shardcollection命令,设置特定集合的片键:

mongos> b.runCommand({"shardcollection" : "mydb.users", "key" : {"name" : 1}});
{ "collectionsharded" : "mydb.users", "ok" : 1 }
mongos>

如果此时集合中存在数据,则这些已有数据会被分片,对于后期往该集合中添加的数据,也会被自动分片!目前在本地测试,数据量太少,没有出现分片的效果!后期会使用大数据量进行测试。

你可能感兴趣的:(学习MongoDB--(10-2):分片(建立分片))