概述
目前有三台主机:
192.168.1.220
192.168.1.221
192.168.1.200
其中:
config server
:220:27000,221:27000,221:27001 (注意,configServer的个数必须是奇数,即1,3,5
)
router
:220
shard server
:220,221,200
mongo版本
:3.2.6
OS
:ubuntu 14.0.4
搭建步骤
首先从官网下载mongo压缩包,解压后得到如下的目录结构
其中*.conf是我自己新建的配置文件,data是数据存放目录,logs是日志目录。
启动configServer
mongoc.conf是configServer的配置文件,内容如下:
logpath=/mnt/mongodb3.2.6/logs/mongoc.log
pidfilepath=/mnt/mongodb3.2.6/mongoc.pid
logappend=true
fork=true
port=27000
dbpath=/mnt/mongodb3.2.6/data/config
configsvr=true
然后用以下命令:
./bin/mongod -f /mnt/mongodb3.2.6/mongoc.conf
查看是否启动成功:
ps -e|grep mongo
看到mongod的进程即表示启动成功。
同样的,我们启动221中的configServer
启动router
启动了三个configServer后,就可以启动了router了,此时,返回到220,配置mongos.conf:
logpath=/mnt/mongodb3.2.6/logs/mongos.log
pidfilepath=/mnt/mongodb3.2.6/mongos.pid
logappend=true
fork=true
port=27010
configdb=192.168.1.220:27000,192.168.1.221:27000,192.168.1.221:27001
然后执行以下命令:
./bin/mongos -f /mnt/mongodb3.2.6/mongos.conf
启动shardServer
分别进入220,221,200 三台机子,执行相同的命令(27100起始shard):
logpath=/mnt/mongodb3.2.6/logs/mongod.log
pidfilepath=/mnt/mongodb3.2.6/mongod.pid
logappend=true
fork=true
port=27100
dbpath=/mnt/mongodb3.2.6/data/shard
shardsvr=true
然后执行命令:
./bin/mongod -f /mnt/mongodb3.2.6/mongod.conf
同样的,对221,200执行相同的操作,这里配置文件我用的也是一样的。
这个时候,我们有了三个shard,分别是220,221,200,端口都是27100,。
此时我们要将这三个shard加入到router中。
接着我们上传一个文件到mongodb中(可选,我的目的是自动创建一个数据表,看客可以自己手动创建):
然后,对fs.files, fs.chunks 两个表进行shard。
此时,我们查看DataIntegratedPlatform.fs时,会发现已经分片了:
上图的“shards”属性。
没有分片的数据表如何保存?
我们在mongos中创建test库,然后创建users表,执行如下操作:
然后查看test.users的状态
- users没有配置shard,所以sharded=false
- 由于没有分片,数据都存放到primary节点(这里是shard0000)
- 此时登录shard0000(192.168.1.220:27100)可以看到数据
此时将users加入shard:
GridFS分片
详细的请看:shard-gridfs-data
常用的就是:
db.runCommand( { shardCollection : "test.fs.chunks" , key : { files_id : 1 , n : 1 } }
对files_id,n 取hash key来分片。