本篇講述MongoDB的 Sharding Cluster 的詳細步驟,按着作理論上不會有什麼錯誤。node
關於說着裏邊的參數、變量、和設置,沒有用到不少,只用到了關鍵的一些,其餘的能夠參考MongoDB的官方文檔。數據庫
後者本身google,baidu,這裏不想多講。一樣廢話很少說,直接上菜。app
哦,對了Sharding Cluster裏邊必定要弄明白的三個概念, DataNode, ConfigServer, Router。如圖:學習
好了, 配置正式開始:google
1, 配置Shard Data Node, 即咱們剛纔說的 Replica Setspa
1)本身編寫 mongo_sharding_dataNode_1.confserver
文件的內容:blog
bind_ip=localhost
port=27022
dbpath=D:\MongoDB\data\dbnode1
logpath=D:\MongoDB\log\node1.log
logappend=true
replSet=testsh1
shardsvr=true索引
2)一樣的文件,改掉bind_ip,port,dbpath,logpath的值,作成mongo_sharding_dataNode_2.confip
這樣存數據的兩個庫就有個一個primary,一個secondary。
3)在Replica Set中還要有一個arbitrary,因此接着編寫第三個文件:mongo_sharding_dataNode_arbit.conf
內容同上,只是bind_ip,port,dbpath,logpath不同而已。
上邊的配置項,和參數有不清楚的,或者想加入更多參數的,最好使用 mongod -h 去查看一下, 裏邊解釋的很清楚。
4)三個文件編號以後使用 mongod.exe -f mongo_sharding_dataNode_2.conf 啓動三個mongod
例如,個人是:
D:\MongoDB\Server\3.2\bin>
D:\MongoDB\Server\3.2\bin>mongod.exe -f ..\conf\mongo_sharding_dataNode_1.conf
5)三個Server(三個mongod)都啓起來以後,把這個三個server配置成一個 Replica Set 即讓他們成爲咱們的一個shard data node.
隨便登陸進這個三個server中的一個, 好比我登陸的是27022,
mongo.exe localhost:27022
use admin
cfg = {_id:'testsh1',members:[{_id:0,host:'localhost:27022',priority:2},{_id:1,host:'localhost:27023',priority:1},{_id:2,host:'localhost:27024',arbiterOnly:true}]}
rs.initiate(cfg)
經過以上命令,把這三個server配置成一個Replica Set, 即一個Shard Data Node,
如今咱們就已經有個了一個 Shard Data Node 了。
若是中間出了錯誤, 不要懼怕,先能夠找找有沒有補救的辦法,好比rs.remove("localhist:27023") rs.reconfig(cfg)等等,這樣能夠學習的耕讀。
最不怕的就是毀掉重來嘛, 不過這麼弄本身練習能夠, 公司環境或生產環境,要千萬千萬萬萬萬萬當心的!!
2,配置ConfigServer
1)本身編寫 conf 文件 mongo_configserver_1.conf 內容:
bind_ip=localhost
port=27019
dbpath=D:\MongoDB\data\confserver1
logpath=D:\MongoDB\log\confserver1.log
logappend=true
configsvr=true
注意這裏的 configsvr=true.
一樣的方式編寫另外兩個或多個 conf 文件。
2)啓動 Config Server
mongod.exe -f mongo_configserver_1.conf
例如,個人啓動方式:
D:\MongoDB\Server\3.2\bin>
D:\MongoDB\Server\3.2\bin>mongod.exe -f ..\conf\mongo_configserver_2.conf
如今 Config Server 有了, Shard DataNode 有了,該有的準備都有了。
咱們最終的要角色: mongos Router 該上場了。
3,配置Mongos
一樣,咱們編寫mongos的配置文件mongos.conf
bind_ip=localhost
port=27030
#dbpath=D:\MongoDB\data\db ####### 注意一下,它不須要dbpath, 能夠查看 mongos -h 查看mongos的參數列表
logpath=D:\MongoDB\log\mongos.log
logappend=true
configdb=localhost:27019,localhost:27020,localhost:27021 ####看一下這個三個ip:port用逗號分隔,這是三個 ConfigServer的地址。
好了所有的靜態,須要寫到文件裏的配置都配置完了, 啓動 mongos
mongos.exe -f mongos.conf
例如,個人啓動是:
D:\MongoDB\Server\3.2\bin>
D:\MongoDB\Server\3.2\bin>mongos.exe -f ..\conf\mongos.conf
若是啓動mongos沒錯的話,你應該能進入mongos
使用命令:mongo.exe localhost:27030 進入mongos,
進入mongos 後的提示應該是: mongos> 這樣子的, 如圖:
4,配置 Sharding
1)加入shard
使用命令:mongos> sh.addShard("testsh1/localhost:27022")
還記得前邊那個testsh1吧, testsh1表示Replica Set的名字,當把主節點添加到shard之後,會自動找到set裏的主,備,決策節點。
因此上邊的命令就是:把testsh1這個Replica Set中的主節點加入到Shard中,讓shard本身找備節點和決策節點。
可使用命令:mongos> db.runCommand({listshards:1}); 來看一下添加的shards, 運行結果應該相似:
mongos>
mongos> db.runCommand({listshards:1});
{
"shards" : [
{
"_id" : "testsh1",
"host" : "testsh1/localhost:27022,localhost:27024"
}
],
"ok" : 1
}
mongos>
mongos>
2)激活數據庫分片,使用命令:
mongos>
mongos>
mongos> db.runCommand({enablesharding:"test-db"});
{ "ok" : 1 }
mongos>
激活 test-db 的數據庫分片。
經過執行以上命令,可讓數據庫跨shard,若是不執行這步,數據庫只會存放在一個shard。
一旦激活數據庫分片,數據庫中不一樣的collection將被存放在不一樣的shard上,但一個collection仍舊存放在同一個shard上,要使單個collection也分片,還需單獨對collection做些操做。
3)激活collection分片,如圖說的清楚,明白:
使用命令:mongos> db.runCommand({shardcollection:'test-db.usertest',key:{_id:1}});
表示激活test-db這個數據庫的中 usertest 表的分片,使用 key是有索引的_id 這個列。
設置完了,能夠切換到 test-db下,看看usertest表的狀態。
使用命令:
use test-db;
db.usertest.stats()
因爲內容太多,不在這裏列出了。
文章到這裏全部的配置已經結果, 這個Mongo Shard Cluster 已經配置完成了,
可使用 mongos 來進行, 操做了。 好比添加,刪除,查看等等。
mongos> user test-db;
mongos> db.usertest.save({name:'xiaobing'});
mongos> db.usertest.find();
等等一系列的操做。
ok, let's call it a day.
沒完沒了了,你還。
哈哈, 我很想知道若是那個mongos掛了怎麼辦?嗯,下圖給了一個解決方案, 爲了防止單點故障,一個mongos掛了怎麼辦?
看圖, 很少說了:
知道怎麼弄了吧, 這樣應該沒有單點故障了吧,完美,perfect。嘿嘿,嘿嘿