成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

MongoDB副本集

pakolagij / 3524人閱讀

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

一、MongoDB簡(jiǎn)介

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

二、什么是副本集

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

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

三、副本集成員

在介紹復(fù)制原理之前先來(lái)看一下整個(gè)副本集中會(huì)有哪些成員,它們的功能分別是什么。

1、主服務(wù)器(primary)

主服務(wù)器用于處理客戶端請(qǐng)求,默認(rèn)情況下,客戶端的讀寫請(qǐng)求都到達(dá)主服務(wù)器。

2、備份服務(wù)器(secondary)

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

3、仲裁者(arbiter)

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

1、一個(gè)副本集中只能有一個(gè)仲裁者

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

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

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

4、隱藏成員

隱藏成員不會(huì)作為一個(gè)副本集中的復(fù)制源,而且對(duì)于客戶端來(lái)說(shuō),它是不可見的(只有當(dāng)其優(yōu)先級(jí)為0時(shí)才能設(shè)置為隱藏成員)。很多朋友喜歡將一些性能不那么強(qiáng)大的服務(wù)器隱藏起來(lái)。

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

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

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

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

1、初始化同步

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

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

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

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

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

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

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

克隆完成之后就開始進(jìn)入oplog同步階段,這個(gè)階段分兩步,第一步:如果克隆過(guò)程中文檔被移動(dòng),重新進(jìn)行克??;第二步:將第一步中的操作記錄下來(lái)。

創(chuàng)建索引。

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

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

2、增量同步

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

五、成員狀態(tài)

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

RPIMARY:主服務(wù)器專屬。

SECONDARY:備份服務(wù)器專屬。

ARBITER:仲裁者專屬。

STARTUP:當(dāng)成員剛啟動(dòng)時(shí)就進(jìn)入這個(gè)狀態(tài),本狀態(tài)會(huì)加載一些副本集配置信息,等到加載完畢就進(jìn)入STARTUP2階段。

STARTUP2:我們?cè)谏弦还?jié)提到了初始化同步,在整個(gè)初始化同步過(guò)程中成員的狀態(tài)都是STARTUP2。

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

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

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

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

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

FATAL:成員出現(xiàn)無(wú)法自動(dòng)修復(fù)的故障之后會(huì)被置為此狀態(tài)。

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/19227.html

相關(guān)文章

  • MongoDB副本搭建

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

    RayKr 評(píng)論0 收藏0
  • MongoDB副本配置

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

    MartinHan 評(píng)論0 收藏0
  • 深入淺出MongoDB 復(fù)制

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

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

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

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

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

    KunMinX 評(píng)論0 收藏0
  • MongoDB副本其他細(xì)節(jié)

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

    Flink_China 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<