日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(2)MongoDB副本集自动故障转移原理(含客户端)

發布時間:2023/12/4 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (2)MongoDB副本集自动故障转移原理(含客户端) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前文我們搭建MongoDB三成員副本集,了解集群基本特性,今天我們圍繞下圖聊一聊背后的細節。

默認搭建的副本集均在主節點讀寫,輔助節點冗余部署,形成高可用和備份,具備自動故障轉移能力。

集群心跳保活

集群每個節點以周期性向其他成員發出心跳命令?replSetHeartbeat?來獲取狀態,

根據應答消息來更新節點的狀態,根據最終狀態確定是否重選主節點。

默認心跳周期 heartbeatIntervalMillis= 2000ms;

認定Primary節點失聯的閾值?electionTimeoutMillis=10s

異步復制

輔助節點復制主節點的oplog,并將改變應用到數據集,從而保持與主節點數據同步。

這里有三個知識點:

  • oplog是一個特殊的封頂集合capped collection, 主節點上的operation log會記錄在主節點的oplog中,輔助節點異步拷貝這些操作,這樣所有的節點的都包含operatin log的一個副本:local.oplog.rs集合

  • 每次異步復制觸發的時機是在心跳保活階段,所有的輔助節點都會在ping階段從其他成員插入oplog文檔。

  • oplog中的每個操作都是冥等的:無論是一次還是多次應用到目標數據集,oplog操作會產生相同的結果

刪除和插入操作

若多次應用刪除操作,后續刪除操作無效果;

若多次應用插入操作,因為每次操作均包含包含_id值,因此它也不會插入文檔的第二個副本(因為_id必須是唯一的)。

當有新節點加入集群,該節點會啟動另一種同步復制:initial sync, 將所有數據從某副本集成員完全拷貝, 復制完成,會過渡為輔助節點。

選舉主節點

集群會因為各種事件觸發選舉主節點

  • 在集群中添加新節點

  • 初始化replica set集群

  • 執行人工運維命令(rs.stepDown()? rs.reconfig())維護集群

  • 輔助節點與主節點失聯時間超過默認10s

自動故障轉移說的是最后一種情況:

默認情況下,輔助節點A與主節點心跳失聯超過10s,A節點標記主節點不可用;

之后與其他輔助節點心跳保活,溝通各自信息(節點的票數、節點優先級、PingMs等因素)確立出新主節點。

在發生故障轉移時,集群不能再執行寫入操作;若客戶端配置在輔助節點讀取(read preference),則集群可繼續提供讀取能力。

你的應用程序可用重試邏輯應對自動故障轉移和后續的重選。

從MongoDB3.6版本開始,MongoDB Driver可偵測主節點的失聯,并執行一次重試操作。

tip

適配MongoDB4.2的Driver默認會重試寫入操作;

適配Mongodb4.0-3.6的Driver需顯式在連接字符串包含retryWrites = true,以確保主節點失聯時能重試寫入操作。

連接副本集的配置字符串,其中rs0是集群配置文件中 replSetName。

mongodb://account:passward@mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017?replicaSet=rs0

OK, 以上便是MongoDB副本集心跳保活、異步復制、自動故障轉移的背景知識。

留一個作業?

客戶端連接MongoDB副本集的連接字符串,是一個很普通的IP數組,并未體現主副節點,客戶端是怎么區分主副節點,并向主節點發出寫入指令;更何況副本集主副節點會變化,客戶端如何感知?

點擊下方空白區域查看答案

「Client? Monitoring」?


所有符合MongoDB官方規范的Driver都會實現Service Discovery和Monitoring,連接副本集的字符串IP實際是種子成員,Driver會準實時發起指令檢測集群狀態(heartbeatFrequencyMS約定了Driver的檢查間隔),

這與我們在輔助節點觀察到的日志是相呼應的:

+?https://github.com/mongodb/specifications/blob/master/source/server-discovery-and-monitoring/server-discovery-and-monitoring.rst#heartbeatfrequencyms

+?https://docs.mongodb.com/manual/reference/connection-string/#urioption.heartbeatFrequencyMS

往期精彩回顧

(1)解鎖MongoDB replica set核心姿勢

ASP.NET Core跨平臺技術內幕

實例解讀Docker Swarm

快到碗里來

!

你點的每個贊,我都認真當成了喜歡

總結

以上是生活随笔為你收集整理的(2)MongoDB副本集自动故障转移原理(含客户端)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。