一、 部署环境、
1. 结构图
2. 节点分配
一共使用了三个节点
Sg206(172.16.48.206 root/201314) : shard11、shard32、config、mongos
Sg207(172.16.48.207 root/201314) : shard21、shard12、config、mongos
Sg208(172.16.48.208 root/201314) : shard31、shard22、config、mongos
3. 配置目录
安装文件:/home/mongodb-linux-x86_64-2.4.1
安装目录:
sg206: /home/mongodb-data/shard11 #数据目录
/home/mongodb-data/shard32 #数据目录
/home/mongodb-data/conf #config数据目录
Sg207: /home/mongodb-data/shard21 #数据目录
/home/mongodb-data/shard12 #数据目录
/home/mongodb-data/conf #config数据目录
Sg208: /home/mongodb-data/shard31 #数据目录
/home/mongodb-data/shard22 #数据目录
/home/mongodb-data/conf #config数据目录
二、 部署流程
1. 创建数据目录
Sg206:
mkdir -p /home/mongodb-data/shard11
mkdir -p /home/mongodb-data/shard32
mkdir -p /home/mongodb-data/conf
mkdir -p /home/mongodb-data/shard23
sg207:
mkdir -p /home/mongodb-data/shard21
mkdir -p /home/mongodb-data/shard12
mkdir -p /home/mongodb-data/conf
mkdir -p /home/mongodb-data/shard33
sg208:
mkdir -p /home/mongodb-data/shard31
mkdir -p /home/mongodb-data/shard22
mkdir -p /home/mongodb-data/conf
mkdir -p /home/mongodb-data/shard13
2. 配置shard1所用到的replica sets
Sg206:
cd /home/mongodb-linux-x86_64-2.4.1
bin/mongod -shardsvr -replSet shard1 -port 27017 -dbpath /home/mongodb-data/shard11 -oplogSize 50000 -maxConns 600 -logpath=/home/mongodb-data/shar11.log -logappend -fork
sg207:
cd /home/mongodb-linux-x86_64-2.4.1
bin/mongod -shardsvr -replSet shard1 -port 27017 -dbpath /home/mongodb-data/shard12 -oplogSize 50000 -maxConns 600 -logpath=/home/mongodb-data/shar12.log -logappend -fork
sg208:
cd /home/mongodb-linux-x86_64-2.4.1
bin/mongod -shardsvr -replSet shard1 -port 27017 -dbpath /home/mongodb-data/shard13 -maxConns 600 -logpath=/home/mongodb-data/shar13.log -logappend -fork
初始化replica set:
用mongo连接其中一个mongod执行:
>config={_id:'shard1',members:[
{_id:0,host:'172.16.48.206:27017',priority:2},
{_id:1,host:'172.16.48.207:27017',priority:1},
{_id:2,host:'172.16.48.208:27017',arbiterOnly:true }]
}
>rs.initiate(config);
3. 配置shard2所用到的replica sets
Sg207:
cd /home/mongodb-linux-x86_64-2.4.1
bin/mongod -shardsvr -replSet shard2 -port 27018 -dbpath /home/mongodb-data/shard21 -oplogSize 50000 -maxConns 600 -logpath=/home/mongodb-data/shar21.log -logappend -fork
sg208:
cd /home/mongodb-linux-x86_64-2.4.1
bin/mongod -shardsvr -replSet shard2 -port 27018 -dbpath /home/mongodb-data/shard22 -oplogSize 50000 -maxConns 600 -logpath=/home/mongodb-data/shar22.log -logappend -fork
sg206:
cd /home/mongodb-linux-x86_64-2.4.1
bin/mongod -shardsvr -replSet shard2 -port 27018 -dbpath /home/mongodb-data/shard23 -maxConns 600 -logpath=/home/mongodb-data/shar23.log -logappend -fork
初始化replica set:
用mongo连接其中一个mongod执行:
>config={_id:'shard2',members:[
{_id:0,host:'172.16.48.207:27018' ,priority:2},
{_id:1,host:'172.16.48.208:27018',priority:1},
{_id:2,host:'172.16.48.206:27018',arbiterOnly:true }]
}
>rs.initiate(config);
4. 配置shard3所用到的replica sets
Sg208:
cd /home/mongodb-linux-x86_64-2.4.1
bin/mongod -shardsvr -replSet shard3 -port 27019 -dbpath /home/mongodb-data/shard31 -oplogSize 50000 -maxConns 600 -logpath=/home/mongodb-data/shar31.log -logappend -fork
sg206:
cd /home/mongodb-linux-x86_64-2.4.1
bin/mongod -shardsvr -replSet shard3 -port 27019 -dbpath /home/mongodb-data/shard32 -oplogSize 50000 -maxConns 600 -logpath=/home/mongodb-data/shar32.log -logappend -fork
sg207:
cd /home/mongodb-linux-x86_64-2.4.1
bin/mongod -shardsvr -replSet shard3 -port 27019 -dbpath /home/mongodb-data/shard33 -maxConns 600 -logpath=/home/mongodb-data/shar33.log -logappend -fork
初始化replica set:
用mongo连接其中一个mongod执行:
>config={_id:'shard3',members:[
{_id:0,host:'172.16.48.208:27019' ,priority:2},
{_id:1,host:'172.16.48.206:27019',priority:1},
{_id:2,host:'172.16.48.207:27019',arbiterOnly:true }]
}
>rs.initiate(config);
5. 配置三台config server
在sg206,sg207,sg208上分别执行:
bin/mongod -configsvr -dbpath=/home/mongodb-data/conf -port 20000 -logpath=/home/mongodb-data/config.log -logappend -fork
6. 配置mongos
在sg206,sg207,sg208上分别执行:
bin/mongos -configdb 172.16.48.206:20000,172.16.48.207:20000,172.16.48.208:20000 -port 30000 -chunkSize 256 -logpath=/home/mongodb-data/mongos.log -logappend -fork
7. Configuring the shard cluster
连接到其中一个mongos进程,并切换到admin数据库做以下配置:
1) 连接到mongos,并切换到admin
bin/mongo 172.16.48.206:30000/admin
>db
admin
2) 加入shards
Shard是单台服务器用>db.runCommand({addshard:”<serverhostname>[:<port>]”})这样的命令加入,如果shard是replica sets用replicaSetName/<serverhostname>[:port][,serverhostname2[:port],…]这样的格式表示。
这里我们执行如下命令:
>db.runCommand({addshard:"shard1/172.16.48.206:27017,172.16.48.207:27017",name:"shard1",maxsize:204800});
>db.runCommand({addshard:"shard2/172.16.48.207:27018,172.16.48.208:27018",name:"shard2",maxsize:204800});
>db.runCommand({addshard:"shard3/172.16.48.208:27019,172.16.48.206:27019",name:"shard3",maxsize:204800});
注:name:用于指定每个shard的名字,不指定的话系统将自动分配
maxsize:指定各个shard可使用的最大磁盘空间,单位megabytes
3) Listing shards
>db.runCommand({listshards:1})
如果列出了以上三个你加的shards,表示shard已经配置成功
8. 激活数据库分片
命令:
>db.runCommand({enablesharding:”<dbname>”});
Eg: >db.runCommand({enablesharding:"ycsb"});
通过执行以上命令,可以让数据库跨shard,如果不执行这步,数据库只会存放在一个shard,一旦激活数据库分片,数据库中不同的Collection将被存放在不同的shard上,但一个collection仍旧存放在同一个shard上,要使单个collection也分片,还需单独对collection作些操作。
9. 激活Collection分片
要使单个collection也分片存储,需要给collection一个分片key,通过以下命令操作:
>db.runCommand({shardcollection:”<namespace>”,key:<shardkeypatternobject>});
注:a. 分片的collection系统会自动创建一个索引(最好提前创建好)
b. 分片的collection只能有一个在分片key上的唯一索引,其他唯一索引不被允许。
例子:
>db.runCommand({shardcollection:"ycsb.usertable",key:{_id:1}});
>for (var i=1;i<=200003;i++) db.c1.save({id:i,value1:”1234567890”,value2:”1234567890”,value3:”1234567890”,value4:”1234567890”});
>db.c1.stats()
for (var i = 1; i <= 20000000; i++) db.usertable.save({age:i})