標籤:mongodb 資料備份 複製叢集
這篇主要講述分區叢集的主要原理
坦白說,剛看到這個分區系統(Sharding)有點蒙,感覺有點太高大上了。看美國作家Kyle Banker《Mongodb in action》沒有明白。又查詢資料,首先對與分區的做個說明。從其他書本上看的,說分區這是一種將海量資料水平擴充的資料庫叢集系統,資料分表格儲存體在sharding的各個節點上,使用者通過簡單的配置就可以很方便地夠將一個分布式MongoDB叢集。
一、角色說明要構建一個MongoDB分區叢集,需要三個角色:
- shard server 即儲存實際資料得分區,每個shard 可以是一個Mongod執行個體,也可以是一組mongod執行個體構成得Replica Set(也就是以前部落格裡說明的複製集)。為了實現每個shard內部的auto-failover,MongoDB官方建議每個shard 為一組Replica set。
- Config Server 為了將一個特定的collection儲存在多個shard中,需要為該collection指定一個shard key,例如{age:1},shard key可以決定該條記錄屬於哪個chunk。(chunk將在後面做詳細介紹)Config Servers就是用來儲存所有shard節點的配置資訊,每個chunk的shard key範圍,chunk在各shard的分布情況 、該叢集中所有DB和collection的sharding 配置資訊
- Route Process 這個一個前端路由,用戶端由此接入,然後詢問config servers需要到哪個shard上查詢或把儲存記錄,在串連相應的shard進行操作,最後講結果返回用戶端。用戶端只需要將原本發給mongod的查詢或更新要求原封不動地發給rounting processl.而不必關心所操作的記錄儲存在哪個shard上,
二、架構結構
如果用一台物理機搭建分區叢集:結構圖如下:
每個伺服器的連接埠不一樣
三、架構說明
由於該分區叢集比較抽象,我從其他資料上看到些說明,在這裡做一個補充;
A:分區是把資料庫分別在多個伺服器上
B:查詢一個使用者實際涉及兩次查詢,第一次訪問設定資料庫以獲得用使用者的分區位置,第二次查詢直接存取包含使用者資料的分區
C:主要解決說明擴容問題以及負載平衡問題
D:手動管理分區的著名架構為: Twitter的Gizzard (詳見:http://mng.bz/4qvd)
E :對現在系統的分區決定因素: 磁碟活動,系統負載以及最重要的工作集大小與可用記憶體的比例
F:chunk塊的概念:它是位於一個分區中的一段連續的分區鍵範圍。它們是種邏輯意義上的東西而不是物理意義上的。
G: 分區鍵: MongoDB的分區是基於範圍的。也就是說分區的集合中每個文檔都必須落在指定鍵的某個值範圍。分區鍵就是讓每個文檔能在這些範圍中找到自己的位置
H:拆分和遷移
這兩個是完全不同的概念,拆分思想是當分區塊資料達到一定大小時候把其分為兩塊。拆分後的兩塊都有相同數量的文檔。拆分僅僅是個邏輯操作,不會影響分區集合中裡文檔的物理順序。
遷移是由名為“balancer”均衡器軟體進行管理的,它的任務是確保資料在各個節點中保持均勻分布。通過跟蹤各分區塊的數量,就能實現該功能。通常來說,當叢集中擁有塊最多的分區與擁有塊最少的分區的塊數差大於8時,均衡器就會發生一次均衡處理。
I:建議架構圖
【MongoDB】在window系統下搭建MongoDB的分區系統(一)