目錄html
第一部分 副本集mongodb
第一步 副本集部署數據庫
第三步 啓動仲裁服務器spa
第二部分 分片orm
第一步 開啓config服務器server
圖例說明:本例用三臺機器做爲示例,他們的ip分別爲192.168.2.19六、192.168.2.19七、192.168.2.198, 每臺服務器上分別存放着config服務器(端口爲:20001)、 mongos服務器(端口爲:20000)、mongod服務器(端口爲:30001)、副本集服務器(端口:30002)。
在MongoDB裏面存在另外一種集羣,就是分片技術,跟sql server的表分區相似,咱們知道當數據量達到T級別的時候,咱們的磁盤,內存就吃不消了,針對這樣的場景咱們該如何應對。
分別開啓三臺機器的config服務,各自端口都爲20001:
192.168.2.196下:
C:\mongocfig\bin\mongod --dbpath=C:\mongo30001\dataCfig --port 20001
192.168.2.197下:
D:\mongocfig\bin\mongod --dbpath=D:\mongo30001\dataCfig --port 20001
192.168.2.198下:
E:\mongocfig\bin\mongod --dbpath=E:\mongo30001\dataCfig --port 20001
分別開啓三臺機器的mongos服務,各自端口都爲20000:
192.168.2.196下:
C:\mongos\bin\mongos –port 20000 --configdb=192.168.2.196:20001,192.168.2.197:20001,192.168.2.198:20001
192.168.2.197下:
D:\mongos\bin\mongos –port 20000 --configdb=192.168.2.196:20001,192.168.2.197:20001,192.168.2.198:20001
192.168.2.198下:
E:\mongos\bin\mongos –port 20000 --configdb=192.168.2.196:20001,192.168.2.197:20001,192.168.2.198:20001
分別開啓三臺機器的mongod服務,各自端口都爲30001:
192.168.2.196下:
C:\mongodb\bin\mongod --port 30001 --dbpath= C:\mongodb\data
192.168.2.197下:
D:\mongodb\bin\mongod --port 30001 --dbpath= D:\mongodb\data
192.168.2.198下:
E:\mongodb\bin\mongod --port 30001 --dbpath=E:\mongodb\data
配置192.168.2.196的分片:
C:\ mongos \bin\mongo 192.168.2.196:20000/admin
db.runCommand({"addshard":"192.168.2.196: 30001 ",allowLocal:true})
db.runCommand({"addshard":"192.168.2.197: 30001 ",allowLocal:true})
db.runCommand({"addshard":"192.168.2.198: 30001 ",allowLocal:true})
db.runCommand({"enablesharding":"marc"})
db.runCommand({"shardcollection":"marc.211010","key":{"_id":1}})
副本集合介紹
簡述:副本集合(Replica Sets),是一個基於主/從複製機制的複製功能,但增長了自動故障轉移和恢復特性。一個集羣最多能夠支持7個服務器,而且任意節點均可以是主節點。全部的寫操做都被分發到主節點,而讀操做能夠在任何節點上進行。
創建一個副本集須要步驟:
1、須要啓動每一個節點,
2、而後進行初始化設置。在這裏,咱們將配置一組(三個節點, 他們的ip分別爲192.168.2.19六、192.168.2.19七、192.168.2.198),這是標準設置。
一旦mongod節點啓動,咱們將發出一個命令,以正確地初始化設置。幾秒鐘後,將選舉產生一個主節點,你就能夠開始寫和查詢集。
副本集名稱:calisDms,先啓動三個節點:
啓動ip爲192.168.2.196:30001節點:
d:\mongo\bin\mongod --dbpath=d:\mongo30001\data --port 30001 --replSet calisDms
啓動ip爲192.168.2.197:30002的節點:
d:\mongo\bin\mongod --dbpath=d:\mongo30002\data --port 30002 --replSet calisDms
啓動ip爲192.168.2.198:30003的節點:
d:\mongo\bin\mongod --dbpath=d:\mongo30003\data --port 30003 --replSet calisDms
2.1:d:\mongo\bin\mongo 192.168.2.196:30001/admin
2.2:db.runCommand({"replSetInitiate":{"_id":"calisDms","members":[{"_id":1,"host":"192.168.2.196:30001"},{"_id":2,"host":"192.168.2.197:30001"},{"_id":3,"host":"192.168.2.198:30001"}]}})
192.168.2.196:30004,負責仲裁是master剩餘爲slaver。
3.1:d:\mongo\bin\mongod --dbpath=d:\mongozc\data --port 30004 --replSet calisDms/192.168.2.196:30001
3.2:d:\mongo\bin\mongo 192.168.2.196:30001/admin
3.3:rs.addArb("192.168.2.196:30004")
3.4:查看集羣中服務器狀態:rs.status();stateStr爲服務狀態:(PRIMARY:主服務,SECONDARY:從服務,ARBITER:仲裁服務)
mongodb採用將集合進行拆分,而後將拆分的數據均攤到幾個片上的一種解決方案。
下面我對這張圖解釋一下:
人臉:表明客戶端。
mongos:首先咱們要了解」片鍵「的概念,也就是說拆分集合的依據是什麼?按照什麼鍵值進行拆分集合,mongos就是一個路由服務器,它會根據管理員設置的「片鍵」將數據分攤到本身管理的mongod集羣,數據和片的對應關係以及相應的配置信息保存在"config服務器"上。
mongod:一個普通的數據庫實例,若是不分片的話,咱們會直接連上mongod;若是分片了,咱們則須要鏈接mongos服務器。
本部分讓讀者更清楚分片的意義(具體生產環境配置,請參見三:生產環境下配置說明)。
首先咱們準備4個mongodb程序,我這裏是均攤在C,D,E,F盤上,固然你也能夠作多個文件夾的形式。
先前也說了,mongos要把mongod之間的配置放到config服務器裏面,理所固然首先開啓它,我這裏就創建2222端口。
這裏要注意的是咱們開啓的是mongos,不是mongod,同時指定下config服務器,這裏我就開啓D盤上的mongodb,端口3333。
對分片來講,也就是要添加片了,這裏開啓E,F盤的mongodb,端口爲:4444,5555。
<1> 先前圖中也能夠看到,咱們client直接跟mongos打交道,也就說明咱們要鏈接mongos服務器,而後將4444,5555的mongod交給mongos,添加分片也就是addshard()。
這裏要注意的是,在addshard中,咱們也能夠添加副本集,這樣能達到更高的穩定性。
<2>片已經集羣了,可是mongos不知道該如何切分數據,也就是咱們先前所說的片鍵,在mongodb中設置片鍵要作兩步
①:開啓數據庫分片功能,命令很簡單 enablesharding(),這裏我就開啓test數據庫。
②:指定集合中分片的片鍵,這裏我就指定爲person.name字段。
好了,至此咱們的分片操做所有結束,接下來咱們經過mongos向mongodb插入10w記錄,而後經過printShardingStatus命令查看mongodb的數據分片狀況。
這裏主要看三點信息:
① shards: 咱們清楚的看到已經別分爲兩個片了,shard0000和shard0001。
② databases: 這裏有個partitioned字段表示是否分區,這裏清楚的看到test已經分區。
③ chunks: 這個頗有意思,咱們發現集合被砍成四段:
無窮小 —— jack0,jack0 ——jack234813,jack234813——jack9999,jack9999——無窮大。
分區狀況爲:3:1,從後面的 on shardXXXX也能看得出。
參考了《mongdb權威指南》