之前研究了 mongodb环境搭建,考虑到今后要用到mongodb集群环境,且多位32位OS环境,因此构建了 mongodb集群环境。具体过程参考了“ Mongodb集群配置(sharding with replica set)” http://blog.csdn.net/zhangzhaokun/article/details/6269514。
实验用VMWare 8.0构建了4台XP机器,IP地址依次为192.168.111.11,192.168.111.12,192.168.111.13,192.168.111.14。
配制说明:
1、3个分片sharding,每个sharding均占据三台机器,其中192.168.111.11为主存储,192.168.111.12与192.168.111.13为Replica Sets。
2、3个配置节点Configsever依次占据192.168.111.11,192.168.111.12,192.168.111.13。
3、1个路由节点Mongos在192.168.111.14运行。
sharding A的组成为: 192.168.111.11:10000 192.168.111.12:10001 192.168.111.13:10002
sharding B的组成为: 192.168.111.11:20000 192.168.111.12:20001 192.168.111.13:20002
sharding C的组成为: 192.168.111.11:30000 192.168.111.12:30001 192.168.111.13:30002
configsever组成为: 192.168.111.11:40000 192.168.111.12:40001 192.168.111.13:40002
mongos组成为: 192.168.111.14:50000
先从mongodb官网上down下来2.0.2,然后解压到C盘根目录下,四台虚拟机相同,因此可以先部署再做机器拷贝。在C目录下建文件夹data,data下建子目录a,b,c,config,依次为sharding A到C服务,config目录为configsever服务。
以下内容为服务启动脚本,可分别以bat形势执行,以避免在cmd下输入大量命令出现手误。
构建sharding A
mongod机器192.168.111.11下,执行:
mongod.exe --logappend --dbpath c:\data\a --port 10000 --shardsvr --replSet setA --rest --oplogSize 64
mongod机器192.168.111.12下,执行:
mongod.exe --logappend --dbpath c:\data\a --port 10001 --shardsvr --replSet setA --rest --oplogSize 64
mongod机器192.168.111.13下,执行:
mongod.exe --logappend --dbpath c:\data\a --port 10002 --shardsvr --replSet setA --rest --oplogSize 64
mongos机器192.168.111.14下,执行:
call mongo.exe 192.168.111.11:10000/admin
config={_id:'setA',members:[{_id:0,host:'192.168.111.11:10000'},{_id:1,host:'192.168.111.12:10001'},{_id:2,host:'192.168.111.13:10002'}]}
rs.initiate(config)
构建sharding B
mongod机器192.168.111.11下,执行:
mongod.exe --logappend --dbpath c:\data\b --port 20000 --shardsvr --replSet setB --rest --oplogSize 64
mongod机器192.168.111.12下,执行:
mongod.exe --logappend --dbpath c:\data\b --port 20001 --shardsvr --replSet setB --rest --oplogSize 64
mongod机器192.168.111.13下,执行:
mongod.exe --logappend --dbpath c:\data\b --port 20002 --shardsvr --replSet setB --rest --oplogSize 64
mongos机器192.168.111.14下,执行:
call mongo.exe 192.168.111.11:20000/admin
config={_id:'setB',members:[{_id:0,host:'192.168.111.11:20000'},{_id:1,host:'192.168.111.12:20001'},{_id:2,host:'192.168.111.13:20002'}]}
rs.initiate(config)
构建sharding C
mongod机器192.168.111.11下,执行:
mongod.exe --logappend --dbpath c:\data\c --port 30000 --shardsvr --replSet setC --rest --oplogSize 64
mongod机器192.168.111.12下,执行:
mongod.exe --logappend --dbpath c:\data\b --port 30001 --shardsvr --replSet setC --rest --oplogSize 64
mongod机器192.168.111.13下,执行:
mongod.exe --logappend --dbpath c:\data\c --port 30002 --shardsvr --replSet setC --rest --oplogSize 64
mongos机器192.168.111.14下,执行:
call mongo.exe 192.168.111.11:30000/admin
config={_id:'setB',members:[{_id:0,host:'192.168.111.11:30000'},{_id:1,host:'192.168.111.12:30001'},{_id:2,host:'192.168.111.13:30002'}]}
rs.initiate(config)
构建configsever
mongod机器192.168.111.11下,执行:
call mongod.exe --configsvr --logappend --dbpath c:\data\config --port 40000 --shardsvr
mongod机器192.168.111.12下,执行:
call mongod.exe --configsvr --logappend --dbpath c:\data\config --port 40001 --shardsvr
mongod机器192.168.111.13下,执行:
call mongod.exe --configsvr --logappend --dbpath c:\data\config --port 40002 --shardsvr
构建mongos路由
call mongo.exe 192.168.111.14:50000
mongos机器192.168.111.14下,执行:
call mongos.exe --configdb 192.168.111.11:40000,192.168.111.12:40001,192.168.111.13:40002 --logappend --port 50000
配置分片
mongos机器192.168.111.14下,执行:
call mongo.exe 192.168.111.14:50000
use admin
db.runCommand({addshard:"setA/192.168.111.11:10000,192.168.111.12:10001,192.168.111.13:10002",name:"shardSetA"})
db.runCommand({addshard:"setB/192.168.111.11:20000,192.168.111.12:20001,192.168.111.13:20002",name:"shardSetB"})
db.runCommand({addshard:"setC/192.168.111.11:30000,192.168.111.12:30001,192.168.111.13:30002",name:"shardSetC"})
查看分片状态
printShardingStatus()
--- Sharding Status ---
sharding version: { "_id" : 1, "version" : 3 }
shards:
{ "_id" : "shardSetA", "host" : "setA/192.168.111.11:10000,192.168.111
.13:10002,192.168.111.12:10001" }
{ "_id" : "shardSetB", "host" : "setB/192.168.111.11:20000,192.168.111
.13:20002,192.168.111.12:20001" }
{ "_id" : "shardSetC", "host" : "setC/192.168.111.11:30000,192.168.111
.13:30002,192.168.111.12:30001" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
创建数据库geodb
use geodb
切换到admin权限
use admin
创建数据库表geodb_orders
db.createCollection(geodb_orders')
将数据库geodb设置为允许分片
db.runCommand({enablesharding:"geodb"})
设置表的分区主键为order_id
db.runCommand({shardcollection:'geodb.geodb_orders',key:{order_id:1}})
至此,构建完mongodb毕集群环境。下一步工作是研究如何构建中间件层。构建该中间件的第一项工作是实现基于R树的分布式空间索引,构建过程中可能还需要对集群架构进行大的调整,数据如何在节点上分布是需要考虑的问题。