校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > MongoDB復制集原理詳解

MongoDB復制集原理詳解

熱門標簽:河南電話外呼系統招商 智能外呼系統官網 青白江400企業電話申請 外呼線路資源屬于電信業務嗎 小裙科技電銷機器人怎樣 內蒙古營銷智能外呼系統哪個好 長沙電銷外呼防封卡是什么 crm外呼系統聯系方式 呼和浩特外呼系統原理是什么

復制集簡介

Mongodb復制集由一組Mongod實例(進程)組成,包含一個Primary節點和多個Secondary節點,Mongodb Driver(客戶端)的所有數據都寫入Primary,Secondary從Primary同步寫入的數據,以保持復制集內所有成員存儲相同的數據集,提供數據的高可用。

下圖(圖片源于Mongodb官方文檔)是一個典型的Mongdb復制集,包含一個Primary節點和2個Secondary節點。

Primary選舉

復制集通過replSetInitiate命令(或mongo shell的rs.initiate())進行初始化,初始化后各個成員間開始發送心跳消息,并發起Priamry選舉操作,獲得『大多數』成員投票支持的節點,會成為Primary,其余節點成為Secondary。

初始化復制集

config = {
  _id : "my_replica_set",
  members : [
     {_id : 0, host : "rs1.example.net:27017"},
     {_id : 1, host : "rs2.example.net:27017"},
     {_id : 2, host : "rs3.example.net:27017"},
  ]
}

rs.initiate(config)

『大多數』的定義

假設復制集內投票成員(后續介紹)數量為N,則大多數為 N/2 + 1,當復制集內存活成員數量不足大多數時,整個復制集將無法選舉出Primary,復制集將無法提供寫服務,處于只讀狀態。

投票成員數 大多數 容忍失效數
1 1 0
2 2 0
3 2 1
4 3 1
5 3 2
6 4 2
7 4 3

通常建議將復制集成員數量設置為奇數,從上表可以看出3個節點和4個節點的復制集都只能容忍1個節點失效,從『服務可用性』的角度看,其效果是一樣的。(但無疑4個節點能提供更可靠的數據存儲)

特殊的Secondary

正常情況下,復制集的Seconary會參與Primary選舉(自身也可能會被選為Primary),并從Primary同步最新寫入的數據,以保證與Primary存儲相同的數據。

Secondary可以提供讀服務,增加Secondary節點可以提供復制集的讀服務能力,同時提升復制集的可用性。另外,Mongodb支持對復制集的Secondary節點進行靈活的配置,以適應多種場景的需求。

Arbiter

Arbiter節點只參與投票,不能被選為Primary,并且不從Primary同步數據。

比如你部署了一個2個節點的復制集,1個Primary,1個Secondary,任意節點宕機,復制集將不能提供服務了(無法選出Primary),這時可以給復制集添加一個Arbiter節點,即使有節點宕機,仍能選出Primary。

Arbiter本身不存儲數據,是非常輕量級的服務,當復制集成員為偶數時,最好加入一個Arbiter節點,以提升復制集可用性。

Priority0

Priority0節點的選舉優先級為0,不會被選舉為Primary

比如你跨機房A、B部署了一個復制集,并且想指定Primary必須在A機房,這時可以將B機房的復制集成員Priority設置為0,這樣Primary就一定會是A機房的成員。(注意:如果這樣部署,最好將『大多數』節點部署在A機房,否則網絡分區時可能無法選出Primary)

Vote0

Mongodb 3.0里,復制集成員最多50個,參與Primary選舉投票的成員最多7個,其他成員(Vote0)的vote屬性必須設置為0,即不參與投票。

Hidden

Hidden節點不能被選為主(Priority為0),并且對Driver不可見。

因Hidden節點不會接受Driver的請求,可使用Hidden節點做一些數據備份、離線計算的任務,不會影響復制集的服務。

Delayed

Delayed節點必須是Hidden節點,并且其數據落后與Primary一段時間(可配置,比如1個小時)。

因Delayed節點的數據比Primary落后一段時間,當錯誤或者無效的數據寫入Primary時,可通過Delayed節點的數據來恢復到之前的時間點。

數據同步

Primary與Secondary之間通過oplog來同步數據,Primary上的寫操作完成后,會向特殊的local.oplog.rs特殊集合寫入一條oplog,Secondary不斷的從Primary取新的oplog并應用。

因oplog的數據會不斷增加,local.oplog.rs被設置成為一個capped集合,當容量達到配置上限時,會將最舊的數據刪除掉。另外考慮到oplog在Secondary上可能重復應用,oplog必須具有冪等性,即重復應用也會得到相同的結果。

如下oplog的格式,包含ts、h、op、ns、o等字段

{
 "ts" : Timestamp(1446011584, 2),
 "h" : NumberLong("1687359108795812092"), 
 "v" : 2, 
 "op" : "i", 
 "ns" : "test.nosql", 
 "o" : { "_id" : ObjectId("563062c0b085733f34ab4129"), "name" : "mongodb", "score" : "100" } 
}
  • ts: 操作時間,當前timestamp + 計數器,計數器每秒都被重置
  • h:操作的全局唯一標識
  • v:oplog版本信息
  • op:操作類型
    • i:插入操作
    • u:更新操作
    • d:刪除操作
    • c:執行命令(如createDatabase,dropDatabase)
    • n:空操作,特殊用途
  • ns:操作針對的集合
  • o:操作內容,如果是更新操作
  • o2:操作查詢條件,僅update操作包含該字段

Secondary初次同步數據時,會先進行init sync,從Primary(或其他數據更新的Secondary)同步全量數據,然后不斷通過tailable cursor從Primary的local.oplog.rs集合里查詢最新的oplog并應用到自身。

init sync過程包含如下步驟

T1時間,從Primary同步所有數據庫的數據(local除外),通過listDatabases + listCollections + cloneCollection敏命令組合完成,假設T2時間完成所有操作。

從Primary應用[T1-T2]時間段內的所有oplog,可能部分操作已經包含在步驟1,但由于oplog的冪等性,可重復應用。

根據Primary各集合的index設置,在Secondary上為相應集合創建index。(每個集合_id的index已在步驟1中完成)。

oplog集合的大小應根據DB規模及應用寫入需求合理配置,配置得太大,會造成存儲空間的浪費;配置得太小,可能造成Secondary的init sync一直無法成功。比如在步驟1里由于DB數據太多、并且oplog配置太小,導致oplog不足以存儲[T1, T2]時間內的所有oplog,這就Secondary無法從Primary上同步完整的數據集。

修改復制集配置

當需要修改復制集時,比如增加成員、刪除成員、或者修改成員配置(如priorty、vote、hidden、delayed等屬性),可通過replSetReconfig命令(rs.reconfig())對復制集進行重新配置。

比如將復制集的第2個成員Priority設置為2,可執行如下命令

cfg = rs.conf();
cfg.members[1].priority = 2;
rs.reconfig(cfg);

細說Primary選舉

Primary選舉除了在復制集初始化時發生,還有如下場景

  • 復制集被reconfig
  • Secondary節點檢測到Primary宕機時,會觸發新Primary的選舉
  • 當有Primary節點主動stepDown(主動降級為Secondary)時,也會觸發新的Primary選舉

Primary的選舉受節點間心跳、優先級、最新的oplog時間等多種因素影響。

節點間心跳

復制集成員間默認每2s會發送一次心跳信息,如果10s未收到某個節點的心跳,則認為該節點已宕機;如果宕機的節點為Primary,Secondary(前提是可被選為Primary)會發起新的Primary選舉。

節點優先級

  • 每個節點都傾向于投票給優先級最高的節點
  • 優先級為0的節點不會主動發起Primary選舉
  • 當Primary發現有優先級更高Secondary,并且該Secondary的數據落后在10s內,則Primary會主動降級,讓優先級更高的Secondary有成為Primary的機會。

Optime

擁有最新optime(最近一條oplog的時間戳)的節點才能被選為主。

網絡分區

只有更大多數投票節點間保持網絡連通,才有機會被選Primary;如果Primary與大多數的節點斷開連接,Primary會主動降級為Secondary。當發生網絡分區時,可能在短時間內出現多個Primary,故Driver在寫入時,最好設置『大多數成功』的策略,這樣即使出現多個Primary,也只有一個Primary能成功寫入大多數。

復制集的讀寫設置

Read Preference

默認情況下,復制集的所有讀請求都發到Primary,Driver可通過設置Read Preference來將讀請求路由到其他的節點。

  • primary: 默認規則,所有讀請求發到Primary
  • primaryPreferred: Primary優先,如果Primary不可達,請求Secondary
  • secondary: 所有的讀請求都發到secondary
  • secondaryPreferred:Secondary優先,當所有Secondary不可達時,請求Primary
  • nearest:讀請求發送到最近的可達節點上(通過ping探測得出最近的節點)

Write Concern

默認情況下,Primary完成寫操作即返回,Driver可通過設置[Write Concern(https://docs.mongodb.org/manual/core/write-concern/)來設置寫成功的規則。

如下的write concern規則設置寫必須在大多數節點上成功,超時時間為5s。

db.products.insert(
 { item: "envelopes", qty : 100, type: "Clasp" },
 { writeConcern: { w: majority, wtimeout: 5000 } }
)

上面的設置方式是針對單個請求的,也可以修改副本集默認的write concern,這樣就不用每個請求單獨設置。

cfg = rs.conf()
cfg.settings = {}
cfg.settings.getLastErrorDefaults = { w: "majority", wtimeout: 5000 }
rs.reconfig(cfg)

異常處理(rollback)

當Primary宕機時,如果有數據未同步到Secondary,當Primary重新加入時,如果新的Primary上已經發生了寫操作,則舊Primary需要回滾部分操作,以保證數據集與新的Primary一致。

舊Primary將回滾的數據寫到單獨的rollback目錄下,數據庫管理員可根據需要使用mongorestore進行恢復。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • MongoDB的主從復制及副本集的replSet配置教程
  • MongoDB在不同主機間復制數據庫和集合的教程
  • MongoDB的Master-Slave主從模式配置及主從復制要點解析
  • MongoDB入門教程之主從復制配置詳解
  • MongoDB 主從復制實例講解
  • 詳解mongoDB主從復制搭建詳細過程
  • mongodb主從復制_動力節點Java學院整理
  • Mongodb 副本集搭建問題總結及解決辦法
  • Mongodb副本集和分片示例詳解
  • MongoDB副本集丟失數據的測試實例教程
  • MongoDB 復制(副本集)學習筆記

標簽:楚雄 白山 舟山 安順 池州 黃石 呼倫貝爾 菏澤

巨人網絡通訊聲明:本文標題《MongoDB復制集原理詳解》,本文關鍵詞  MongoDB,復制,集,原理,詳解,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MongoDB復制集原理詳解》相關的同類信息!
  • 本頁收集關于MongoDB復制集原理詳解的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    日韩电影在线一区二区三区| 欧美精品久久天天躁| 亚洲综合清纯丝袜自拍| 国产女同互慰高潮91漫画| 日韩激情一二三区| 久久精品一区蜜桃臀影院| 精品久久久久久久人人人人传媒| 欧美日韩一区二区在线视频| 欧美日韩一区视频| 在线不卡一区二区| 日韩免费看网站| 日本视频中文字幕一区二区三区| 玉米视频成人免费看| 中文字幕在线观看不卡视频| 亚洲视频一二三| 一区二区三区在线视频免费观看| 亚洲日本乱码在线观看| 亚洲高清免费一级二级三级| 香蕉成人啪国产精品视频综合网| 日韩精品乱码免费| 激情另类小说区图片区视频区| 久久超碰97人人做人人爱| 国产一区美女在线| 成人av在线网站| 欧美性大战xxxxx久久久| 91精品国产91久久久久久最新毛片| 欧美sm美女调教| 亚洲欧洲精品一区二区三区| 亚洲成人7777| 久久99精品国产| 色94色欧美sute亚洲13| 91精品国产欧美一区二区成人 | 精品盗摄一区二区三区| 欧美精品一区二区三区久久久| 中文文精品字幕一区二区| 中文字幕佐山爱一区二区免费| 香蕉久久夜色精品国产使用方法| 国产精品亚洲人在线观看| 在线亚洲欧美专区二区| 精品国产乱码久久久久久闺蜜| 亚洲人亚洲人成电影网站色| 久久精品国产**网站演员| 99久久99久久久精品齐齐| 51精品久久久久久久蜜臀| 久久久久久久性| 亚洲男人天堂一区| 舔着乳尖日韩一区| 成人精品视频网站| 日韩精品一区二区三区三区免费| 国产日韩欧美精品电影三级在线| 亚洲一区二区偷拍精品| 国内成+人亚洲+欧美+综合在线 | 91视频在线观看免费| 日本丶国产丶欧美色综合| 日韩视频一区在线观看| 亚洲精品老司机| 成人综合日日夜夜| 26uuu精品一区二区三区四区在线| 一区二区三区资源| 久久精品人人做人人爽人人| 午夜av电影一区| 91在线视频在线| 久久久精品一品道一区| 日本伊人精品一区二区三区观看方式| 国产寡妇亲子伦一区二区| 欧美成人艳星乳罩| 亚洲伦理在线免费看| av一区二区久久| 亚洲国产精品精华液ab| 国产99久久精品| 欧美国产综合色视频| 国产一区欧美二区| 欧美精品一区二区精品网| 另类调教123区| 精品国产乱码久久久久久闺蜜| 亚洲成精国产精品女| 一本大道久久精品懂色aⅴ| 欧美电视剧在线看免费| 午夜精品一区在线观看| 91黄色免费版| 亚洲国产精品欧美一二99| 日本韩国欧美三级| 中文字幕一区二区三区乱码在线| 九色porny丨国产精品| 久久色.com| 韩国精品主播一区二区在线观看 | 国产一区二区三区不卡在线观看 | 欧美一级搡bbbb搡bbbb| 首页欧美精品中文字幕| 欧美日韩在线亚洲一区蜜芽| 中文天堂在线一区| 一本到高清视频免费精品| 亚洲图片有声小说| 91精品久久久久久久91蜜桃 | 椎名由奈av一区二区三区| 91久久线看在观草草青青| 亚洲色图制服丝袜| 欧美亚洲愉拍一区二区| 日韩—二三区免费观看av| 日韩欧美一区二区三区在线| 老司机免费视频一区二区三区| 精品久久久久久久久久久久久久久| 久久99精品一区二区三区| 日韩欧美高清在线| 成人av资源在线观看| 亚洲国产另类精品专区| 精品免费国产二区三区| 99久久婷婷国产综合精品电影| 亚洲综合免费观看高清在线观看| 欧美一级午夜免费电影| 国产精品1024| 夜夜嗨av一区二区三区网页 | 国产精品久久久久婷婷二区次| 丁香五精品蜜臀久久久久99网站| 亚洲精品高清视频在线观看| 日韩欧美国产1| 中国av一区二区三区| 亚洲成人在线免费| 欧美一区二区人人喊爽| 成人影视亚洲图片在线| 蜜臀国产一区二区三区在线播放| 精品国精品国产| 色综合久久中文综合久久牛| 美日韩一区二区| 一区二区三区加勒比av| 国产午夜精品久久久久久免费视| 欧美亚一区二区| 成人精品免费网站| 狠狠色狠狠色综合| 综合久久国产九一剧情麻豆| 欧美日韩一本到| 国产成人综合自拍| 蜜桃视频在线一区| 亚洲国产精品久久久久秋霞影院| 国产欧美日韩三区| 亚洲精品一区二区三区精华液 | 欧美日韩国产一级片| 国产精品综合av一区二区国产馆| 亚洲精品午夜久久久| 欧美成人vps| 91精品国产乱码久久蜜臀| 日本精品视频一区二区| 国产精品综合视频| 国产福利电影一区二区三区| 日韩影院免费视频| 综合自拍亚洲综合图不卡区| 欧美国产精品一区二区| 3d动漫精品啪啪1区2区免费 | 久久嫩草精品久久久精品一| 色哟哟日韩精品| 有码一区二区三区| 亚洲美女在线国产| 亚洲女厕所小便bbb| 国产精品对白交换视频| 国产精品视频看| 中文字幕二三区不卡| 中文字幕免费不卡在线| 国产精品夫妻自拍| 亚洲同性同志一二三专区| 中文字幕亚洲视频| 亚洲女人的天堂| 亚洲www啪成人一区二区麻豆| 亚洲一区二区三区在线看| 亚洲另类春色校园小说| 一区二区高清免费观看影视大全 | 蜜桃视频第一区免费观看| 日韩国产欧美在线视频| 另类人妖一区二区av| 国产一区视频在线看| 国产一区二区三区免费播放| 成人久久18免费网站麻豆| 色综合久久综合| 日韩一区二区三区三四区视频在线观看| 欧美日本一道本在线视频| 日韩三级.com| 国产午夜亚洲精品理论片色戒 | 26uuu色噜噜精品一区| 26uuu欧美日本| 中文字幕在线不卡一区| 亚洲一区二区在线观看视频| 久久精品无码一区二区三区| 精品国产伦一区二区三区免费 | 2019国产精品| 国产日韩精品一区二区三区在线| 久久精品视频在线看| 亚洲乱码一区二区三区在线观看| 日韩国产高清在线| 国产精品538一区二区在线| 91久久精品国产91性色tv| 欧美男男青年gay1069videost| 欧美精品一区二区三区久久久| 最新国产精品久久精品| 日韩电影一区二区三区四区| 国产激情视频一区二区在线观看| 91蜜桃在线观看| 日韩精品专区在线影院观看 | 日韩美女视频一区| 日韩精品每日更新| 久88久久88久久久| 欧美日韩视频不卡|