您的位置:首页 > 数据库 > Mongodb

mongodb分片配置

2014-11-06 21:37 274 查看
#本次配置时间为 2014-11-06 软件版本为:mongodb-linux-x86_64-2.4.3.tgz
linux :centos 5.9 64bit
##############################################################
本次部署分片的方式,只为测试环境: #
10.8.10.234 10.8.10.235 10.8.10.236 #
shard1 分片 master slaver arbiterOnly #
shard2 分片 master slaver arbiterOnly #
shard3 分片 master slaver arbiterOnly #
#
###############################################################

#每个服务器配置:

mkdir -p /data/mongodb/config/data
mkdir -p /data/mongodb/config/log

mkdir -p /data/mongodb/mongos/log

mkdir -p /data/mongodb/shard1/data
mkdir -p /data/mongodb/shard1/log

mkdir -p /data/mongodb/shard2/data
mkdir -p /data/mongodb/shard2/log

mkdir -p /data/mongodb/shard3/data
mkdir -p /data/mongodb/shard3/log

tar -xvzf mongodb-linux-x86_64-2.4.3.tgz
mv mongodb-linux-x86_64-2.4.3 /data/mongodb/mongodb

#每个服务器配置服务:

/data/mongodb/mongodb/bin/mongod --configsvr --dbpath /data/mongodb/config/data --port 21000 --logpath /data/mongodb/config/log/config.log --fork

#每台服务器 启动分片服务:
/data/mongodb/mongodb/bin/mongod --shardsvr --replSet shard1 --port 22001 --dbpath /data/mongodb/shard1/data --logpath /data/mongodb/shard1/log/shard1.log --fork --nojournal --oplogSize 10

/data/mongodb/mongodb/bin/mongod --shardsvr --replSet shard2 --port 22002 --dbpath /data/mongodb/shard2/data --logpath /data/mongodb/shard2/log/shard2.log --fork --nojournal --oplogSize 10

/data/mongodb/mongodb/bin/mongod --shardsvr --replSet shard3 --port 22003 --dbpath /data/mongodb/shard3/data --logpath /data/mongodb/shard3/log/shard3.log --fork --nojournal --oplogSize 10

# 1台或者多台服务器启动mongos路由,应用程序连接该路由端口。
#mongos 需要等到3台服务器的配置文件都启动之后 才能启动,否则报错。
/data/mongodb/mongodb/bin/mongos --configdb 10.8.10.234:21000,10.8.10.235:21000,10.8.10.236:21000 --port 20000 --logpath /data/mongodb/mongos/log/mongos.log --fork

#################################
#登入任意服务器执行:

mongo 127.0.0.1:22001
use admin

设置分片1

>config = { _id:"shard1", members:[
  {_id:0,host:"10.8.10.234:22001",priority:1},
  {_id:1,host:"10.8.10.235:22001",priority:1},
  {_id:2,host:"10.8.10.236:22001",arbiterOnly:true}
  ]
  }

>rs.initiate(config);

# ,priority:N 是设置master 优先级 可以不配置,建议把分片的master放置在不同的服务器,实现读写压力分流
# arbiterOnly:true 需要配置。省略后,变成1 master + 2个slaver 与方案不符

############################

mongo 127.0.0.1:22002
use admin

设置分片2
>config = { _id:"shard2", members:[
  {_id:0,host:"10.8.10.234:22002",priority:1},
  {_id:1,host:"10.8.10.235:22002",priority:1},
  {_id:2,host:"10.8.10.236:22002",arbiterOnly:true}
  ]
  }

>rs.initiate(config);

# ,priority:N 是设置master 优先级 可以不配置。建议把分片的master放置在不同的服务器,实现读写压力分流
# arbiterOnly:true 需要配置 。省略后,变成1master + 2个slaver 与方案不符

#############################

mongo 127.0.0.1:22003
use admin
设置分片3

>config = { _id:"shard3", members:[
  {_id:0,host:"10.8.10.234:22003",priority:1},
  {_id:1,host:"10.8.10.235:22003",priority:1},
  {_id:2,host:"10.8.10.236:22003",arbiterOnly:true}
  ]
  }

>rs.initiate(config);

# ,priority:N 是设置master 优先级 可以不配置。建议把分片的master放置在不同的服务器,实现读写压力分流
# arbiterOnly:true 需要配置。省略后,变成1master + 2个slaver 与方案不符

#########################

连接mongs: bin/mongo 127.0.0.1:20000
#使用admin数据库 user admin
串联路由服务器与分配副本集1

db.runCommand( { addshard : "shard1/10.8.10.234:22001,10.8.10.235:22001,10.8.10.236:22001"});

串联路由服务器与分配副本集2
db.runCommand( { addshard : "shard2/10.8.10.234:22002,10.8.10.235:22002,10.8.10.236:22002"});

串联路由服务器与分配副本集3
db.runCommand( { addshard : "shard3/10.8.10.234:22003,10.8.10.235:22003,10.8.10.236:22003"});

#查看分片服务器的配置
db.runCommand( { listshards : 1 } );

备注:每个分片副本集的仲裁节点结果不列出来
##############################

###手动选定master备注:

在配置分片的时候 添加优先级可以手动选择master

分片配置后之后,使用如下命令,在分片的主节点登录,可以将members[1] 提升为Master。
rs.status();
rs.conf();
cfg=rs.conf();
cfg.members[0].priority=1
cfg.members[1].priority=2
#cfg.members[2] 仲裁机不用设置
rs.reconfig(cfg);

创建数据测试:
  #指定testdb分片生效
  db.runCommand( { enablesharding :"testdb"});
  #指定数据库里需要分片的集合和片键
  db.runCommand( { shardcollection : "testdb.table1",key : {id: 1} } )
  我们设置testdb的 table1 表需要分片,根据 id 自动分片到 shard1 ,shard2,shard3 上面去。要这样设置是因为不是所有mongodb 的数据库和表 都需要分片!

bin/mongo 127.0.0.1:20000
  #使用testdb use testdb;
#插入测试数据
  for (var i = 1; i <= 100000; i++)  db.table1.save({id:i,"test1":"testval1"});

  #查看分片情况如下,部分无关信息省掉了
  db.table1.stats();
看到数据分到3个分片,各自分片数量为: shard1 “count” : 42183,shard2 “count”: 38937,shard3 “count” : 18880。已经成功了!不过分的好像不是很均匀,所以这个分片还是很有讲究的,后续再深入讨论。

为了充分利用3台服务器资源,缓解磁盘Io ,以上方案可以如下变通:
##############################################################
在生产环境中,可以如下部署: #
10.8.10.234 10.8.10.235 10.8.10.236 #
shard1 分片 master slaver arbiterOnly #
shard2 分片 arbiterOnly master slaver #
shard3 分片 slaver arbiterOnly master #
#
###############################################################
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mongoDB 分片部署