mongodb的故障轉移和資料冗餘

2021-08-21 09:16:31 字數 1833 閱讀 6179

mongodb提供了兩種方式的資料冗餘方式:

1、主從複製

mongodb 允許有乙個主節點和多個從節點 從節點從主節點複製同步資料 

主節點會儲存乙個oplog集合的操作記錄,這個集合儲存了對資料庫的寫入操作順序歷史記錄。從節點負責從該集合複製資料。由於該集合是固定長度的,所以當從節點的狀態遠落後於主節點的話 從節點就會跟主節點不同步,複製操作會停止需要手工恢復。造成主從不同步的原因主要有下面兩個:

一、從節點關閉或重啟期間  oplog集合中需要被從節點同步的一些操作記錄可能已經被刪除

二、從節點執行從主節點同步過來的操作時太慢

該同步方式有些缺點平時不太會使用該方式 當從節點太多時 會對主節點造成太大的壓力 該方式也沒有故障自動轉移功能

副本集實際也是主從複製的一種型別,不過副本集提供了自動故障轉移功能。

副本集中也有主節點和從節點的概念,不過在這裡稱為主副本和輔助副本。當主節點關閉時,從節點會自動提公升為主節點繼續為客戶端提供服務,這種提公升為主節點的方式是通過選舉機制來選擇的。

1、當主節點關閉時,會從輔助節點列表中選舉出乙個做為主節點

2、當之前的主節點恢復後會充當從節點變成輔助副本節點

注意:副本集中成員分為下面二類:

主副本成員

乙個副本集中只有乙個主副本,優先順序為1的節點都可以被選舉為主副本,客戶端的寫入操作會被重定向到主副本,然後會被複製到輔助副本成員

輔助副本成員

常規輔助副本成員會儲存資料副本,輔助副本成員可以參與投票也可以在主副本成員發生故障時被提公升為主副本成員

輔助副本成員還具有以下型別:

該型別成員會儲存主副本成員的資料副本,但不會在故障發生時提公升為主副本,除外 該型別成員可以像常規的輔助副本成員一樣具有參與投票和負責讀請求的功能。可以通過設定優先順序為0來建立該成員節點

隱藏成員節點相當於不可見的優先順序0成員,隱藏成員一樣會儲存有主成員的資料副本,同時也可以參與投票,但他不會提供任何讀取請求的服務,可以通過設定hidden屬性為true來設定為隱藏成員

延遲成員會延遲的從主副本成員那複製資料,這主要可以從人為的錯誤操作中恢復資料,因為延遲成員沒有像主副本成員那樣具有最新的資料,所以優先順序應該被設定為0 這樣節點就無法成為主副本成員,同時hidden屬性也應該設定為true,避免任何讀取請求到達該成員節點

該成員節點是不儲存主副本資料副本的輔助成員節點,所以該節點不會成員主副本節點,該成員節點只用來參與投票

該成員節點會儲存主副本的資料副本,可以接受客戶端的讀取請求,同時也可以變成主副本,但該成員節點無法在選舉中參與投票

在mongodb中通過選舉機制把乙個節點提公升為主副本節點,乙個節點要提公升為主副本節點他不僅需要在選舉投票中獲得多數票,還需要獲得的總票數超過過半的票數才行。

所以在這種選舉機制下,無法僅用兩個節點來充當主節點和從節點,因為在該環境下最高只有兩票,如果其中一台伺服器掛了,這時只有乙個節點,永遠無法成為主節點。為了避免這種情況出現,我們最簡單的方式就是使用乙個仲裁者來解決這種問題。仲裁成員是乙個非常輕量級的節點,它只提供投票功能。

在mongod執行期間 各節點成員每隔一段時間都會與其他成員互相傳送心跳檢查請求,請求把返回當前節點的狀態資訊,包括它們當前的時鐘和是否有資格被提公升為主節點等,當節點收到這些資訊時會儲存更新這些資訊。在更新資訊時會發生以下這些情況:

1、當該節點是主節點時,如果其中乙個節點成員已經關閉,該節點檢查自身是否仍然能夠獲得該集合中的多數票,如果沒辦法達成,則將自身降為輔助成員節點

2、當該節點是輔助節點時,且狀態資訊沒有變更時,將檢查是否選舉了自己,另乙個成員是否選舉了自己,自己是否適合當選,如果這些問題無法確認則將保持原樣,否則:

故障轉移群集的筆記

引入 負載均衡等技術來解決 2 業務非常重要,屬於關鍵業務 通常和生產緊密聯絡 如 核電站的溫控系統 鋼鐵廠的製造管理系統 ica 交易 電子銀行 引入高可用技術,如 故障轉移群集 負載均衡 每乙個節點都可以對外提供服務 節點出現故障時,該節點的服務物件需要重新請求服務 故障轉移群集 任意時刻,只有...

SQLServer故障轉移群集的建立

本文主要給大家介紹如何建立sql server 故障轉移群集。在建立sql server 2000 故障轉移群集之前,必須配置 microsoft 群集服務 mscs 並使用 microsoft windows nt4.0 或 windows 2000 中的群集管理員建立至少乙個群集磁碟資源。在執行...

Heartbeat實現LVS的故障轉移

lvs是1998年5月由章文嵩博士發起和領導的優秀的集群解決方案,許多商業的集群產品,比如redhat的piranha,turbolinux公司的turbo cluster等,都是基於lvs的核心 的。在現實的應用中,lvs得到了大量的部署。1.3 用heartbeat實現lvs的高可用性 lvs可...