5rfgn 发表于 2014-3-27 09:25:47

Mongo集群部署(Replica Sets+Sharding)

一、环境
MongoDB Sharding Cluster 包含三种角色:Shard Server: mongod 实例,用于存储实际的数据块,数据层Config Server: mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息,配置层Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一进程 数据库,路由层。


10.14.2.20110.14.2.20210.14.2.20310.14.2.204
Shard1Shard2Shard3Shard1
Shard2Shard1Shard2Shard3
Shard3Shard3Shard1Shard2

1.节点:S1: 10.14.2.201, 10.14.2.202, 10.14.2.203, 10.14.2.204 (arbiter)
S2: 10.14.2.201, 10.14.2.202, 10.14.2.203 (arbiter), 10.14.2.204
S3: 10.14.2.201, 10.14.2.202(arbiter), 10.14.2.203, 10.14.2.204

主机端口信息
10.14.2.201mongod shard1:27017mongod shard2:27018mongod shard3:27019mongod config:30000mongs:40000
10.14.2.202mongod shard1:27017mongod shard2:27018mongod shard3:27019mongod config:30000mongs:40000
10.14.2.203mongod shard1:27017mongod shard2:27018mongod shard3:27019mongod config:30000mongs:40000
10.14.2.204mongod shard1:27017mongod shard2:27018mongod shard3:27019mongod config:30000mongs:40000


二、安装部署在所有机器上运行1、下载mongodb程序    mongodb-linux-x86_64-2.4.4.tgz2、解压mongodb-linux-x86_64-2.4.4.tgz到/export/ 目录下tar -xvf mongodb-linux-x86_64-2.4.4.tgz-C/usr/local/3、建立软连接   cd /usr/local/   ln -s mongodb-linux-x86_64-2.4.4mongodb
4、配置环境变量vim /etc/profile添加 #mongodbexport PATH=/usr/local/mongodb/bin:$PATH
source /etc/profile
5、创建目录mkdir -p /export/mongodb/data/shard1mkdir -p /export/mongodb/data/shard2mkdir -p /export/mongodb/data/shard3mkdir -p /export/mongodb/data/configmkdir -p /export/mongodb/logs/shard1mkdir -p /export/mongodb/logs/shard2mkdir -p /export/mongodb/logs/shard3mkdir -p /export/mongodb/logs/configmkdir -p /export/mongodb/logs/mongos
6、在10.14.2.201(任意一台都可以) 生成keyfile文件openssl rand -base64 753 > /export/mongodb/keyfile
7、把keyfile文件传输到其他机器上scp /export/mongodb/keyfile 10.14.2.202:/export/mongodb/scp /export/mongodb/keyfile 10.14.2.203:/export/mongodb/scp /export/mongodb/keyfile 10.14.2.204:/export/mongodb/
8、在每台机器上执行 修改keyfile权限chmod 600 /export/mongodb/keyfile
配置Replica Sets,Config Server
9、在每台机器上执行/usr/local/mongodb/bin/mongod --fork --shardsvr--port 27017 --dbpath /export/mongodb/data/shard1/ --logpath /export/mongodb/logs/shard1/log.log --logappend --replSet s1 --auth --rest--keyFile    /export/mongodb/keyfile/usr/local/mongodb/bin/mongod --fork --shardsvr--port 27018 --dbpath /export/mongodb/data/shard2/ --logpath /export/mongodb/logs/shard2/log.log --logappend --replSet s2 --auth--rest   --keyFile   /export/mongodb/keyfile/usr/local/mongodb/bin/mongod --fork --shardsvr--port 27019 --dbpath /export/mongodb/data/shard3/ --logpath /export/mongodb/logs/shard3/log.log --logappend --replSet s3 --auth--rest   --keyFile    /export/mongodb/keyfile/usr/local/mongodb/bin/mongod --fork --configsvr --port 30000 --dbpath /export/mongodb/data/config/ --logpath /export/mongodb/logs/config/log.log --logappend --auth --rest   --keyFile    /export/mongodb/keyfile
10、在10.14.2.201上执行

1)查看mongod的进程是否启动ps aux | grep mongodb | grep -v grep
2)初始化replica sets/usr/local/mongodb/bin/mongo --port 27017config = {_id: 's1', members: [
      {_id: 0, host: '10.14.2.201:27017'},
      {_id: 1, host: '10.14.2.202:27017'},      {_id: 2, host: '10.14.2.203:27017'},
      {_id: 3, host: '10.14.2.204:27017', arbiterOnly: true}
    ]}
    rs.initiate(config)
    rs.status()
11、在10.14.2.202上执行
1)查看mongod的进程是否启动ps aux | grep mongodb | grep -v grep
2)初始化replica sets/usr/local/mongodb/bin/mongo --port27018config = {_id: 's2', members: [
      {_id: 0, host: '10.14.2.201:27018'},
      {_id: 1, host: '10.14.2.202:27018'},      {_id: 2, host: '10.14.2.203:27018', arbiterOnly: true },
      {_id: 3, host: '10.14.2.204:27018' }
    ]}
   rs.initiate(config)
   rs.status()
12、在10.14.2.203上执行 1)查看mongod的进程是否启动ps aux | grep mongodb | grep -v grep
2)初始化replica sets/usr/local/mongodb/bin/mongo --port 27019   config = {_id: 's3', members: [
      {_id: 0, host: '10.14.2.201:27019'},
      {_id: 1, host: '10.14.2.202:27019', arbiterOnly: true },      {_id: 2, host: '10.14.2.203:27019' },
      {_id: 3, host: '10.14.2.204:27019' }
    ]}
   rs.initiate(config)
    rs.status()

配置Mongos(在每一台机子上建立路由)13、在每台机器上执行/usr/local/mongodb/bin/mongos --fork --port 40000 --logpath/export/mongodb/logs/mongos/log.log--configdb 10.14.2.201:30000,10.14.2.202:30000,10.14.2.203:30000   --keyFile    /export/mongodb/keyfile 添加分片1连接任意一台,其他无需这样操作:/usr/local/mongodb/bin/mongo --port 40000use admindb.runCommand({addshard:'s1/10.14.2.201:27017,10.14.2.202:27017,10.14.2.203:27017'})db.runCommand({addshard:'s2/10.14.2.201:27018,10.14.2.202:27018,10.14.2.203:27018' })db.runCommand({addshard:'s3/10.14.2.201:27019,10.14.2.203:27019,10.14.2.203:27019' }) db.runCommand({ listshards:1 })

通过执行以下命令,可以让数据库跨shard,如果不执行这步,数据库只会存放在一个shard,一旦激活数据库分片,数据库中不同的collection将被存放在不同的shard上,但一个collection仍旧存放在同一个shard上,要使单个collection也分片,还需单独对collection作些操作db.runCommand({enablesharding:"test"});
要使单个collection也分片存储,需要给collection指定一个分片key,通过以下命令操作db.runCommand( { shardcollection : "test.c1",key : {id: 1},unique : true } ) 创建测试数据use test for(var i=1;i<=200003;i++)db.c1.save({id:i,value1:"1234567890",value2:"1234567890",value3:"1234567890",value4:"1234567890"});
> db.c1.stats()\\查看数据已经分到了s1,s2,s3上{      "sharded" : true,      "ns" : "test.c1",      "count" : 200003,      "numExtents" : 14,      "size" : 25600384,      "storageSize" : 40599552,      "totalIndexSize" : 12182240,      "indexSizes" : {            "_id_" : 6540800,            "id_1" : 5641440      },      "avgObjSize" : 128,      "nindexes" : 2,      "nchunks" : 4,      "shards" : {            "s1" : {                  "ns" : "test.c1",                  "count" : 194287,                  "size" : 24868736,                  "avgObjSize" : 128,                  "storageSize" : 37797888,                  "numExtents" : 8,                  "nindexes" : 2,                  "lastExtentSize" : 15290368,                  "paddingFactor" : 1,                  "systemFlags" : 1,                  "userFlags" : 0,                  "totalIndexSize" : 11781616,                  "indexSizes" : {                     "_id_" : 6328224,                     "id_1" : 5453392                  },                  "ok" : 1            },            "s2" : {                  "ns" : "test.c1",                  "count" : 0,                  "size" : 0,                  "storageSize" : 8192,                  "numExtents" : 1,                  "nindexes" : 2,                  "lastExtentSize" : 8192,                  "paddingFactor" : 1,                  "systemFlags" : 1,                  "userFlags" : 0,                  "totalIndexSize" : 16352,                  "indexSizes" : {                     "_id_" : 8176,                     "id_1" : 8176                  },                  "ok" : 1            },            "s3" : {                  "ns" : "test.c1",                  "count" : 5716,                  "size" : 731648,                  "avgObjSize" : 128,                  "storageSize" : 2793472,                  "numExtents" : 5,                  "nindexes" : 2,                  "lastExtentSize" : 2097152,                  "paddingFactor" : 1,                  "systemFlags" : 1,                  "userFlags" : 0,                  "totalIndexSize" : 384272,                  "indexSizes" : {                     "_id_" : 204400,                     "id_1" : 179872                  },                  "ok" : 1            }      },      "ok" : 1}
页: [1]
查看完整版本: Mongo集群部署(Replica Sets+Sharding)