MongoDB分散式叢集環境搭建
第一節分片的概念
分片(sharding)是指根據片鍵,將資料進行拆分,使其落在不同的機器上的過程。如此一來,不需要功能,配置等強大的機器,也能儲存大資料量,處理更高的負載。
第二節分片的原理和思想
MongoDB分片的基本思想就是將集合切分成小塊。這些塊分散到若干片裡面,每個片只負責總資料的一部分。
對於客戶端來說,無需知道資料被拆分了,也無需知道服務端哪個分片對應哪些資料。資料在分片之前需要執行一個路由程序,程序名為mongos。這個路由器知道所有資料的存放位置,知道資料和片的對應關係。對客戶端來說,它僅知道連線了一個普通的mongod,在請求資料的過程中,通過路由器上的資料和片的對應關係,路由到目標資料所在的片上,如果請求有了迴應,路由器將其收集起來回送給客戶端
第三節分片的簡單實現
1.片鍵的概念
設定分片時,需要從集合裡面選一個鍵,用該鍵的值作為資料拆分的依據。這個鍵稱為片鍵(shard key)。{department:"IT",name:"zhangsan"},{department:"HR",name:"lisi"},{department:"SUPPORT",name:"zhaowu"}
以該資料為例,表示的是職員名字以及所在的部門,假若我們設定部門(department)為片鍵,那麼第一片可能存放名稱以字母A-F開頭的部門,第二片存放名稱以G~P開頭的部門,第三片存Q~Z,如此類推。隨著新增或者刪除片,MongoDB會重新平衡資料,使每片的流量都比較均衡,資料量也在合理範圍內。
2.本地模擬實現
a.首先mongod開啟服務端3個節點,埠分別為8080,8081,8082
b.開啟config伺服器 。mongos要把mongod之間的配置放到config伺服器裡面,所以首先開啟它,這裡就使用8083埠。 命令為:mongod --dbpath E:\sharding\config_node --port 8083
c、開啟mongos伺服器 。埠8084,同時指定下config伺服器。命令為:mongos --port 8084 --configdb=127.0.0.1:8083
d.路由指定服務端節點。客戶端直接跟mongos打交道,也就說明我們要連線mongos伺服器,然後將8080,8081,8082的mongod交給mongos,新增分片也就是addshard()。需要進到路由節點的admin資料庫進行配置。allowLocal表示該服務端節點,可被客戶端直接連線而無需經過路由。
db.runCommand({"addshard":"127.0.0.1:8080",allowLocal:true})
db.runCommand({"addshard":"127.0.0.1:8081",allowLocal:true})
db.runCommand({"addshard":"127.0.0.1:8082",allowLocal:true})
e.開啟資料庫分片功能,命令為enablesharding(),並指定資料庫名稱,如下指定每個mongod都有的test資料庫
db.runCommand({"enablesharding":"test"})
f.指定集合中分片的片鍵,這裡就指定為company.department鍵. db.runCommand({"shardcollection":"company.department","key":{"depatment":1}})
g.通過向mongos節點插入100萬條資料,檢視各節點儲存的資料。
h.通過向mongos插入一條資料,檢視資料被分配到哪個片