Mongodb集群分片
一、简介
1、 MongoDB 是一个高性能,开源,无模式的文档型数据库,是当前NoSQL 数据库产品中最热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式,MongoDB使用C++开发。2、 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json 的bjson 格式,因此可以存储比较复杂的数据类型。MongoDB 最大的特点是他支持的查询语言非 常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查 询的绝大部分功能,而且还支持对数据建立索引。它是一个面向集合的,模式自由的文 档型数据库。
二、部署介绍与部署目的
1、本次部署是在一台服务器上实现,下面用分组来表示,如果在多台上部署只需要修 改ip和端口就可以。
2、部署主要实现的功能是实现分片、复制集,主备可以在宕机之后自动切换,实现高 可用。
分组 |
服务端口号 |
第一组 |
mongod shard1_1:27017 mongod shard1_1:27018 mongod shard1_3:27019 mongod config:20000 mongs:30000 |
第二组 |
mongod shard2_1:27020 mongod shard2_2:27021 mongod shard2_3:27022 mongod config:20010 mongs:30010 |
第三组 |
mongod shard3_1:27023 mongod shard3_2:27024 mongod shard3_3:27025 mongod config:20020 mongs:30020 |
三、安装部署
1、创建第一组数据库储存路径
# mkdir -p /data/shard1_1
# mkdir -p /data/shard1_2
# mkdir -p /data/shard1_3
# mkdir -p /data/config
2、开启mongod进程,指定端口、路径、声明这是一个集群的分片、副本集名称;
# ./mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data/shard1_1 --logpath /data/mongodb.log --logappend --fork# ./mongod --shardsvr --replSet shard1 --port 27018 --dbpath /data/shard1_2 --logpath /data/mongodb.log --logappend --fork
# ./mongod --shardsvr --replSet shard1 --port 27019 --dbpath /data/shard1_3 --logpath /data/mongodb.log --logappend --fork
3、 创建第二组数据储存路径
# mkdir -p /data/shard2_1
# mkdir -p /data/shard2_2
# mkdir -p /data/shard2_3
# mkdir -p /data/config_1
4、开启mongod进程,指定端口、路径、声明这是一个集群的分片、副本集名称;
# ./mongod --shardsvr --replSet shard2 --port 27020 --dbpath /data/shard2_1 --logpath /data/mongodb.log --logappend --fork
# ./mongod --shardsvr --replSet shard2 --port 27021 --dbpath /data/shard2_2 --logpath /data/mongodb.log --logappend --fork
# ./mongod --shardsvr --replSet shard2 --port 27022 --dbpath /data/shard2_3 --logpath /data/mongodb.log --logappend ?fork
5、 创建第二组数据储存路径
# mkdir -p /data/shard3_1
# mkdir -p /data/shard3_2
# mkdir -p /data/shard3_3
# mkdir -p /data/config_2
6、 开启mongod进程,指定端口、路径、声明这是一个集群的分片、副本集名称;
# ./mongod --shardsvr --replSet shard3 --port 27023 --dbpath /data/shard3_1 --logpath /data/mongodb.log --logappend --fork
# ./mongod --shardsvr --replSet shard3 --port 27024 --dbpath /data/shard3_2 --logpath /data/mongodb.log --logappend --fork
# ./mongod --shardsvr --replSet shard3 --port 27025 --dbpath /data/shard3_3 --logpath /data/mongodb.log --logappend --fork
7、第一组;进入数据库定义config server组;
[root@test1 bin]# ./mongo --port 27017 MongoDB shell version: 2.0.0connecting to: 127.0.0.1:27017/test
> cOnfig= {_id: 'shard1', members: [
... ... {_id: 0, host: '127.0.0.1:27017'},
... ... {_id: 1, host: '127.0.0.1:27018'},
... ... {_id: 2, host: '127.0.0.1:27019'}]
... ... };
{
"_id" : "shard1",
"members" : [
{
"_id" : 0,
"host" : "127.0.0.1:27017"
},
{
"_id" : 1,
"host" : "127.0.0.1:27018"
},
{
"_id" : 2,
"host" : "127.0.0.1:27019"
}
]
}
> rs.initiate(config)
{
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}
>
8、第二组;进入数据库定义config server组;
[root@test1 bin]# ./mongo --port 27020
MongoDB shell version: 2.0.0
connecting to: 127.0.0.1:27020/test
> cOnfig= {_id: 'shard2', members: [
... ... ... {_id: 0, host: '127.0.0.1:27020'},
... ... ... {_id: 1, host: '127.0.0.1:27021'},
... ... ... {_id: 2, host: '127.0.0.1:27022'}]
... ... ... };
{
"_id" : "shard2",
"members" : [
{
"_id" : 0,
"host" : "127.0.0.1:27020"
},
{
"_id" : 1,
"host" : "127.0.0.1:27021"
},
{
"_id" : 2,
"host" : "127.0.0.1:27022"
}
]
}
> rs.initiate(config)
{
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}
>
9、第三组;进入数据库定义config server组;
[root@test1 bin]# ./mongo --port 27025
MongoDB shell version: 2.0.0
connecting to: 127.0.0.1:27025/test
> cOnfig= {_id: 'shard3', members: [
... ... ... {_id: 0, host: '127.0.0.1:27023'},
... ... ... {_id: 1, host: '127.0.0.1:27024'},
... ... ... {_id: 2, host: '127.0.0.1:27025'}]
... ... ... };
{
"_id" : "shard3",
"members" : [
{
"_id" : 0,
"host" : "127.0.0.1:27023"
},
{
"_id" : 1,
"host" : "127.0.0.1:27024"
},
{
"_id" : 2,
"host" : "127.0.0.1:27025"
}
]
}
> rs.initiate(config)
{
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}
>
10、第一组;声明一个集群的config server,指定端口号;开启mongos进程,启动route server,指定数据分块大小;
# ./mongod --configsvr --dbpath /data/config --port 20000 --logpath /data/config.log --logappend --fork
# ./mongos --configdb 127.0.0.1:20000,127.0.0.1:20010,127.0.0.1:20020 --port 30000 --chunkSize 1 --logpath /data/mongos.log --logappend ?fork
11、第二组;声明一个集群的config server,指定端口号;开启mongos进程,启动route server,指定数据分块大小;
# ./mongod --configsvr --dbpath /data/config_1 --port 20010 --logpath /data/config.log --logappend --fork
# ./mongos --configdb 127.0.0.1:20000,127.0.0.1:20010,127.0.0.1:20020 --port 30010 --chunkSize 1 --logpath /data/mongos.log --logappend ?fork
12、第三组;声明一个集群的config server,指定端口号;开启mongos进程,启动route server,指定数据分块大小;
# ./mongod --configsvr --dbpath /data/config_2 --port 20020 --logpath /data/config.log --logappend --fork
# ./mongos --configdb 127.0.0.1:20000,127.0.0.1:20010,127.0.0.1:20020 --port 30020 --chunkSize 1 --logpath /data/mongos.log --logappend ?fork
13、添加shard server;设置分片储存数据库;设置分片的集合名称,且必须指定Shard Key,系统会自动创建索引;
[root@test1 bin]# ./mongo --port 30000
MongoDB shell version: 2.0.0
connecting to: 127.0.0.1:30000/test
mongos> use admin
switched to db admin
mongos> db.runCommand({addshard:"shard1/127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019"});
{ "shardAdded" : "shard1", "ok" : 1 }
mongos> db.runCommand({addshard:"shard2/127.0.0.1:27020,127.0.0.1:27021,127.0.0.1:27022"});
{ "shardAdded" : "shard2", "ok" : 1 }
mongos> db.runCommand({addshard:"shard3/127.0.0.1:27023,127.0.0.1:27024,127.0.0.1:27025"});
{ "shardAdded" : "shard3", "ok" : 1 }
mongos> db.runCommand({ enablesharding:"test" })
{ "ok" : 1 }
mongos> db.runCommand({ shardcollection: "test.users", key: { _id:1 }})
{ "collectionsharded" : "test.users", "ok" : 1 }
mongos>
------------------------------测试-----------------------
1、随便连接到其中一台上的 mongos 进程(这里是30000、30010、30020三个端口)#
2、进入test库中
3、添加数据
4、查看数据库状态
5、以下可以看出数据分别放在了不同的3组中
6、查看数据库存放的目录可以看出每个数据库组都有数据
[root@test1 bin]# ./mongo --port 30010
MongoDB shell version: 2.0.0
connecting to: 127.0.0.1:30010/test
mongos> use test
switched to db test
mongos> for (var i = 1; i <= 500000; i++) db.users.insert({age:i,name:"qinshou",addr:"Beijing",country:"China"})
mongos> db.users.stats()
{
"sharded" : true,
"flags" : 1,
"ns" : "test.users",
"count" : 200000,
"numExtents" : 17,
"size" : 15200076,
"storageSize" : 25157632,
"totalIndexSize" : 6532624,
"indexSizes" : {
"_id_" : 6532624
},
"avgObjSize" : 76.00038,
"nindexes" : 1,
"nchunks" : 15,
"shards" : {
"shard1" : {
"ns" : "test.users",
"count" : 82398,
"size" : 6262280,
"avgObjSize" : 76.00038835894075,
"storageSize" : 11182080,
"numExtents" : 6,
"nindexes" : 1,
"lastExtentSize" : 8388608,
"paddingFactor" : 1,
"flags" : 1,
"totalIndexSize" : 2689904,
"indexSizes" : {
"_id_" : 2689904
},
"ok" : 1
},
"shard2" : {
"ns" : "test.users",
"count" : 15780,
"size" : 1199292,
"avgObjSize" : 76.00076045627377,
"storageSize" : 2793472,
"numExtents" : 5,
"nindexes" : 1,
"lastExtentSize" : 2097152,
"paddingFactor" : 1,
"flags" : 1,
"totalIndexSize" : 523264,
"indexSizes" : {
"_id_" : 523264
},
"ok" : 1
},
"shard3" : {
"ns" : "test.users",
"count" : 101822,
"size" : 7738504,
"avgObjSize" : 76.000314273929,
"storageSize" : 11182080,
"numExtents" : 6,
"nindexes" : 1,
"lastExtentSize" : 8388608,
"paddingFactor" : 1,
"flags" : 1,
"totalIndexSize" : 3319456,
"indexSizes" : {
"_id_" : 3319456
},
"ok" : 1
}
},
"ok" : 1
}
mongos>
[root@test1 data]# ll
total 1076
drwxr-xr-x 4 root root 4096 Jul 11 10:31 config
drwxr-xr-x 4 root root 4096 Jul 11 10:31 config_1
drwxr-xr-x 4 root root 4096 Jul 11 10:31 config_2
-rw-r--r-- 1 root root 653298 Jul 11 11:22 config.log
drwxr-xr-x 3 root root 4096 Oct 9 2011 db
-rw-r--r-- 1 root root 154454 Jul 11 11:22 mongodb.log
-rw-r--r-- 1 root root 236269 Jul 11 11:22 mongos.log
drwxr-xr-x 4 root root 4096 Jul 11 10:42 shard1_1
drwxr-xr-x 3 root root 4096 Jul 11 10:40 shard1_2
drwxr-xr-x 4 root root 4096 Jul 11 10:42 shard2_1
drwxr-xr-x 3 root root 4096 Jul 11 10:42 shard2_2
drwxr-xr-x 4 root root 4096 Jul 11 10:42 shard3_1
drwxr-xr-x 3 root root 4096 Jul 11 10:42 shard3_2
到此!搭建完成!!!有疑问请参考《mongodb实践》《mongodb手册》