MongoDB sharding cluster Step by Step

本篇講述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。嘿嘿,嘿嘿

相關文章
相關標籤/搜索