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 }