今日學習mongodb的時候,遇到這兩個概念,本人不才,一時無法理解之前的關係與區別和作用。我們先來看一下這倆個概念在手冊上是怎麼說的:
1.複製(副本集):
mongodb複製是將資料同步在多個伺服器的過程。
複製提供了資料的冗餘備份,並在多個伺服器上儲存資料副本,提高了資料的可用性, 並可以保證資料的安全性。
複製還允許您從硬體故障和服務中斷中恢復資料。
複製原理:
mongodb的複製至少需要兩個節點。其中乙個是主節點,負責處理客戶端請求,其餘的都是從節點,負責複製主節點上的資料。
mongodb各個節點常見的搭配方式為:一主一從、一主多從。
主節點記錄在其上的所有操作oplog,從節點定期輪詢主節點獲取這些操作,然後對自己的資料副本執行這些操作,從而保證從節點的資料與主節點一致。
mongodb複製結構圖如下所示:
理解:複製比較好理解。簡單來說就是為了防止一台資料庫伺服器出問題導致應用程式錯誤而採取的措施。具體實現是:應用程式的所有寫入操作都只在主節點(圖上的primary)上進行,主節點的操作將會被記錄(oplog--[operation log])。oplog儲存在主節點的乙個特殊的資料庫中,叫做local。oplog就在其中的oplog.$main集合裡面。oplog中的每個文件都代表這主節點上的乙個操作(注意:oplog只會儲存改變資料庫狀態的操作,比如新增,更新,刪除。所以查詢並不會記錄,也不需要記錄)。之後從節點(圖中的secondary)將會定時訪問oplog,根據oplog的記錄來更新自身以保持與主節點的同步。再上一張圖:
2.分片
在mongodb裡面存在另一種集群,就是分片技術,可以滿足mongodb資料量大量增長的需求。
當mongodb儲存海量的資料時,一台機器可能不足以儲存資料,也可能不足以提供可接受的讀寫吞吐量。這時,我們就可以通過在多台機器上分割資料,使得資料庫系統能儲存和處理更多的資料。
分片原理
上圖中主要有如下所述三個主要元件:
理解:
分片是指將大量的資料集合分成一塊塊小的資料集合。將這些一塊塊下的資料集合分散在不同機器上的過程。
舉個栗子:假設有個文件集合表示的是人員。人員名字以a~f開頭,如果不採用分片的話,那麼這些文件將只儲存在乙個集合當中,時間久了,資料量就會非常的大。每次查詢將資料庫都將承擔相當大的壓力,查詢速度也會很慢。於是,我們採用分片的方法,將a~f與g~p,q~z開頭的名字存放在不同的機器上去,再用乙個類似與路由器的服務(mongos)識別使用者的查詢()。這樣將會極大的減輕資料庫伺服器的負擔,查詢速度也會快很多。而且應用程式並不用關心分片中的具體實現,因為它只接入mongos服務。
3.關係
雖然兩者的概念上都涉及到多台主機,集群的概念,倒是二者的作用與實現都是有著很大的區別;
複製(副本集)的作用:將一台主機上的資料複製到多台從節點上的技術;
分片的作用:將一台機器上的大資料集合分散成若干臺機器上的小資料集合;
那麼二者是如何協作的呢。通常在分片的機器上都會增加複製(副本集)的集群,防止單一主機宕機情況的發生,增加資料的安全性,穩定性。額。。。有點拗口,看下面的圖應該就能明白了。
至此,想必分片與複製(副本集)的原理,概念,應用應該了解得差不多了。現在只要具體實現就能完成我們的分布式資料庫了。具體實現的文章,等日後再發
mongodb 集群搭建 分片 副本集
mkdir p home mongodb conf mkdir p home mongodb mongos log mkdir p home mongodb config data mkdir p home mongodb config log mkdir p home mongodb shard1...
MongoDB副本集分片集搭建記錄
mongodb副本集分片集搭建記錄 1 準備工作 關閉selinux和防火牆 vim hosts檔案 192.168.2.171 192.168.2.172 192.168.2.173 192.168.2.58 192.168.2.160 192.168.2.161 192.168.2.169 19...
MongoDB複製集和分片
複製集 複製提供了兩方面的好處 高效能 和 高可用性 奇數 應確保伺服器為奇數,這樣更容易選舉出主伺服器 複製策略 副本集數量 容錯 部署副本集 1.2.為複製集 中的每個伺服器配置 replset值。可以在檔案 mongodb.conf 中指定,也可以在命令列中指定。mongod port 270...