#本次配置时间为 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        #

                                                            #                                                            

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