加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

mongodb分三片+仲裁节点

(2014-08-13 18:35:01)
标签:

mongodb

分类: 数据库
如果shard里只有2台机器,需要一个仲裁节点。否则主挂了从不会提升成主,从表象上看需要超过半数的机器投票才能生效(这个问题在下篇blog有详细解释)

三台机器做mongos,config和仲裁节点  30000/27000/30001
192.168.10.202
192.168.10.203
192.168.10.204


两台机器做shard1 27020
192.168.10.202
192.168.10.203

两台台机器做shard2 27021
192.168.10.203
192.168.10.204

两台台机器做shard3  27022
192.168.10.202
192.168.10.204



1,在202/203/204机器上分别启动相关进程,仲裁节点不能是自己,并且仲裁节点需要和数据节点是一个shard

192.168.10.202
mkdir -p /data/27020 /data/27022 /data/arbiter
/usr/local/mongodb/bin/mongod --replSet shard1 --shardsvr --dbpath /data/27020 --port 27020 &  
/usr/local/mongodb/bin/mongod --replSet shard3 --shardsvr --dbpath /data/27022 --port 27022 &
/usr/local/mongodb/bin/mongod --replSet shard2 --shardsvr --dbpath /data/arbiter --port 30001 &


192.168.10.203
mkdir -p /data/27020 /data/27021 /data/arbiter
/usr/local/mongodb/bin/mongod --replSet shard2 --shardsvr --dbpath /data/27021 --port 27021 &
/usr/local/mongodb/bin/mongod --replSet shard1 --shardsvr --dbpath /data/27020 --port 27020 &
/usr/local/mongodb/bin/mongod --replSet shard3 --shardsvr --dbpath /data/arbiter --port 30001 &

192.168.10.204
mkdir -p /data/27021 /data/27022 /data/arbiter
/usr/local/mongodb/bin/mongod --replSet shard1 --shardsvr --dbpath /data/arbiter --port 30001 &
/usr/local/mongodb/bin/mongod --replSet shard3 --shardsvr --dbpath /data/27022 --port 27022 &
/usr/local/mongodb/bin/mongod --replSet shard2 --shardsvr --dbpath /data/27021 --port 27021 &  
 


2.在shard1 192.168.10.202上
初始化replica set
用mongo连接shard1的mongod,
/usr/local/mongodb/bin/mongo --port 27020
执行: #id要和启动时--replSet shard1的shard1匹配
config = {_id: 'shard1', members: [{_id:0, host: '192.168.10.202:27020'},{_id:1, host: '192.168.10.203:27020'},{_id:2, host: '192.168.10.204:30001', arbiterOnly:true}]}   
rs.initiate(config);


在shard2 192.168.10.203上
用mongo连接shard2的mongod,
/usr/local/mongodb/bin/mongo --port 27021
执行:
config = {_id: 'shard2', members: [{_id: 0, host: '192.168.10.203:27021'},{_id:1, host: '192.168.10.204:27021'},{_id: 2, host: '192.168.10.202:30001', arbiterOnly:true}]}
rs.initiate(config);

在shard3 192.168.10.204上
/usr/local/mongodb/bin/mongo --port 27022
执行:
config = {_id: 'shard3', members: [{_id: 0, host: '192.168.10.202:27022'},{_id:1, host: '192.168.10.204:27022'},{_id: 2, host: '192.168.10.203:30001', arbiterOnly:true}]}
rs.initiate(config);



3.配置3台config server
在192.168.10.202/203/204上:
mkdir -p /data/27000
/usr/local/mongodb/bin/mongod --configsvr --dbpath /data/27000 --port 27000 &


4.配置mongs
在192.168.10.202/203/204上分别执行:
/usr/local/mongodb/bin/mongos --configdb  192.168.10.202:27000,192.168.10.203:27000,192.168.10.204:27000 --port 30000 --logpath /data/mongos.log --logappend --fork
#mongs不需要dbpath

5.Configuring the Shard Cluster
连接到其中一个mongos进程,并切换到admin数据库做以下配置
a. 连接到mongs,并切换到admin
./mongo  192.168.10.202/admin
>db
Admin
b. 加入shards
如果shard是replica sets,用replicaSetName/[:port] [,serverhostname2[:port],…]这样的格式表示,例如本例执行:
db.runCommand( { addshard : "shard1/192.168.10.202:27020,192.168.10.203:27020,192.168.10.204:30001"} );
db.runCommand( { addshard : "shard2/192.168.10.203:27021,192.168.10.204:27021,192.168.10.202:30001"} );
db.runCommand( { addshard : "shard3/192.168.10.202:27022,192.168.10.204:27022,192.168.10.203:30001"} );

注意:在添加第二个shard时,出现error:test database 已经存在的错误,这里用mongo命令连接到第二个replica set,用db.dropDatabase()命令把test数据库给删除然后就可加入

c. Listing shards
>db.runCommand( { listshards : 1 } )
如果列出了以上二个你加的shards,表示shards已经配置成功

6.对库进行分片,必须为分片enable一个数据库
http://www.mongodb.org/display/DOCS/Sharding+FAQ#ShardingFAQ-Wheredounshardedcollectionsgoifshardingisenabledforadatabase?
官方解释:现在的版本,对库分片后,不会自动将不同的collections放到不同的sharding中,以后版本会改
db.runCommand({enablesharding:"uam"})
db.printShardingStatus();

7.对需要分片的collections进行分片,用shardcollection 命令分隔数据集,key自动生成
db.runCommand({shardcollection : "uam.MONITOR_INFO","key":{"campus_id":"hashed"}})

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有