国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 資料庫 MongoDB 講講關(guān)於 MongoDB 複製集的幾個問題

講講關(guān)於 MongoDB 複製集的幾個問題

Dec 21, 2020 pm 06:01 PM
mongodb 複製集

MongoDB教學(xué)介紹為什麼要使用複製集

講講關(guān)於 MongoDB 複製集的幾個問題

推薦(免費):MongoDB教學(xué)

為什麼要使用複製集

1.備份資料
透過自帶的mongo_dump/mongo_restore 工具也可以實現(xiàn)備份,但畢竟沒有複製集的自動同步備份方便。

2.故障自動轉(zhuǎn)移
部署了複製集,當主節(jié)點掛了後,叢集會自動投票再從節(jié)點中選出一個新的主節(jié)點,繼續(xù)提供服務(wù)。而且這一切都是自動完成的,對維運人員和開發(fā)人員是透明的。當然,發(fā)生故障了還是得人工及時處理,不要過度依賴複製集,萬一都掛了,那就連喘息的時間都沒有了。

3.在某些特定的場景下提高讀取效能
預(yù)設(shè)情況下,讀取和寫入都只能在主節(jié)點上進行。
下面是MongoDB的客戶端支援5種複製集讀選項:

  • primary:預(yù)設(shè)模式,所有的讀取操作都在複製集的 主節(jié)點 進行的。
  • primaryPreferred:在大多數(shù)情況時,讀取操作在 主節(jié)點 上進行,但是如果主節(jié)點不可用了,讀取操作就會轉(zhuǎn)移到 從節(jié)點 上執(zhí)行。
  • secondary:所有的讀取操作都在複製集的 從節(jié)點 上執(zhí)行。
  • secondaryPreferred:在大多數(shù)情況下,讀取操作都是在 從節(jié)點 上進行的,但是當 從節(jié)點 不可用了,讀取操作會轉(zhuǎn)移到 主節(jié)點 上進行。
  • nearest:讀取操作會在 複製集 中網(wǎng)路延時最小的節(jié)點上進行,與節(jié)點類型無關(guān)。

來源:http://docs.mongoing.com/manual-zh/core/re...

不建議在從節(jié)點上進行讀取操作,因為從節(jié)點上的資料可能不是最新資料(主要原因)。
在從節(jié)點上進行讀取操作的場景很有限,官方手冊中寫明了適用的場景和不推薦從節(jié)點讀取操作的多個原因:http://docs.mongoing.com/manual-zh/ core/re...

說說我自己的看法:複製集並不是為了提高讀取效能而存在的,除了個別場景,不建議在從節(jié)點上進行讀取操作。如果想提升讀取效能,那麼請使用索引和分片。插一句,如果資料規(guī)模不大,就沒必要使用分片了。我們線上資料庫中單一集合記錄有將近 2 億條,效能還比較 OK(當然,機器配置也不差,而且上面就只跑了一個 Redis 和一個 MongoDB)。

如何部署複製集

##請看手冊:http://docs.mongoing.com/manual-zh/tutoria...

如何在程式中使用MongoDB 複製集故障自動轉(zhuǎn)移的特性

以PHP 的mongo 驅(qū)動為例。

$client?=?new?MongoClient('mongodb://192.168.1.2:27018,192.168.1.3:27019,192.168.1.4:27020',?array('replicaSet'?=>?'rs0'));
這樣設(shè)定後,如果只是其中一臺 MongoDB 服務(wù)掛接後,剩餘的節(jié)點會自動選出新的主節(jié)點,程式還是可以繼續(xù)正常運作。在選舉的過程中,程序還是會拋出異常的,儘管選舉過程很快,但是為了程序的健壯性,必須考慮異常的處理。當然,如果選舉不出新的主節(jié)點,那麼整個 MongoDB 就不可用了。 (根據(jù)上面講的,如果複製集的讀取選項是配置的

primaryPreferred。如果沒有了主節(jié)點,但是從節(jié)點還可用的話,那麼讀取操作將轉(zhuǎn)移到從節(jié)點上去,這樣整個MongoDB 複製集還能提供讀取操作服務(wù))

其實如果指定了複製集名

'replicaSet' => 'rs0',那麼就算不列出所有節(jié)點位址,只寫一個有效節(jié)點位址,mongo 驅(qū)動程式會自動取得到所有有效節(jié)點,$client->getHosts() 方法可以查看所有有效節(jié)點的位址。

但是如果你只寫了一個節(jié)點位址,剛好是那個節(jié)點掛掉了,那就連不上了。

所有我建議配置完整的節(jié)點位址清單

同步的原理是什麼

開啟複製集後,會在

local 函式庫下產(chǎn)生一個集合叫oplog.rs,這是一個有限集合,也就是大小是固定的。每次資料庫的寫入操作都會被記錄到這個集合裡面。複製集中的節(jié)點就是透過讀取其他節(jié)點上面的 oplog 來實現(xiàn)資料同步的。

舉個例子:
用客戶端向主節(jié)點添加了 100 條記錄,那么 oplog 中也會有這 100 條的 insert 記錄。從節(jié)點通過獲取主節(jié)點的 oplog,也執(zhí)行這 100 條 oplog 記錄。這樣,從節(jié)點也就復(fù)制了主節(jié)點的數(shù)據(jù),實現(xiàn)了同步。

需要說明的是:并不是從節(jié)點只能獲取主節(jié)點的 oplog。

為了提高復(fù)制的效率,復(fù)制集中所有節(jié)點之間會互相進行心跳檢測(通過ping)。每個節(jié)點都可以從任何其他節(jié)點上獲取oplog。

還有,用一條語句批量刪除 50 條記錄,并不是在 oplog 中只記錄一條數(shù)據(jù),而是記錄 50 條單條刪除的記錄。

oplog中的每一條操作,無論是執(zhí)行一次還是多次執(zhí)行,對數(shù)據(jù)集的影響結(jié)果是一樣的,i.e 每條oplog中的操作都是冪等的。

什么情況下需要重新同步

在上一個問題中得知:oplog 大小是固定的,而且 oplog 里面的記錄數(shù)不一定和節(jié)點中的數(shù)據(jù)量成正比。那么,新記錄肯定會將前面的老記錄給覆蓋。

如果,有天一個從節(jié)點掛了,其他節(jié)點還在正常運行,繼續(xù)有寫操作,oplog 繼續(xù)增長。而這個掛掉的節(jié)點一直不能從其他節(jié)點那里同步最新的 oplog 記錄,當其他節(jié)點的 oplog 已經(jīng)發(fā)生的覆蓋。即使這個從節(jié)點后來恢復(fù)了正常,也不會和其他節(jié)點保持數(shù)據(jù)一致了。因為,覆蓋的就永遠回不來了。

那么,這個時候就得重新同步了。恩,回不去的就永遠回不去了,再找個新的重新開始吧。(逃

如何重新同步

參見:復(fù)制集成員的重新同步

什么時候應(yīng)該使用投票節(jié)點

當復(fù)制集中有偶數(shù)個節(jié)點時,應(yīng)該再加一個投票節(jié)點,用于打破投票僵局。

比如:我線上共有3臺服務(wù)器,其中1臺是作為 Web 服務(wù)器;其余2臺作為 DB 服務(wù)器,各部署了1個MongoDB節(jié)點,構(gòu)成了2個節(jié)點的復(fù)制集。這個時候,我并沒有多余的機器了。在這個情況下,如果任意一臺 DB 服務(wù)器上的 MongoDB 掛了,那么另外一臺的 MongoDB 必然變?yōu)?SECONDARY 節(jié)點,那么就意味著 MongoDB 是不可用的了。為了避免這種情況,提高服務(wù)的可用性,可以在 Web 服務(wù)器上部署一個投票節(jié)點。投票節(jié)點并不存儲數(shù)據(jù),因此不能升職為 PRIMARY 節(jié)點,它對于硬件資源要求很低,并不會對 Web 服務(wù)器上的其他程序產(chǎn)生太大影響。這種情況下,如果任意一臺 DB 服務(wù)器掛了,另外一臺服務(wù)器上的 MongoDB 將成為 PRIMARY 節(jié)點,此時 MongoDB 還是依舊對外提供服務(wù)的。乘此時機,趕緊排查出故障的那臺服務(wù)器的原因,盡快恢復(fù)服務(wù)。

為了讓投票節(jié)點可以占用更少的資源,可以在配置文件中添加以下幾個配置項:

journal?=?false
smallfiles?=?true
noprealloc?=?true

主從復(fù)制

master-slave 復(fù)制架構(gòu)已經(jīng)不推薦使用了,建議使用 replica sets 復(fù)制集架構(gòu)。
參見:http://docs.mongoing.com/manual-zh/core/ma...

以上是講講關(guān)於 MongoDB 複製集的幾個問題的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應(yīng)的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1501
276
MongoDB與Oracle:探索NOSQL和關(guān)係方法 MongoDB與Oracle:探索NOSQL和關(guān)係方法 May 07, 2025 am 12:02 AM

在不同的應(yīng)用場景下,選擇MongoDB還是Oracle取決於具體需求:1)如果需要處理大量非結(jié)構(gòu)化數(shù)據(jù)且對數(shù)據(jù)一致性要求不高,選擇MongoDB;2)如果需要嚴格的數(shù)據(jù)一致性和復(fù)雜查詢,選擇Oracle。

更新MongoDB集合中文檔的多種方式 更新MongoDB集合中文檔的多種方式 Jun 04, 2025 pm 10:30 PM

MongoDB中更新文檔的方法包括:1.使用updateOne和updateMany方法進行基本更新;2.使用$set、$inc、$push等操作符進行高級更新。通過這些方法和操作符,你可以高效地管理和更新MongoDB中的數(shù)據(jù)。

MongoDB的目的:靈活的數(shù)據(jù)存儲和管理 MongoDB的目的:靈活的數(shù)據(jù)存儲和管理 May 09, 2025 am 12:20 AM

MongoDB的靈活性體現(xiàn)在:1)能存儲任意結(jié)構(gòu)的數(shù)據(jù),2)使用BSON格式,3)支持複雜查詢和聚合操作。這種靈活性使其在處理多變數(shù)據(jù)結(jié)構(gòu)時表現(xiàn)出色,是現(xiàn)代應(yīng)用開發(fā)的強大工具。

查看MongoDB中所有數(shù)據(jù)庫的方法 查看MongoDB中所有數(shù)據(jù)庫的方法 Jun 04, 2025 pm 10:42 PM

在MongoDB中查看所有數(shù)據(jù)庫的方法是輸入命令“showdbs”。 1.該命令只顯示非空數(shù)據(jù)庫。 2.可以通過“use”命令切換數(shù)據(jù)庫並插入數(shù)據(jù)使其顯示。 3.注意內(nèi)部數(shù)據(jù)庫如“l(fā)ocal”和“config”。 4.使用驅(qū)動程序時需用“l(fā)istDatabases()”方法獲取詳細信息。 5.“db.stats()”命令可查看數(shù)據(jù)庫詳細統(tǒng)計信息。

MongoDB與Oracle:文檔數(shù)據(jù)庫與關(guān)係數(shù)據(jù)庫 MongoDB與Oracle:文檔數(shù)據(jù)庫與關(guān)係數(shù)據(jù)庫 May 05, 2025 am 12:04 AM

引言在現(xiàn)代數(shù)據(jù)管理的世界裡,選擇合適的數(shù)據(jù)庫系統(tǒng)對於任何項目來說都是至關(guān)重要的。我們常常會面臨一個選擇:是選擇MongoDB這種文檔型數(shù)據(jù)庫,還是選擇Oracle這種關(guān)係型數(shù)據(jù)庫?今天我將帶你深入探討MongoDB和Oracle之間的差異,幫助你理解它們的優(yōu)劣勢,並分享我在實際項目中使用它們的經(jīng)驗。本文將會帶你從基礎(chǔ)知識開始,逐步深入到這兩類數(shù)據(jù)庫的核心特性、使用場景和性能表現(xiàn)。無論你是剛?cè)腴T的數(shù)據(jù)管理者,還是有經(jīng)驗的數(shù)據(jù)庫管理員,讀完這篇文章,你將對如何在項目中選擇和使用MongoDB或Ora

在MongoDB中創(chuàng)建集合的命令及參數(shù)設(shè)置 在MongoDB中創(chuàng)建集合的命令及參數(shù)設(shè)置 May 15, 2025 pm 11:12 PM

在MongoDB中創(chuàng)建集合的命令是db.createCollection(name,options)。具體步驟包括:1.使用基本命令db.createCollection("myCollection")創(chuàng)建集合;2.設(shè)置options參數(shù),如capped、size、max、storageEngine、validator、validationLevel和validationAction,例如db.createCollection("myCappedCollection

MongoDB:文檔數(shù)據(jù)庫解釋了 MongoDB:文檔數(shù)據(jù)庫解釋了 Apr 30, 2025 am 12:04 AM

MongoDB是NoSQL數(shù)據(jù)庫,適用於處理大量非結(jié)構(gòu)化數(shù)據(jù)。 1)它使用文檔和集合存儲數(shù)據(jù),文檔類似JSON對象,集合類似SQL表。 2)MongoDB通過B樹索引和分片實現(xiàn)高效數(shù)據(jù)操作。 3)基本操作包括連接、插入和查詢文檔;高級操作如聚合管道可進行複雜數(shù)據(jù)處理。 4)常見錯誤包括ObjectId處理不當和索引使用不當。 5)性能優(yōu)化包括索引優(yōu)化、分片、讀寫分離和數(shù)據(jù)建模。

Mongodb注定要失敗嗎?消除神話 Mongodb注定要失敗嗎?消除神話 May 03, 2025 am 12:06 AM

MongoDB並未註定要沒落。 1)其優(yōu)勢在於靈活性和可擴展性,適合處理複雜數(shù)據(jù)結(jié)構(gòu)和大規(guī)模數(shù)據(jù)。 2)劣勢包括高內(nèi)存使用和較晚引入的ACID事務(wù)支持。 3)儘管存在性能和事務(wù)支持的質(zhì)疑,但MongoDB通過技術(shù)改進和市場需求的推動,仍然是一個強大的數(shù)據(jù)庫解決方案。

See all articles