標籤:並且 副本 .com 效能 同步 欄位 idt 路由 images
在大資料的時代,傳統的關係型資料庫要能更高的服務必須要解決高並發讀寫、海量資料高效儲存、高可擴充性和高可用性這些難題。不過就是因為這些問題Nosql誕生了。
轉載自嚴瀾的博文——《如何搭建高效的MongoDB叢集》
NOSQL有這些優勢:
- 大資料量,可以通過廉價伺服器儲存大量的資料,輕鬆擺脫傳統mysql單表格儲存體量級限制。
- 高擴充性,Nosql去掉了關聯式資料庫的關係型特性,很容易橫向擴充,擺脫了以往老是縱向擴充的詬病。
- 高效能,Nosql通過簡單的key-value方式擷取資料,非常快速。還有NoSQL的Cache是記錄級的,是一種細粒度的Cache,所以NoSQL在這個層面上來說就要效能高很多。
- 靈活的資料模型,NoSQL無需事先為要儲存的資料建立欄位,隨時可以儲存自訂的資料格式。而在關聯式資料庫裡,增刪欄位是一件非常麻煩的事情。如果是非常大資料量的表,增加欄位簡直就是一個噩夢。
- 高可用,NoSQL在不太影響效能的情況,就可以方便的實現高可用的架構。比如mongodb通過mongos、mongo分區就可以快速配置出高可用配置。
- 在nosql資料庫裡,大部分的查詢都是索引值對(key、value)的方式。MongoDB是一個介於關聯式資料庫和非關聯式資料庫之間的產品,是非關聯式資料庫當中最像關聯式資料庫的。支援類似於物件導向的查詢語言,幾乎可以實作類別似關聯式資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。
(MongoDB 高可用叢集架構)
一、mongos
資料庫叢集請求的入口,所有的請求都通過mongos進行協調,不需要在應用程式添加一個路由選取器,mongos自己就是一個請求分發中心,它負責把對應的資料請求請求轉寄到對應的shard伺服器上。在生產環境通常有多mongos作為請求的入口,防止其中一個掛掉所有的mongodb請求都沒有辦法操作。
二、config server
顧名思義為設定管理員,儲存所有資料庫元資訊(路由、分區)的配置。
mongos本身沒有實體儲存體分區伺服器和資料路由資訊,只是緩衝在記憶體裡,設定管理員則實際儲存這些資料。mongos第一次啟動或者關掉重啟就會從 config server 載入配置資訊,以後如果設定管理員資訊變化會通知到所有的 mongos 更新自己的狀態,這樣 mongos 就能繼續準確路由。在生產環境通常有多個 config server 設定管理員,因為它儲存了分區路由的中繼資料,這個可不能丟失!就算掛掉其中一台,只要還有存貨, mongodb叢集就不會掛掉。
三、複本集 replica set
MongoDB中,主從模式其實就是一個單副本的應用,沒有很好的擴充性和容錯性。而複本集具有多個副本保證了容錯性,並且解決了上面第一個問題:“主節點掛掉了,整個叢集內會自動切換”。
用戶端串連到整個複本集,不關心具體哪一台機器是否掛掉。主伺服器負責整個複本集的讀寫,複本集定期同步資料備份,一旦主節點掛掉,複本集通過心跳機制檢測到後,就會在叢集內發起主節點的選舉機制,自動選舉一位新的主伺服器,這一切對於應用伺服器透明存在。
四、分區 shard
通過將單節點中一個資料表 Collection1 儲存的 1T 資料分給4個機器,以緩解硬碟讀寫、網路的IO、CPU和記憶體的瓶頸。在mongodb叢集只要設定好了分區規則,通過mongos操作資料庫就能自動把對應的資料操作請求轉寄到對應的分區伺服器上。在生產環境中分區的片鍵要設定合理,這影響到怎麼把資料均勻分到多個分區伺服器中。
MongoDB 高可用叢集架構簡介