md01    10.0.0.11
md02    10.0.0.12
md03    10.0.0.14

2、启动三台机器的mongod实例

根据Replica Set、Sharding策略部署mongod。将两个sharding组部署到三台服务器上,每个sharding组有三个replica set成员。

#Server1:


  1. mkdir -p /elain/data/mongodb/shard11 
  2. mkdir -p /elain/data/mongodb/shard21 
  3. /elain/apps/mongodb/bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /elain/data/mongodb/shard11 --oplogSize 100 --logpath /elain/data/mongodb/shard11.log --logappend --fork --rest 
  4. /elain/apps/mongodb/bin/mongod --shardsvr --replSet shard2 --port 27018 --dbpath /elain/data/mongodb/shard21 --oplogSize 100 --logpath /elain/data/mongodb/shard21.log --logappend --fork --rest 


#Server2:


  1. mkdir -p /elain/data/mongodb/shard12/ 
  2. mkdir -p /elain/data/mongodb/shard22/ 
  3. /elain/apps/mongodb/bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /elain/data/mongodb/shard12 --oplogSize 100 --logpath /elain/data/mongodb/shard12.log --logappend --fork --rest 
  4. /elain/apps/mongodb/bin/mongod --shardsvr --replSet shard2 --port 27018 --dbpath /elain/data/mongodb/shard22 --oplogSize 100 --logpath /elain/data/mongodb/shard22.log --logappend --fork --rest 


#Server3:


  1. mkdir -p /elain/data/mongodb/shard13/ 
  2. mkdir -p /elain/data/mongodb/shard23/ 
  3. /elain/apps/mongodb/bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /elain/data/mongodb/shard13 --oplogSize 100 --logpath /elain/data/mongodb/shard13.log --logappend --fork --rest 
  4. /elain/apps/mongodb/bin/mongod --shardsvr --replSet shard2 --port 27018 --dbpath /elain/data/mongodb/shard23 --oplogSize 100 --logpath /elain/data/mongodb/shard23.log --logappend --fork --rest 


  1. /elain/apps/mongodb/bin/mongo 10.0.0.11:27017 
  2.  
  3. config = {_id: 'shard1', members: [ 
  4.     {_id: 0, host: '10.0.0.11:27017'}, 
  5.     {_id: 1, host: '10.0.0.12:27017'}, 
  6.     {_id: 2, host: '10.0.0.14:27017'}]}; 


  1. rs.initiate(config); 
  2.  
  3. /elain/apps/mongodb/bin/mongo 10.0.0.11:27018 
  4.  
  5. config = {_id: 'shard2', members: [ 
  6.     {_id: 0, host: '10.0.0.11:27018'}, 
  7.     {_id: 1, host: '10.0.0.12:27018'}, 
  8.     {_id: 2, host: '10.0.0.14:27018'}]}; 
  9.  
  10. rs.initiate(config); 


4、启动并配置三台Config Server

#Server1、2、3:


  1. mkdir -p /elain/data/mongodb/config/ 
  2. /elain/apps/mongodb/bin/mongod --configsvr --dbpath /elain/data/mongodb/config/ --port 20000 --logpath /elain/data/mongodb/config1.log --logappend --fork 


5、部署并配置三台Routing Server

指定所有的config sever地址参数,chunkSize是分割数据时每块(Chunk)的单位大小

#Server1、2、3:


  1. /elain/apps/mongodb/bin/mongos --configdb 10.0.0.11:20000,10.0.0.12:20000,10.0.0.14:20000 --port 30000 --chunkSize 100 --logpath /elain/data/mongodb/mongos.log --logappend --fork 


6、命令行添加分片

连接到mongs服务器,并切换到admin


  1. /elain/apps/mongodb/bin/mongo 10.0.0.11:30000/admin 


  1. db.runCommand( { 
  2.     addshard : "shard1/10.0.0.11:27017,10.0.0.12:27017,10.0.0.14:27017", 
  3.     name:"shard1", 
  4.     maxsize:2048, 
  5.     allowLocal:true } ); 
  6.  
  7. db.runCommand( { 
  8.     addshard : "shard2/10.0.0.11:27018,10.0.0.12:27018,10.0.0.14:27018", 
  9.     name:"shard2", 
  10.     maxsize:2048, 
  11.     allowLocal:true } ); 
  12.  
  13. db.runCommand( { listshards : 1 } ); 


  1. db.runCommand( { enablesharding : "elain" } ); 


要使单个collection也分片存储,需要给collection指定一个分片key,通过以下命令操作:


  1. db.runCommand( { shardcollection : “<namespace>”,key : <shardkeypatternobject}); 


注:
 a. 分片的collection系统会自动创建一个索引(也可用户提前创建好)
 b. 分片的collection只能有一个在分片key上的唯一索引,其它唯一索引不被允许
One note: a sharded collection can have only one unique index, which must exist on the shard key. No other unique indexes can exist on the collection.


  1. mongoimport -d elain -c test --type csv --headerline --file test.csv --host 10.0.0.11:30000 


分片collection例子


  1. db.runCommand( { shardcollection : "elain.test",key : {id: 1} } ) 
  2. mongos> db.chujq.t1.stats(); 
  3.         "sharded" : true, 
  4.         "flags" : 1, 
  5.         "ns" : "elain.test", 
  6.         "count" : 4058977, 
  7.         "numExtents" : 34, 
  8.         "size" : 675039816, 
  9.         "storageSize" : 818757632, 
  10.         "totalIndexSize" : 131854352, 
  11.         "indexSizes" : { 
  12.                 "_id_" : 131854352 
  13.         }, 
  14.         "avgObjSize" : 166.30786919955446, 
  15.         "nindexes" : 1, 
  16.         "nchunks" : 14, 
  17.         "shards" : { 
  18.                 "shard1" : { 
  19.                         "ns" : "elain.test", 
  20.                         "count" : 1860365, 
  21.                         "size" : 309376352, 
  22.                         "avgObjSize" : 166.29873815084673, 
  23.                         "storageSize" : 408920064, 
  24.                         "numExtents" : 16, 
  25.                         "nindexes" : 1, 
  26.                         "lastExtentSize" : 77955072, 
  27.                         "paddingFactor" : 1, 
  28.                         "flags" : 1, 
  29.                         "totalIndexSize" : 60371584, 
  30.                         "indexSizes" : { 
  31.                                 "_id_" : 60371584 
  32.                         }, 
  33.                         "ok" : 1 
  34.                 }, 
  35.                 "shard2" : { 
  36.                         "ns" : "elain.test", 
  37.                         "count" : 2198612, 
  38.                         "size" : 365663464, 
  39.                         "avgObjSize" : 166.31559547569103, 
  40.                         "storageSize" : 409837568, 
  41.                         "numExtents" : 18, 
  42.                         "nindexes" : 1, 
  43.                         "lastExtentSize" : 74846208, 
  44.                         "paddingFactor" : 1, 
  45.                         "flags" : 1, 
  46.                         "totalIndexSize" : 71482768, 
  47.                         "indexSizes" : { 
  48.                                 "_id_" : 71482768 
  49.                         }, 
  50.                         "ok" : 1 
  51.                 } 
  52.         }, 
  53.         "ok" : 1 


删除片操作


  1. mongos> db.runCommand({"removeshard" : "10.0.0.11:27018"}); 
  2.         "msg" : "draining started successfully", 
  3.         "state" : "started", 
  4.         "shard" : "shard2", 
  5.         "ok" : 1 


再执行,可看到removeshard的挪动进度


  1. mongos> db.runCommand({"removeshard" : "10.0.0.11:27018"}); 
  2.         "msg" : "draining ongoing", 
  3.         "state" : "ongoing", 
  4.         "remaining" : { 
  5.                 "chunks" : NumberLong(3), 
  6.                 "dbs" : NumberLong(0) 
  7.         }, 
  8.         "ok" : 1 


例:


  1. /elain/apps/mongodb/bin/mongod --config /elain/data/mongodb/shard1/shard1.properties --rest 


 

本文出自 “​​elain的技术博客​​​” 博客,请务必保留此出处​​http://elain.blog.51cto.com/3339379/765956​