部署环境:
9个节点, 分别为
node79(192.168.136.79),
node78(192.168.136.78),
node77(192.168.136.77),
node76(192.168.136.76),
node75(192.168.136.75),
node74(192.168.136.74),
node73(192.168.136.73),
node72(192.168.136.72)
node71(192.168.136.71),
每个节点的配置如下:
操作系统:ubuntu 11.10, 内存32G, 磁盘4T,CPU16核
目标部署结构:
node79和node78和node77 组成第一个复制集,为shard1,
注意:一个复制集中最好有奇数个工作节点,这样当某个节点挂掉的时候,其他节点可以通过选举的方式推选出新的主节点。
如果没有奇数个工作节点,也可以通过添加仲裁进程的方式来实现。
node76和node75和node74 组成第二个复制集,为shard2,
node73和node72和node71 组成第三个复制集,为shard3,
> config = {_id: ‘shard1′, members: [
{_id: 0, host: '192.168.136.79:27017'},
{_id: 2, host: '192.168.136.78:27017'},
{_id: 3, host: '192.168.136.77:27017'},]
}
> rs.initiate(config);
以同样的方式配置shard2 和 shard3
(3)启动configure server
在node72,node74和node78上,分别运行如下:
./mongod –configsvr –dbpath /home/mongodb/data/config –port 20000 –logpath /home/mongodb/data/config.log –fork #config server也需要dbpath
(4)启动mongos服务
在node79上运行:
./mongos –configdb 192.168.136.72:20000,192.168.136.74:20000,192.168.136.78:20000 –port 30000 –logpath /home/mongodb/data/mongos.log –fork
接下来是对该分布式mongodb的配置
(1)添加shard server
在任何一台客户端机器上
./mongo 192.168.136.79:30000/admin
>db
admin
>db.runCommand( { addshard : “shard1/192.168.136.79:27017,192.168.136.78:27017″,name:”s2″} );
#!/usr/bin/env python from pymongo import Connection import time,datetime import random connection = Connection('192.168.136.79', 27017) db = connection['test'] def func_time(func): def _wrapper(*args,**kwargs): start = time.time() func(*args,**kwargs) print func.__name__,'run:',time.time()-start return _wrapper @func_time def insert(num): posts = db.people for x in range(num): post = {"_id" : str(x), "author": str(x)+"Mike", "number": random.randint(0,100), "text": "My first blog post!", "tags": ["mongodb", "python", "pymongo"], "date": datetime.datetime.utcnow()} print x posts.insert(post) if __name__ == "__main__": num = 20000000 insert(num)
#!/usr/bin/env python from pymongo import Connection import time,datetime import random connection = Connection('192.168.136.79', 27017) db = connection['test'] def func_time(func): def _wrapper(*args,**kwargs): start = time.time() func(*args,**kwargs) print func.__name__,'run:',time.time()-start return _wrapper #@func_time def randy(): rand = random.randint(1,5000000) return rand @func_time def mread(num): find = db.people #find.find({"author": str(rand)+"Mike"}) #for x in range(num): # rand = randy() # find.find({"author": str(rand)+"Mike"}) #print find.find({"number":189}).count() x = 1 for post in find.find({"number":19}): x =x+1 #print x #post.number = 19 #print post #for x in range(num): # find.findone({"author":str()}) if __name__ == "__main__": num = 10000000 mread(num)