MongoDB實戰系列之五:mongodb的分片配置

jopen 12年前發布 | 18K 次閱讀 MongoDB NoSQL數據庫

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:</p>

mkdir  -p  /elain /data /mongodb /shard11
mkdir  -p  /elain /data /mongodb /shard21
/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
/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:

mkdir  -p  /elain /data /mongodb /shard12 /
mkdir  -p  /elain /data /mongodb /shard22 /
/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
/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:

mkdir  -p  /elain /data /mongodb /shard13 /
mkdir  -p  /elain /data /mongodb /shard23 /
/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
/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


3、初始化Replica Set
通過命令行初始化兩組Replica Set,通過mongo連接到一個mongod

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

rs.initiate (config );

/elain /apps /mongodb /bin /mongo 10.0.0.11: 27018

config =  {_id:  '' '' '' ''shard2 '' '' '' '', members:  [
{_id:  0, host:  '' '' '' ''10.0.0.11: 27018 '' '' '' '' },
{_id:  1, host:  '' '' '' ''10.0.0.12: 27018 '' '' '' '' },
{_id:  2, host:  '' '' '' ''10.0.0.14: 27018 '' '' '' '' } ] };

rs.initiate (config );

4、啟動并配置三臺Config Server

#Server1、2、3:

mkdir  -p  /elain /data /mongodb /config /
/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:

/elain /apps /mongodb /bin /mongos  --configdb10.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

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

db.runCommand (  {
addshard :  "shard1/10.0.0.11:27017,10.0.0.12:27017,10.0.0.14:27017",
name: "shard1",
maxsize: 2048,
allowLocal:true  }  );

db.runCommand (  {
addshard :  "shard2/10.0.0.11:27018,10.0.0.12:27018,10.0.0.14:27018",
name: "shard2",
maxsize: 2048,
allowLocal:true  }  );

db.runCommand (  { listshards :  1  }  );

如果列出(sharding)了以上二個你加的shards,表示shards已經配置成功

#激活數據庫分片

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

要使單個collection也分片存儲,需要給collection指定一個分片key,通過以下命令操作:

db.runCommand (  { shardcollection : “”,key : db.chujq.t1.stats ( );
{
"sharded" :  true,
"flags" :  1,
"ns" :  "elain.test",
"count" :  4058977,
"numExtents" :  34,
"size" :  675039816,
"storageSize" :  818757632,
"totalIndexSize" :  131854352,
"indexSizes" :  {
"_id_" :  131854352
},
"avgObjSize" :  166.30786919955446,
"nindexes" :  1,
"nchunks" :  14,
"shards" :  {
"shard1" :  {
"ns" :  "elain.test",
"count" :  1860365,
"size" :  309376352,
"avgObjSize" :  166.29873815084673,
"storageSize" :  408920064,
"numExtents" :  16,
"nindexes" :  1,
"lastExtentSize" :  77955072,
"paddingFactor" :  1,
"flags" :  1,
"totalIndexSize" :  60371584,
"indexSizes" :  {
"_id_" :  60371584
},
"ok" :  1
},
"shard2" :  {
"ns" :  "elain.test",
"count" :  2198612,
"size" :  365663464,
"avgObjSize" :  166.31559547569103,
"storageSize" :  409837568,
"numExtents" :  18,
"nindexes" :  1,
"lastExtentSize" :  74846208,
"paddingFactor" :  1,
"flags" :  1,
"totalIndexSize" :  71482768,
"indexSizes" :  {
"_id_" :  71482768
},
"ok" :  1
}
},
"ok" :  1
}

刪除片操作

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

再執行,可看到removeshard的挪動進度

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

例:

/elain /apps /mongodb /bin /mongod  --config /elain /data /mongodb /shard1 /shard1.properties  --rest
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!