分类目录归档:mongodb

mongodb的分片配置

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
3、初始化Replica Set

通过命令行初始化两组Replica Set,通过mongo连接到一个mongod
  1. /elain/apps/mongodb/bin/mongo 10.0.0.11:27017
  2. config = {_id: 'shard1', members: [
  3.     {_id: 0, host: '10.0.0.11:27017'},
  4.     {_id: 1, host: '10.0.0.12:27017'},
  5.     {_id: 2, host: '10.0.0.14:27017'}]};
  1. rs.initiate(config);
  2. /elain/apps/mongodb/bin/mongo 10.0.0.11:27018
  3. config = {_id: 'shard2', members: [
  4.     {_id: 0, host: '10.0.0.11:27018'},
  5.     {_id: 1, host: '10.0.0.12:27018'},
  6.     {_id: 2, host: '10.0.0.14:27018'}]};
  7. 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. db.runCommand( {
  7.     addshard : "shard2/10.0.0.11:27018,10.0.0.12:27018,10.0.0.14:27018",
  8.     name:"shard2",
  9.     maxsize:2048,
  10.     allowLocal:true } );
  11. db.runCommand( { listshards : 1 } );
如果列出(sharding)了以上二个你加的shards,表示shards已经配置成功

#激活数据库分片
  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. {
  4.         "sharded" : true,
  5.         "flags" : 1,
  6.         "ns" : "elain.test",
  7.         "count" : 4058977,
  8.         "numExtents" : 34,
  9.         "size" : 675039816,
  10.         "storageSize" : 818757632,
  11.         "totalIndexSize" : 131854352,
  12.         "indexSizes" : {
  13.                 "_id_" : 131854352
  14.         },
  15.         "avgObjSize" : 166.30786919955446,
  16.         "nindexes" : 1,
  17.         "nchunks" : 14,
  18.         "shards" : {
  19.                 "shard1" : {
  20.                         "ns" : "elain.test",
  21.                         "count" : 1860365,
  22.                         "size" : 309376352,
  23.                         "avgObjSize" : 166.29873815084673,
  24.                         "storageSize" : 408920064,
  25.                         "numExtents" : 16,
  26.                         "nindexes" : 1,
  27.                         "lastExtentSize" : 77955072,
  28.                         "paddingFactor" : 1,
  29.                         "flags" : 1,
  30.                         "totalIndexSize" : 60371584,
  31.                         "indexSizes" : {
  32.                                 "_id_" : 60371584
  33.                         },
  34.                         "ok" : 1
  35.                 },
  36.                 "shard2" : {
  37.                         "ns" : "elain.test",
  38.                         "count" : 2198612,
  39.                         "size" : 365663464,
  40.                         "avgObjSize" : 166.31559547569103,
  41.                         "storageSize" : 409837568,
  42.                         "numExtents" : 18,
  43.                         "nindexes" : 1,
  44.                         "lastExtentSize" : 74846208,
  45.                         "paddingFactor" : 1,
  46.                         "flags" : 1,
  47.                         "totalIndexSize" : 71482768,
  48.                         "indexSizes" : {
  49.                                 "_id_" : 71482768
  50.                         },
  51.                         "ok" : 1
  52.                 }
  53.         },
  54.         "ok" : 1
  55. }

删除片操作

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

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

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

例:

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

 

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

 

mongodb副本集部署

简述:副本集合(Replica Sets),是一个基于主/从复制机制的复制功能,但增加了自动故障转移和恢复特性。一个集群最多可以支持7个服务器,并且任意节点都可以是主节点。所有的写操作都被分发到主节点,而读操作可以在任何节点上进行。

环境:CentOS 5.5 x64

md01           10.0.0.11
md02           10.0.0.12
md03           10.0.0.14

把以上主机名对应IP 添加到hosts文件

方法一:设置优先级

启动各节点:
md01

  1. /elain/apps/mongodb/bin/mongod --rest --replSet elain/md01:27017 --master --fork --port 27017 --dbpath /elain/data/mongodb/db/ --logpath /elain/logs/mongodb/mongodb.log
  2. md02
  3. /elain/apps/mongodb/bin/mongod --rest --replSet elain/md02:27017  --fork --port 27017 --dbpath /elain/data/mongodb/db/ --logpath /elain/logs/mongodb/mongodb.log
  4. md03
  5. /elain/apps/mongodb/bin/mongod --rest --replSet elain/md03:27017  --fork --port 27017 --dbpath /elain/data/mongodb/db/ --logpath /elain/logs/mongodb/mongodb.log

初始化节点:
md01:(登录其中任何一个节点操作皆可)

  1. mongo --port 27017
  2. > rs.initiate({
  3.     _id : "elain",
  4.     members : [
  5.     {_id : 1, host : "md01:27017", priority:2},
  6.     {_id : 2, host : "md02:27017", priority:3},
  7.     {_id : 3, host : "md03:27017", priority:4},
  8.     ]
  9.     });
#priority 是设置优先级的,默认优先级为1,可以是1-1000的数字
注:通常在同一个交换机上,同一个网内,通常使用优先级来设置 副本集就已经足够使用了

方法二:添加仲裁节点(这里设置在md02):

启动各节点:
md01
  1. /elain/apps/mongodb/bin/mongod --rest --replSet elain/md01:27017 --fork --port 27017 --dbpath /elain/data/mongodb/db/ --logpath /elain/logs/mongodb/mongodb.log
  2. md02
  3. /elain/apps/mongodb/bin/mongod --rest --replSet elain/md02:27017 --fork --port 27017 --dbpath /elain/data/mongodb/db/ --logpath /elain/logs/mongodb/mongodb.log
  4. md03
  5. /elain/apps/mongodb/bin/mongod --rest --replSet elain/md03:27017 --fork --port 27017 --dbpath /elain/data/mongodb/db/ --logpath /elain/logs/mongodb/mongodb.log

#启动仲裁节点
在md02上

  1. mkdir /elain/data/mongodb/arb
  2. /elain/apps/mongodb/bin/mongod --fork --rest --replSet elain --dbpath /elain/data/mongodb/arb --port 27015 --logpath /elain/logs/mongodb/mongodb.log

初始化节点:
md01:(登录其中任何一个节点操作皆可)

  1. > rs.initiate({
  2.     _id : "elain",
  3.     members : [
  4.     {_id : 1, host : "md01:27017"},
  5.     {_id : 2, host : "md02:27017"},
  6.     {_id : 3, host : "md03:27017"},
  7.     {_id : 4, host : "md02:27015", "arbiterOnly": true},
  8.     ]
  9.     });
#验证
  1. PRIMARY> rs.status()
也可浏览:http://10.0.0.11:28017/_replSet  查看状态
#设置从库可读(从库上执行)
  1. >rs.slaveOk();
查看副本集状态
  1. >rs.status()
  2. >user local;
  3. >rs.isMaster()
  4. >db.system.replset.find()
查看当前主库:
  1. >db.$cmd.findOne({ismaster:1});

 

转载请注明: 转载自http://www.elain.org

本文链接地址:MongoDB实战系列之四:mongodb副本集部署

 

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