成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

MongoDB副本集其他細(xì)節(jié)

Flink_China / 2455人閱讀

摘要:當(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.MongoDB基本操作
3.MongoDB數(shù)據(jù)類型
4.MongoDB文檔更新操作
5.MongoDB文檔查詢操作(一)
6.MongoDB文檔查詢操作(二)
7.MongoDB文檔查詢操作(三)
8.MongoDB查看執(zhí)行計(jì)劃
9.初識(shí)MongoDB中的索引
10.MongoDB中各種類型的索引
11.MongoDB固定集合
12.MongoDB管道操作符(一)
13.MongoDB管道操作符(二)
14.MongoDB中MapReduce使用
15.MongoDB副本集搭建
16.MongoDB副本集配置


數(shù)據(jù)同步方式

MongoDB中的復(fù)制功能主要是使用操作日志oplog.rs來(lái)實(shí)現(xiàn)的,oplog.rs包含了主節(jié)點(diǎn)的每一次寫(xiě)操作,oplog.rs是主節(jié)點(diǎn)中l(wèi)ocal數(shù)據(jù)庫(kù)的一個(gè)固定集合,我們可以通過(guò)如下命令查看到:

use local
show tables

如下:

備份節(jié)點(diǎn)通過(guò)查詢這個(gè)集合就知道要復(fù)制哪些數(shù)據(jù),同時(shí),每一個(gè)備份節(jié)點(diǎn)也都維護(hù)著自己的oplog.rs,自己的oplog.rs則用來(lái)記錄每一次從主節(jié)點(diǎn)復(fù)制數(shù)據(jù)的操作,如此,每一個(gè)備份節(jié)點(diǎn)都可以再作為數(shù)據(jù)源提供給其他成員使用,如果某一個(gè)備份節(jié)點(diǎn)在使用的過(guò)程中掛掉了,那么當(dāng)它重啟之后,會(huì)自動(dòng)從oplog.rs的最后一個(gè)操作開(kāi)始同步。

上文我們也已經(jīng)說(shuō)過(guò)oplog.rs是一個(gè)固定集合,我們可以通過(guò)db.getCollection("oplog.rs").stats()這個(gè)命令來(lái)查看這個(gè)固定集合的屬性,包括集合大小等,執(zhí)行部分結(jié)果如下:

{
    "ns" : "local.oplog.rs",
    "size" : 18170305,
    "count" : 177443,
    "avgObjSize" : 102,
    "storageSize" : 5902336,
    "capped" : true,
    "max" : -1,
    "maxSize" : 1038090240,
    "sleepCount" : 0,
    "sleepMS" : 0,
}

既然是固定集合,它里邊能夠保存的數(shù)據(jù)大小就是有限的。通常,oplog.rs使用空間的增長(zhǎng)速度與系統(tǒng)處理處理寫(xiě)請(qǐng)求的速率近乎相同,比如主節(jié)點(diǎn)每分鐘處理了1KB的寫(xiě)入請(qǐng)求,那么oplog.rs也可能會(huì)在一分鐘內(nèi)寫(xiě)入1KB條操作日志,但是如果主節(jié)點(diǎn)執(zhí)行了批量刪除的命令,比如下面這種:

db.c1.deleteMany({x:{$type:1}})

此時(shí)每一個(gè)受影響的文檔都會(huì)產(chǎn)生一條oplog中的日志,這個(gè)時(shí)候oplog.rs中的日志會(huì)快速增加。

成員狀態(tài)

到目前為止我們了解到的成員狀態(tài)有兩種,一個(gè)是PRIMARY,還有一個(gè)是SECONDDARY,成員狀態(tài)的獲取需要靠心跳來(lái)維護(hù),副本集中的每一個(gè)成員每隔兩秒就會(huì)向其他成員發(fā)送一個(gè)心跳請(qǐng)求,用來(lái)檢查成員的狀態(tài),成員的狀態(tài)主要有如下幾種:

STARTUP

副本集中的成員剛剛啟動(dòng)時(shí)處于這個(gè)狀態(tài)下,此時(shí),MongoDB會(huì)去加載成員的副本集配置,配置加載成功之后,就進(jìn)入到STARTUP2的狀態(tài)。

STARTUP2

整個(gè)初始化同步過(guò)程都處于這個(gè)狀態(tài)。

RECOVERING

這個(gè)狀態(tài)是由STARTUP2狀態(tài)來(lái)的,此時(shí)成員運(yùn)轉(zhuǎn)正常,但是此時(shí)還不能處理讀取請(qǐng)求。

ARBITER

這是仲裁者所處的狀態(tài)。

DOWN

當(dāng)一個(gè)原本運(yùn)行正常的成員無(wú)法訪問(wèn)到時(shí),該成員就處于DOWN的狀態(tài)。

UNKNOWN

如果一個(gè)成員無(wú)法到達(dá)其他任何成員,該成員就處于UNKNOWN狀態(tài),比如我們利用rs.add()方法添加一個(gè)不存在的成員,這個(gè)成員的狀態(tài)就是UNKNOWN。

REMOVED

成員被從副本集中移除時(shí)就變成這個(gè)狀態(tài)。

ROLLBACK

如果成員正在進(jìn)行數(shù)據(jù)回滾,它就處于ROLLBACK狀態(tài),回滾結(jié)束后會(huì)轉(zhuǎn)換為RECOVERING狀態(tài)。

FATAL

當(dāng)一個(gè)成員發(fā)生了不可挽回的錯(cuò)誤時(shí),且不再嘗試恢復(fù)正常的話,就處于這個(gè)狀態(tài)。

主節(jié)點(diǎn)轉(zhuǎn)備份節(jié)點(diǎn)

通過(guò)如下命令可以讓主節(jié)點(diǎn)轉(zhuǎn)為備份節(jié)點(diǎn):

rs.stepDown()

主節(jié)點(diǎn)轉(zhuǎn)為備份節(jié)點(diǎn)之后會(huì)有新的主節(jié)點(diǎn)被選舉出來(lái),可以通過(guò)rs.status()來(lái)查看新的主節(jié)點(diǎn)。

rs.status()方法

前面我們已經(jīng)多次使用過(guò)rs.status()方法,rs.status()方法會(huì)列出每個(gè)備份節(jié)點(diǎn)的含義,我們來(lái)看看這些參數(shù)的含義,先來(lái)列出一個(gè)rs.status()方法的返回值樣例:

{
"members" : [
    {
        "_id" : 1,
        "name" : "192.168.248.135:27017",
        "health" : 1,
        "state" : 2,
        "stateStr" : "SECONDARY",
        "uptime" : 241,
        "optime" : {
                "ts" : Timestamp(1509881297, 1),
                "t" : NumberLong(16)
        },
        "optimeDurable" : {
                "ts" : Timestamp(1509881297, 1),
                "t" : NumberLong(16)
        },
        "optimeDate" : ISODate("2017-11-05T11:28:17Z"),
        "optimeDurableDate" : ISODate("2017-11-05T11:28:17Z"),
        "lastHeartbeat" : ISODate("2017-11-05T11:28:18.073Z"),
        "lastHeartbeatRecv" : ISODate("2017-11-05T11:28:18.769Z"),
        "pingMs" : NumberLong(0),
        "syncingTo" : "192.168.248.136:27017",
        "configVersion" : 15
    },
    {
        "_id" : 3,
        "name" : "192.168.248.136:27017",
        "health" : 1,
        "state" : 1,
        "stateStr" : "PRIMARY",
        "uptime" : 250,
        "optime" : {
                "ts" : Timestamp(1509881297, 1),
                "t" : NumberLong(16)
        },
        "optimeDate" : ISODate("2017-11-05T11:28:17Z"),
        "electionTime" : Timestamp(1509881276, 1),
        "electionDate" : ISODate("2017-11-05T11:27:56Z"),
        "configVersion" : 15,
        "self" : true
    }
]
}

1.stateStr用來(lái)描述當(dāng)前節(jié)點(diǎn)的狀態(tài)。
2.uptime表示從成員可達(dá)到現(xiàn)在所經(jīng)歷的時(shí)間。
3.optimeDate表示每個(gè)成員的oplog中最后一個(gè)操作發(fā)生的時(shí)間。
4.lastHeartbeat表示當(dāng)前服務(wù)器最后一次收到其他成員心跳的時(shí)間。
5.pingMs表示心跳從當(dāng)前服務(wù)器到達(dá)某個(gè)成員所花費(fèi)的平均時(shí)間。
6.syncingTo表示同步的數(shù)據(jù)源。
7.health表示該服務(wù)器是否可達(dá),1表示可達(dá),0表示不可達(dá)。

復(fù)制鏈問(wèn)題

數(shù)據(jù)復(fù)制時(shí)可以從主節(jié)點(diǎn)直接復(fù)制,也可以從備份節(jié)點(diǎn)開(kāi)始復(fù)制,從備份節(jié)點(diǎn)復(fù)制可以形成復(fù)制鏈,如果想禁止復(fù)制鏈,即所有的數(shù)據(jù)都從主節(jié)點(diǎn)復(fù)制,可以通過(guò)chainingAllowed屬性來(lái)設(shè)置,具體步驟如下:

config=rs.config()
config.settings.chainingAllowed=false
rs.reconfig(config)

好了,MongoDB中副本集的其他細(xì)節(jié)我們就先說(shuō)到這里,小伙伴們有問(wèn)題歡迎留言討論。

參考資料:

1.《MongoDB權(quán)威指南第2版》

更多資料請(qǐng)關(guān)注公眾號(hào):

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/19161.html

相關(guān)文章

  • 深入淺出MongoDB 復(fù)制

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

    Jacendfeng 評(píng)論0 收藏0
  • 兩年了,我寫(xiě)了這些干貨!

    摘要:開(kāi)公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來(lái)越多時(shí),大家搜索起來(lái)就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章系列處理登錄請(qǐng)求前后端分離一使用完美處理權(quán)限問(wèn)題前后端分離二使用完美處理權(quán)限問(wèn)題前后端分離三中密碼加鹽與中異常統(tǒng)一處理 開(kāi)公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來(lái)越多時(shí),大家搜索起來(lái)就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章! Spring Boo...

    huayeluoliuhen 評(píng)論0 收藏0
  • 初識(shí)MongoDB分片

    摘要:復(fù)制一份,命名為,修改文件內(nèi)容如下注意改為我們第一步創(chuàng)建的目錄,端口號(hào)改為這個(gè)隨意,只要該端口沒(méi)被占用即可,表示這是一個(gè)配置服務(wù)器,另外由于我們的配置服務(wù)器要做成備份集,所以要設(shè)置。 分片是指將數(shù)據(jù)拆分,拆分后存放在不同的機(jī)器上的過(guò)程,以此來(lái)降低單個(gè)服務(wù)器的壓力,同時(shí)也解決單個(gè)服務(wù)器硬盤空間不足的問(wèn)題,讓我們可以用廉價(jià)的機(jī)器實(shí)現(xiàn)高性能的數(shù)據(jù)架構(gòu)。有的小伙伴不理解分片和副本集的差異,一言...

    Nino 評(píng)論0 收藏0
  • MongoDB教程合

    摘要:磕磕絆絆,我們的系列教程終于落下帷幕,從月第一篇開(kāi)始到現(xiàn)在,中間有一段時(shí)間開(kāi)小差,不過(guò)還好沒(méi)有爛尾。好了,這里我再把本系列的所有文章羅列出來(lái),以供小伙伴們搜索查看。 磕磕絆絆,我們的MongoDB系列教程終于落下帷幕,從11月21第一篇開(kāi)始到現(xiàn)在,中間有一段時(shí)間開(kāi)小差,不過(guò)還好沒(méi)有爛尾。好了,這里我再把本系列的所有文章羅列出來(lái),以供小伙伴們搜索查看。 1.Linux上安裝Mongo...

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

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

0條評(píng)論

閱讀需要支付1元查看
<