之前一篇文章写了关于使用mongodb来进行replication,然后发现对于fileserver来说,只是单纯的replicate还不够,因为我们不可能只是使用一台机器来作为fileserver。
于是尝试试用mongodb的auto-shard来进行分布式存储,搞了一整天终于能够搭好环境,下面贴一下配置信息,备忘一下。
主要参考了两篇文章,这里面如何配置都讲得很详细,不过我还是按照自己的方法写一下我的步骤
http://www.cnblogs.com/daizhj/archive/2010/09/07/1820528.html
http://www.mongodb.org/display/DOCS/A+Sample+Configuration+Session
1. 复制三份mongodb文件,同时在各个文件夹下建立data文件夹用于保存数据库
D:\mongodb1\
D:\mongodb2\
D:\mongodb3\
2. 开始配置,db1,db2作为shard节点,db3作为config server以及mongos
db1和db2的配置一样:
cd d:\mongodb1\bin
mongod --shardsvr --dbpath d:\mongodb1\data --logpath d:\mongodb1\log\logs.log --port 10000
cd d:\mongodb2\bin
mongod --shardsvr --dbpath d:\mongodb2\data --logpath d:\mongodb2\log\logs.log --port 10001
db3 config server 配置:
cd d:\mongodb3\bin
mongod --configsvr --dbpath d:\mongodb3\data --logpath d:\mongodb3\log\logs.log --port 20000
db3 mongos 配置:
mongos --configdb 127.0.0.1:20000
这里mongos是用来路由到各个shard节点,因此客户端只需要连接到mongos,无需要直接连接到shard节点,这里没有指定端口号,所以为默认端口号27017
在看上面两篇文章的配置中,我还以为mongos的端口号就是20000,甚至还以为链接字符串应该是把所有的节点写上,囧,所以为了避免困惑还是写上端口好。
mongos --port 30000 --configdb 127.0.0.1:20000
--configdb 用于指定配置服务器地址,可以多个,用逗号隔开
3. 链接到mongos,配置shard
cd d:\mongodb3\bin
mongo
use admin
db.runCommand({addshard:"127.0.0.1:10000",name:"shard1",maxSize:40000})
db.runCommand({addshard:"127.0.0.1:10001",name:"shard2"})
Now you need to tell the database that you want to spread out your data at a database and collection level. You have to give the collection a key (or keys) to partition by.
This is similar to creating an index on a collection.(http://www.mongodb.org/display/DOCS/A+Sample+Configuration+Session)
db.runCommand({enablesharding:"ecDoc"})
db.runCommand({shardcollection:"ecDoc.files.chunks",key:{files_id:1}})
这里我使用的是GridFS来保存文件,所以根据http://www.mongodb.org/display/DOCS/Choosing+a+Shard+Key
shard key的作用还是比较模糊。