国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

MongoDB副本集

pakolagij / 3513人閱讀

摘要:備份服務器保存數(shù)據(jù)副本,在主服務器故障時參與選舉。成員進入回滾階段,即會被置為此狀態(tài),回滾完成之后進入狀態(tài),隨后變成備份服務器。

一、MongoDB簡介

MongoDB是一個面向文檔的數(shù)據(jù)庫,其實是一個介于關系型與非關系型之間的數(shù)據(jù)庫。在MongoDB的世界里,沒有行(row)的概念,取而代之的是文檔(document)模型,文檔內(nèi)還能嵌入文檔、數(shù)組等,非常靈活。它支持json和bson的數(shù)據(jù)格式,可以存儲比較復雜的數(shù)據(jù)類型,因而也受到廣大DBA的青睞。
在生產(chǎn)環(huán)境中,很少用單節(jié)點來支撐業(yè)務流量,主要是節(jié)點性能與數(shù)據(jù)安全性方面的考慮,MongoDB可以用副本集來實現(xiàn)數(shù)據(jù)備份、故障恢復等功能,使用分片技術來使集群存儲更多的數(shù)據(jù),實現(xiàn)更大的負載,也能保證存儲的負載均衡。本文主要介紹的是副本集,有關分片技術會在后面的文章中來進行介紹。

二、什么是副本集

副本集是一組運行著mongod進程的服務器,維護著同一個數(shù)據(jù)集,其中有一個是主服務器(primary),用于處理客戶端請求,其他節(jié)點為備份服務器(secondary),用于保存數(shù)據(jù)庫副本。當主服務器掛掉的時候,其他備份服務器會自動選取一個節(jié)點作為新的主服務器,保證數(shù)據(jù)安全性、業(yè)務可用性。
下面是官方提供的一張架構(gòu)圖:

主服務器(primary)接受所有客戶端的讀寫請求(可以通過配置使得備份服務器也能接受讀請求,在要求數(shù)據(jù)強一致性的環(huán)境中不建議這樣做),主服務器會將對數(shù)據(jù)的改動記錄到operation log中,即oplog(類似MySQL中的binlog),備份服務器會從主服務器中復制此日志,然后應用到自身數(shù)據(jù)庫中,以保證數(shù)據(jù)與主庫中一致。副本集中各個節(jié)點之間會互相發(fā)送心跳報文來獲取各個節(jié)點的信息。
當主服務器(primary)宕機或者由于網(wǎng)絡故障與其它節(jié)點失去聯(lián)系之后(10秒),其中一個備份服務器會發(fā)起選舉流程來將自己提升為新的主服務器。整個過程一般在一分鐘之內(nèi)完成。

三、副本集成員

在介紹復制原理之前先來看一下整個副本集中會有哪些成員,它們的功能分別是什么。

1、主服務器(primary)

主服務器用于處理客戶端請求,默認情況下,客戶端的讀寫請求都到達主服務器。

2、備份服務器(secondary)

保存數(shù)據(jù)副本,在主服務器故障時參與選舉。用于保障集群高可用。默認情況下備份服務器不接受讀請求。

3、仲裁者(arbiter)

MongoDB支持一種特殊類型的成員--仲裁者(arbiter)。它不用于保存數(shù)據(jù),唯一能施展拳腳的地方就是參與選舉過程,履行投票的義務。如果應用數(shù)據(jù)比較小,但又想使用副本集來預防數(shù)據(jù)意外丟失的風險,使用多個數(shù)據(jù)節(jié)點比較浪費資源,這時仲裁者將是不二之選。它可以作為一個輕量級的進程運行在一臺配置比較差的服務器上。可以將其部署在與數(shù)據(jù)節(jié)點不同的故障域內(nèi),這樣將會增強副本集的健壯性。
在使用仲裁者的時候應該注意以下兩個限制:

1、一個副本集中只能有一個仲裁者

2、如果條件允許,能使用數(shù)據(jù)節(jié)點的時候就不要使用仲裁者

在小副本集中,比如三個節(jié)點的副本集,使用一個主服務器、一個備份服務器、一個仲裁者,假設主服務器掛掉(連數(shù)據(jù)都損壞),另外一個備份服務器升為主服務器,這個時候如果新的主服務器也掛掉,而仲裁者又不保存數(shù)據(jù),那將是毀滅性的打擊。所以選擇使用仲裁者之前一定要作各方面考慮。

以上三種即是一個副本集中主要的成員類型,下面兩種其實也是備份節(jié)點,但由于有一些特別的功能,所以多帶帶介紹。

4、隱藏成員

隱藏成員不會作為一個副本集中的復制源,而且對于客戶端來說,它是不可見的(只有當其優(yōu)先級為0時才能設置為隱藏成員)。很多朋友喜歡將一些性能不那么強大的服務器隱藏起來。

5、延遲備份節(jié)點

顧名思義,延遲備份節(jié)點是比主服務器數(shù)據(jù)落后某一段時間的節(jié)點。此節(jié)點的目的是為了防止出現(xiàn)重大故障,比如DBA朋友小手一抖將某些數(shù)據(jù)給刪掉了,執(zhí)行完刪除命令之后頓悟,這個時候主服務器上數(shù)據(jù)沒了,跑得快的備份服務器上數(shù)據(jù)也沒有了,但由于延遲備份節(jié)點配置為落后主服務器一段時間,它上面的數(shù)據(jù)還在,這個副本集就還能一救。
延遲備份節(jié)點的優(yōu)先級也需為0,并且為了保證數(shù)據(jù)一致性,還需要將延遲備份節(jié)點設置為隱藏成員。

四、數(shù)據(jù)同步

MongoDB的復制功能通過操作日志oplog來實現(xiàn)。客戶端對數(shù)據(jù)的更改操作會寫進oplog中,它其實也是一個集合,存放于local數(shù)據(jù)庫中,比較特殊的是它是一個固定大小的集合(capped collection),也就是說它并不是保存了所有對數(shù)據(jù)庫的更改操作,只是一部分,當記錄占滿了這個集合時,新的操作日志會將老的沖掉。副本集中每一個成員都會維護一份自己的oplog。
另外,如果將oplog中的某一個操作在節(jié)點上執(zhí)行多次,其實與執(zhí)行一次的效果是一樣的。這樣設計的好處是為了避免備份節(jié)點同步過程中主服務器掛掉,從新的主服務器上拷貝過來的oplog中與從舊的主服務器上拷貝過來的oplog有重疊。
MongoDB的數(shù)據(jù)同步大體也可分為兩種:初始化同步(Initial Syncing)增量同步

1、初始化同步

我們也可以將其理解為全量同步。一般在副本集中成員啟動后或者新加入成員就會進入這一個階段。
觸發(fā)初始化同步有以下三個條件:

local數(shù)據(jù)庫中的oplog.rs 集合為空。

minValid集合里面存儲的是_initialSyncFlag(用于init sync失敗處理)

initialSyncRequested是true(用于resync命令,resync適用于主從架構(gòu),副本集不適用)

整個初始化同步階段包括以下幾個步驟:

選擇同步源。此時它會在local.me中創(chuàng)建一個屬于自己的標識符,然后會將自己所有的數(shù)據(jù)都刪除掉(local數(shù)據(jù)庫除外),以一個全新的自己來進行同步。

克隆(clone)。簡單理解,就是將同步源上的所有數(shù)據(jù)復制到本地。

克隆完成之后就開始進入oplog同步階段,這個階段分兩步,第一步:如果克隆過程中文檔被移動,重新進行克隆;第二步:將第一步中的操作記錄下來。

創(chuàng)建索引。

將創(chuàng)建索引期間主服務器發(fā)生的數(shù)據(jù)更改進行同步。

初始化同步結(jié)束,節(jié)點變成備份服務器。

2、增量同步

當初始化同步完成之后,就進入增量同步階段,備份節(jié)點在初始化同步結(jié)束后的第一時間就通過tailable cursor來不斷從主服務器上拉取oplog,然后應用到自身的數(shù)據(jù)庫中。tailable cursor游標類似linux里的tailf命令。增量同步會用幾個線程來協(xié)作完成,具體過程在以后的文章的介紹。

五、成員狀態(tài)

我們已經(jīng)知道副本集中各個節(jié)點之間每隔2秒(可通過抓包看出)會發(fā)送心跳報文,報文中會包含節(jié)點自身的狀態(tài)信息,下面來看看成員會有哪些狀態(tài),什么情況下會進入這些狀態(tài)。

RPIMARY:主服務器專屬。

SECONDARY:備份服務器專屬。

ARBITER:仲裁者專屬。

STARTUP:當成員剛啟動時就進入這個狀態(tài),本狀態(tài)會加載一些副本集配置信息,等到加載完畢就進入STARTUP2階段。

STARTUP2:我們在上一節(jié)提到了初始化同步,在整個初始化同步過程中成員的狀態(tài)都是STARTUP2。

RECOVERING:每個成員成為備份節(jié)點之前都會先進入這個狀態(tài)。這個狀態(tài)表明節(jié)點是在正常運轉(zhuǎn)的,但是還需進一步對自身做一些檢查,處于此狀態(tài)的成員不能處理讀請求。

DOWN:成員失聯(lián)的情況下會處于DOWN狀態(tài)。

UNKNOWN:副本集中某個成員連不上其他成員,其他成員無法獲知它的狀態(tài)信息,那它就會被置為UNKNOWN狀態(tài)。

REMOVED:成員被移出副本集,即被置為此狀態(tài)。

ROLLBACK:成員進入回滾階段,即會被置為此狀態(tài),回滾完成之后進入RECOVERING狀態(tài),隨后變成備份服務器。

FATAL:成員出現(xiàn)無法自動修復的故障之后會被置為此狀態(tài)。

官方將這11個狀態(tài)分為三大類:
Core States(包含RPIMARY、SECONDARY和ARBITER)、Other States(包含STARTUP、STARTUP2和RECOVERING)、Error States(包含UNKNOWN、DOWN、REMOVED、ROLLBACK和FATAL)。

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/19227.html

相關文章

  • MongoDB副本搭建

    摘要:下一小節(jié)我會和大家分享如何在真實的生產(chǎn)環(huán)境中創(chuàng)建副本集。好了,中副本集的搭建我們就先說到這里,小伙伴們有問題歡迎留言討論。 我們之前的案例都是在單個節(jié)點上實現(xiàn)的,在生產(chǎn)環(huán)境中這種做法是有風險的,如果服務宕機、崩潰或者硬盤壞了都會對公司業(yè)務造成損失,因此我們需要數(shù)據(jù)備份。在MongoDB中我們可以通過副本集來實現(xiàn)這一需求,MongoDB副本集(Replica Set)是有自動故障恢復功能...

    RayKr 評論0 收藏0
  • MongoDB副本配置

    摘要:我們可以在添加節(jié)點時指定優(yōu)先級,如下也可以為已有的節(jié)點設置優(yōu)先級好了,中副本集的配置我們就先說到這里,小伙伴們有問題歡迎留言討論。 上篇文章我們搭建了MongoDB副本集的環(huán)境,驗證了數(shù)據(jù)已經(jīng)可以成功的復制,本文我們就來看看MongoDB副本集的其他操作。 本文是MongoDB系列的第十六篇文章,了解前面的文章有助于更好的理解本文: 1.Linux上安裝MongoDB 2.Mo...

    MartinHan 評論0 收藏0
  • 深入淺出MongoDB 復制

    摘要:申明本文由筆者首發(fā)于深入淺出復制中文社區(qū)深入淺出復制由于自己開了,所以將之前比較好的文章挪過來便于大家瀏覽。新增由于網(wǎng)絡問題導致失敗重試機制。 申明 本文由筆者首發(fā)于InfoQ:《深入淺出MongoDB復制》MongoDB中文社區(qū):《深入淺出MongoDB復制》 由于自己開了blog,所以將之前比較好的文章挪過來便于大家瀏覽。 綜述 筆者最近在生產(chǎn)環(huán)境中遇到許多復制相關問題,查閱網(wǎng)上資...

    Jacendfeng 評論0 收藏0
  • 【云數(shù)據(jù)庫 MySQL UDB】什么是UDB?產(chǎn)品功能,規(guī)格版本和使用限制

    摘要:版本目前支持和,用戶可以根據(jù)需求選擇相應的云數(shù)據(jù)庫版本。硬盤云數(shù)據(jù)庫的硬盤大小。云數(shù)據(jù)庫提供自動備份和手動備份兩種方式,防止數(shù)據(jù)丟失,避免誤操作帶來的風險。日志日志是用于記錄云數(shù)據(jù)庫操作事件的記錄文件。什么是云數(shù)據(jù)庫MongoDB?云數(shù)據(jù)庫簡介: 云數(shù)據(jù)庫MongoDB是基于成熟云計算技術的高可用、高性能的數(shù)據(jù)庫服務,完全兼容MongoDB 協(xié)議,支持靈活部署,除副本集實例架構(gòu)外,云數(shù)據(jù)庫...

    Tecode 評論0 收藏0
  • 搭建 MongoDB分片(sharding) / 分區(qū) / 群環(huán)境

    摘要:搭建分片分區(qū)集群環(huán)境安裝三臺機器關閉防火墻主節(jié)點副節(jié)點仲裁仲裁主節(jié)點副節(jié)點副節(jié)點仲裁主節(jié)點端口分配下載并且安裝所有版本二進制文件自行下載改名分別在每臺機器建立六個目錄,因為不存儲數(shù)據(jù),只需要建立日志文件目錄即可。 搭建 MongoDB分片(sharding) / 分區(qū) / 集群環(huán)境 1. 安裝 MongoDB 三臺機器 關閉防火墻 systemctl stop firewalld.se...

    KunMinX 評論0 收藏0
  • MongoDB副本其他細節(jié)

    摘要:當一個原本運行正常的成員無法訪問到時,該成員就處于的狀態(tài)。成員被從副本集中移除時就變成這個狀態(tài)。表示當前服務器最后一次收到其他成員心跳的時間。表示同步的數(shù)據(jù)源。 副本集環(huán)境的搭建以及一些基本的操作我們都了解了,本文我們來看看這個數(shù)據(jù)復制到底是怎么實現(xiàn)的。 本文是MongoDB系列的第十七篇文章,了解前面的文章有助于更好的理解本文: 1.Linux上安裝MongoDB 2.Mon...

    Flink_China 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<