参考“mongodb分布式部署之分片配置”
http://jokry.me/blog/2010/07/mongodb-distributable-slice/
实际操作了一下
具体环境:两台虚拟64位centos,分别是192.168.1.20和192.168.1.21
整个设置是在同一台机器上两组分片,每组分片在两台机器上互为主从。
config服务器运行在21上,mongos运行在20上。
具体:
#启动第一组分片主库(在192.168.1.20上执行),端口为18020
mongod -fork --logpath=/tmp/1 --pairwith 192.168.1.21:18020 --dbpath=/mongo/data1 --port 18020
#启动第一组分片从库(在192.168.1.21上执行)
mongod -fork --logpath=/tmp/1 --pairwith 192.168.1.20:18020 --dbpath=/mongo/data1 --port 18020
#启动第二组分片主库(在192.168.1.20上执行)端口为18021
mongod -fork --logpath=/tmp/2 --pairwith 192.168.1.21:18021 --dbpath=/mongo/data2 --port 18021
#启动第二组分片从库(在192.168.1.21上执行)
mongod -fork --logpath=/tmp/2 --pairwith 192.168.1.20:18021 --dbpath=/mongo/data2 --port 18021
#启动configserver,在192.168.1.20
#mongod -fork --logpath=/tmp/3 --configsvr --dbpath /mongo/configsvr --port 18022
#启动configserver,在192.168.1.21,config server数目只能是奇数
mongod -fork --logpath=/tmp/3 --configsvr --dbpath /mongo/configsvr --port 18022
#在192.168.1.20上执行
mongos -fork --logpath=/tmp/4 --configdb 192.168.1.21:18022
#客户端连接mongos
mongo --host 192.168.1.20
show dbs
use admin
#增加第一组分片
db.runcommand( { addshard : "192.168.1.20:18020,192.168.1.21:18020", allowlocal : true } )
#增加第二个分片
db.runcommand( { addshard : "192.168.1.20:18021,192.168.1.21:18021", allowlocal : true } )
db.runcommand({listshards:1})
config = connect("192.168.1.21:18022")
config = config.getsisterdb("config")
#新增数据库test
test= db.getsisterdb("test")
db.runcommand( { enablesharding : "test" } )
#建立分片数据集 msg,posttime 是time_t,结果由time()函数得到
db.runcommand( { shardcollection : "test.msg", key : {posttime : 1} } )
db.printshardingstatus();
然后,php或c 连接192.168.1.20就可以进行insert等操作了。因为posttime有连续性,添加记录达到
几十万条以上,可以看到data1下面的文件比较大,data2下面文件也在增长,但比data1小。比较20和21两台机器下的同名目录文件,大小是一样的。
这种操作key 没有散列,读写操作过于集中,下一步研究一下好方法,可能采用hash使key散开。然后,在每台机器上启动10个分片进程再做测试。
阅读(3598) | 评论(1) | 转发(0) |