-port 20000 --logpath "F:\mongo\logs\config\MongoDB.txt" --rest
配置服务器不需要很多的空间和资源(200M实际数据大约占用1kB的配置空间)
建立mongos进程,一共应用程序连接.这种路由服务器连接数据目录都不需要,但一定要指明配置服务器的位置:
mongos --port 30000 --configdb 127.0.0.1:20000 --logpath "F:\mongo\logs\mongos\MongoDB.txt"
分片管理通常是通过mongos完成的.
添加片
片就是普通的mongod实例(或副本集)
mongod --dbpath "F:\mongo\dbs\shard" --port 10000 --logpath "F:\mongo\logs\shard\MongoDB.txt" --rest
mongod --dbpath "F:\mongo\dbs\shard1" --port 10001 --logpath "F:\mongo\logs\shard1\MongoDB.txt" --rest
连接刚才启动的mongos,为集群添加一个片.启动shell,连接mongos:
确定连接的是mongos而不是mongod,通过addshard命令添加片:
>mongo 127.0.0.1:30000
mongos> db.runCommand(
... {
... "addshard":"127.0.0.1:10000",
... "allowLocal":true
... }
... )
Sat Jul 21 10:46:38 uncaught exception: error { "$err" : "can't find a shard to
put new db on", "code" : 10185 }
mongos> use admin
switched to db admin
mongos> db.runCommand(
... {
... "addshard":"127.0.0.1:10000",
... "allowLocal":1
... }
... )
{ "shardAdded" : "shard0000", "ok" : 1 }
mongos> db.runCommand( www.2cto.com
... {
... "addshard":"127.0.0.1:10001",
... "allowLocal":1
... }
... )
{ "shardAdded" : "shard0001", "ok" : 1 }
当在本机运行片的时候,得设定allowLocal键为1.MongoDB尽量避免由于错误的配置,将集群配置到本地,
所以得让它知道这仅仅是开发,而且我们很清楚自己在做什么.如果是生产环境中,则要将其部署在不同的机器上.
想添加片的时候,就运行addshard.MongoDB会负责将片集成到集群.
切分数据
MongoDB不会将存储的每一条数据都直接发布,得先在
数据库和集合的级别将分片功能打开.
如果是连接配置服务器,
E:\mongo\bin>mongo 127.0.0.1:20000
MongoDB shell version: 2.0.6
connecting to: 127.0.0.1:20000/test
> use admin
switched to db admin
> db.runCommand({"enablesharding":"test"})
{
"errmsg" : "no such cmd: enablesharding",
"bad cmd" : {
"enablesharding" : "test"
},
"ok" : 0
}
应该是连接 路由服务器:
db.runCommand({"enablesharding":"test"})//将test
数据库启用分片功能.
对数据库分片后,其内部的集合便会存储到不同的片上,同时也是对这些集合分片的前置条件.
在数据库级别启用了分片以后,就可以使用shardcollection命令堆积和进行分片:
db.runCommand({"shardcollection":"test.refactor","key":{"name":1}})//对test数据库的refactor集合进行分片,片键是name www.2cto.com
如果现在对refactor集合添加数据,就会依据"name"的值自动分散到各个片上.
9.生产配置
进入生产环境后,需要更健壮的分片方案,成功的构建分片需要如下条件:
多个配置服务器
多个mongos服务器
每个片都是副本集
正确的设置w
健壮的配置
设置多个配置服务器是很简单的.
设置多个配置服务器和设置一个配置服务器一样
mongod --dbpath "F:\mongo\dbs\config" --port 20000 --logpath "F:\mongo\logs\config\MongoDB.txt" --rest
mongod --dbpath "F:\mongo\dbs\config1" --port 20001 --logpath "F:\mongo\logs\config1\MongoDB.txt" --rest
mongod --dbpath "F:\mongo\dbs\config2" --port 20002 --logpath "F:\mongo\logs\config2\MongoDB.txt" --rest
启动mongos的时候应将其连接到3个配置服务器上:
mongos --port 30000 --configdb 127.0.0.1:20000,127.0.0.1:20001,127.0.0.1:20002 --logpath "F:\mongo\logs\mongos\MongoDB.txt"
配置服务器使用的是两步提交机制,而不是普通的MongoDB的异步复制,来维护集群配置的不同副本.这样能保证集群的状态
的一致性.这意味着,某台配置服务器宕机后,集群的配置信息是只读的.客户端还是能够读写,但是只有所有配置服务器备份了
以后才能重新均衡数据.
多个mongos
mongos的数量不受限制,建议针对一个应用服务器只运行一个mongos进程.这样每个应用服务器就可以与mongos进行
本地回话,如果服务器不工作了,就不会有应用试图与不存的mongos通话了
健壮的片
生产环境中,每个片都应是副本集,这样单个服务器坏了,就不会导致整个片失效.用addshard命令就可以将副本集作为片添加,
添加时,只要指定副本集的名称和种子就行了.
如要添加副本集refactor,其中包含一个服务器127.0.0.1:10000(还有别的服务器),就可以用下列命令将其添加到集群中: www.2cto.com
db.run