標籤:
本篇講述MongoDB的 Sharding Cluster 的詳細步驟,按著做理論上不會有什麼錯誤。
關於說著裡邊的參數、變數、和設定,沒有用到很多,只用到了關鍵的一些,其他的可以參考MongoDB的官方文檔。
後者自己google,baidu,這裡不想多講。同樣廢話不多說,直接上菜。
哦,對了Sharding Cluster裡邊一定要弄明白的三個概念, DataNode, ConfigServer, Router。
好了, 配置正式開始:
1, 配置Shard Data Node, 即我們剛才說的 Replica Set
1)自己編寫 mongo_sharding_dataNode_1.conf
檔案的內容:
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.conf
這樣存資料的兩個庫就有個一個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。嘿嘿,嘿嘿
MongoDB sharding cluster Step by Step