1. 部署一个测试副本集 建立第一个副本集实例,名称为firstset: 1.1 建立副本集而且插入数据以下: /data/example/firstset1 /data/example/firstset2 /data/example/firstset3 建立目录: mkdir -p /data/example/firstset1 /data/example/firstset2 /data/example/firstset3 1.2 在其余终端启动三个mongodb实例,以下: mongod --dbpath /data/example/firstset1 --port 10001 --replSet firstset --oplogSize 700 --rest --fork --logpath /data/example/firstset1/firstset1.log --logappend --nojournal --directoryperdb mongod --dbpath /data/example/firstset2 --port 10002 --replSet firstset --oplogSize 700 --rest --fork --logpath /data/example/firstset2/firstset2.log --logappend --nojournal --directoryperdb mongod --dbpath /data/example/firstset3 --port 10003 --replSet firstset --oplogSize 700 --rest --fork --logpath /data/example/firstset3/firstset3.log --logappend --nojournal --directoryperdb --oplog选项强制每一个mongodb实例操做日志为700M,不使用该参数则默认为分区空间的5%,限制oplog的大小,可使每一个实例启动的快一点。 1.3 链接一个mongodb实例的shell mongo mongo01:10001/admin 若是是运行在生产环境下,或者不一样主机名或IP的机器上,须要修改mongo01为指定名称。 1.4 在mongo shell上初始化副本集 var config = { "_id" : "firstset", "members" : [ {"_id" : 0, "host" : "mongo01:10001"}, {"_id" : 1, "host" : "mongo01:10002"}, {"_id" : 2, "host" : "mongo01:10003"}, ] } rs.initiate(config); { "info" : "Config now saved locally. Should come online in about a minute.", "ok" : 1 } 或 db.runCommand( {"replSetInitiate" : {"_id" : "firstset", "members" : [ {"_id" : 0, "host" : "mongo01:10001"}, {"_id" : 1, "host" : "mongo01:10002"}, {"_id" : 2, "host" : "mongo01:10003"} ] } } ) 1.5 在mongo shell中建立并插入数据: use mydb switched to db mydb animal = ["dog", "tiger", "cat", "lion", "elephant", "bird", "horse", "pig", "rabbit", "cow", "dragon", "snake"]; for(var i=0; i<100000; i++){ name = animal[Math.floor(Math.random()*animal.length)]; user_id = i; boolean = [true, false][Math.floor(Math.random()*2)]; added_at = new Date(); number = Math.floor(Math.random()*10001); db.test_collection.save({"name":name, "user_id":user_id, "boolean": boolean, "added_at":added_at, "number":number }); } 上面的操做会向集合test_collection插入100万条数据,根据系统不一样,可能会花费几分钟的时间。 脚本会加入以下格式的文档: 2. 部署一个分片设施 建立三个配置服务器来保存集群的元数据。 对于开发或者测试环境下,一个配置服务器足够了,在生产环境下,须要三天配置服务器,由于它们只须要占用不多的资源来保存元数据。 2.1 建立配置服务器的数据文件保存目录: /data/example/config1 /data/example/config2 /data/example/config3 建立目录: mkdir -p /data/example/config1 /data/example/config2 /data/example/config3 2.2 在另外的终端下,启动配置服务器: mongod --configsvr --dbpath /data/example/config1 --port 20001 --fork --logpath /data/example/config1/config1.log --logappend mongod --configsvr --dbpath /data/example/config2 --port 20002 --fork --logpath /data/example/config2/config2.log --logappend mongod --configsvr --dbpath /data/example/config3 --port 20003 --fork --logpath /data/example/config3/config3.log --logappend 2.3 在另外的终端下,启动mongos实例: mongos --configdb mongo01:20001,mongo01:20002,mongo01:20003 --port 27017 --chunkSize 1 --fork --logpath /data/example/mongos.log --logappend 若是使用的是之前建立的表或者测试环境下,可使用最小的chunksize(1M),默认chunksize为64M意味着在mongodb自动分片启动前,集群必须拥有64MB的数据文件。 在生产环境下是不能使用很小的分片大小的。 configdb选项指定了配置服务器。mongos实例运行在默认的mongodb27017端口。 2.4 能够在mongos添加第一个分片,在新的终端执行如下命令: 2.4.1 链接mongos实例 mongo mongo01:27017/admin 2.4.2 使用addShard命令添加第一个分片 db.runCommand( { addShard : "firstset/mongo01:10001,mongo01:10002,mongo01:10003" } ) 2.4.3 出现如下信息,表示成功: { "shardAdded" : "firstset", "ok" : 1 } 3. 部署另外一个测试副本集 建立另一个副本集实例,名称为secondset: 3.1 建立副本集而且插入数据以下: /data/example/secondset1 /data/example/secondset2 /data/example/secondset3 建立目录: mkdir -p /data/example/secondset1 /data/example/secondset2 /data/example/secondset3 3.2 在其余终端启动三个mongodb实例,以下: mongod --dbpath /data/example/secondset1 --port 30001 --replSet secondset --oplogSize 700 --rest --fork --logpath /data/example/secondset1/secondset1.log --logappend --nojournal --directoryperdb mongod --dbpath /data/example/secondset2 --port 30002 --replSet secondset --oplogSize 700 --rest --fork --logpath /data/example/secondset2/secondset2.log --logappend --nojournal --directoryperdb mongod --dbpath /data/example/secondset3 --port 30003 --replSet secondset --oplogSize 700 --rest --fork --logpath /data/example/secondset3/secondset3.log --logappend --nojournal --directoryperdb 3.3 链接一个mongodb实例的shell mongo mongo01:20001/admin 3.4 在mongo shell上初始化副本集 db.runCommand( {"replSetInitiate" : {"_id" : "secondset", "members" : [ {"_id" : 0, "host" : "mongo01:30001"}, {"_id" : 1, "host" : "mongo01:30002"}, {"_id" : 2, "host" : "mongo01:30003"} ] } } ) 3.5 将该副本集加入分片集群 db.runCommand( { addShard : "secondset/mongo01:30001,mongo01:30002,mongo01:30003" } ) 返回成功信息: { "shardAdded" : "firstset", "ok" : 1 } 3.6 经过运行listShards命令证明分片都添加成功。以下: db.runCommand({listShards:1}) { "shards" : [ { "_id" : "firstset", "host" : "firstset/mongo01:10001,mongo01:10002,mongo01:10003" }, { "_id" : "secondset", "host" : "secondset/mongo01:30001,mongo01:30002,mongo01:30003" } ], "ok" : 1 }