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

首頁 數(shù)據(jù)庫 MongoDB 講講關(guān)于 MongoDB 復(fù)制集的幾個問題

講講關(guān)于 MongoDB 復(fù)制集的幾個問題

Dec 21, 2020 pm 06:01 PM
mongodb

MongoDB教程介紹為什么要使用復(fù)制集

講講關(guān)于 MongoDB 復(fù)制集的幾個問題

推薦(免費):MongoDB教程

為什么要使用復(fù)制集

1.備份數(shù)據(jù)
通過自帶的 mongo_dump/mongo_restore 工具也可以實現(xiàn)備份,但是畢竟沒有復(fù)制集的自動同步備份方便。

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

3.在某些特定的場景下提高讀性能
默認情況下,讀和寫都只能在主節(jié)點上進行。
下面是MongoDB的客戶端支持5種復(fù)制集讀選項:

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

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

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

說說我自己的看法:復(fù)制集并不是為了提高讀性能而存在的,除了個別場景,不推薦在從節(jié)點上進行讀操作。如果想提升讀性能,那么請使用索引和分片。插一句,如果數(shù)據(jù)規(guī)模不大,就沒必要使用分片了。我們線上數(shù)據(jù)庫中單個集合記錄有將近 2 億條,性能還比較 OK(當(dāng)然,機器配置也不差,而且上面就只跑了一個 Redis 和一個 MongoDB)。

如何部署復(fù)制集

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

如何在程序中使用 MongoDB 復(fù)制集故障自動轉(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'));

這樣配置后,如果只是其中一臺 MongoDB 服務(wù)掛斷后,剩余的節(jié)點會自動選舉出新的主節(jié)點,程序還是可以繼續(xù)正常運行。在選舉的過程中,程序還是會拋出異常的,盡管選舉過程很快,但是為了程序的健壯性,必須考慮異常的處理。當(dāng)然,如果選舉不出新的主節(jié)點,那么整個 MongoDB 就不可用了。(根據(jù)上面講的,如果復(fù)制集的讀選項是配置的 primaryPreferred。如果沒有了主節(jié)點,但是從節(jié)點還可用的話,那么讀操作將轉(zhuǎn)移到從節(jié)點上去,這樣整個 MongoDB 復(fù)制集還能提供讀操作服務(wù))

其實如果指定了復(fù)制集名 'replicaSet' => 'rs0',那么就算不列出所有節(jié)點地址,僅寫一個有效節(jié)點地址,mongo 驅(qū)動會自動獲取到所有有效節(jié)點,$client->getHosts() 方法可以查看所有有效節(jié)點的地址。

但是如果你只寫了一個節(jié)點地址,剛好是那個節(jié)點掛掉了,那就連不上了。所有我建議配置完整的節(jié)點地址列表。

同步的原理是什么

開啟復(fù)制集后,會在 local 庫下生成一個集合叫 oplog.rs,這是一個有限集合,也就是大小是固定的。每次對數(shù)據(jù)庫的寫操作都會被記錄到這個集合里面。復(fù)制集中的節(jié)點就是通過讀取其他節(jié)點上面的 oplog 來實現(xiàn)數(shù)據(jù)同步的。

舉個例子:
用客戶端向主節(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 記錄,當(dāng)其他節(jié)點的 oplog 已經(jīng)發(fā)生的覆蓋。即使這個從節(jié)點后來恢復(fù)了正常,也不會和其他節(jié)點保持數(shù)據(jù)一致了。因為,覆蓋的就永遠回不來了。

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

如何重新同步

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

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

當(dāng)復(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 復(fù)制集的幾個問題的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系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)

使用 Composer 解決推薦系統(tǒng)的困境:andres-montanez/recommendations-bundle 的實踐 使用 Composer 解決推薦系統(tǒng)的困境:andres-montanez/recommendations-bundle 的實踐 Apr 18, 2025 am 11:48 AM

在開發(fā)一個電商網(wǎng)站時,我遇到了一個棘手的問題:如何為用戶提供個性化的商品推薦。最初,我嘗試了一些簡單的推薦算法,但效果并不理想,用戶的滿意度也因此受到影響。為了提升推薦系統(tǒng)的精度和效率,我決定采用更專業(yè)的解決方案。最終,我通過Composer安裝了andres-montanez/recommendations-bundle,這不僅解決了我的問題,還大大提升了推薦系統(tǒng)的性能??梢酝ㄟ^一下地址學(xué)習(xí)composer:學(xué)習(xí)地址

CentOS上GitLab的數(shù)據(jù)庫如何選擇 CentOS上GitLab的數(shù)據(jù)庫如何選擇 Apr 14, 2025 pm 04:48 PM

CentOS系統(tǒng)上GitLab數(shù)據(jù)庫部署指南選擇合適的數(shù)據(jù)庫是成功部署GitLab的關(guān)鍵步驟。GitLab兼容多種數(shù)據(jù)庫,包括MySQL、PostgreSQL和MongoDB。本文將詳細介紹如何選擇并配置這些數(shù)據(jù)庫。數(shù)據(jù)庫選擇建議MySQL:一款廣泛應(yīng)用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),性能穩(wěn)定,適用于大多數(shù)GitLab部署場景。PostgreSQL:功能強大的開源RDBMS,支持復(fù)雜查詢和高級特性,適合處理大型數(shù)據(jù)集。MongoDB:流行的NoSQL數(shù)據(jù)庫,擅長處理海

MongoDB與Oracle:了解關(guān)鍵差異 MongoDB與Oracle:了解關(guān)鍵差異 Apr 16, 2025 am 12:01 AM

MongoDB適合處理大規(guī)模非結(jié)構(gòu)化數(shù)據(jù),Oracle適用于需要事務(wù)一致性的企業(yè)級應(yīng)用。 1.MongoDB提供靈活性和高性能,適合處理用戶行為數(shù)據(jù)。 2.Oracle以穩(wěn)定性和強大功能著稱,適用于金融系統(tǒng)。 3.MongoDB使用文檔模型,Oracle使用關(guān)系模型。 4.MongoDB適合社交媒體應(yīng)用,Oracle適合企業(yè)級應(yīng)用。

MongoDB vs. Oracle:為您的需求選擇正確的數(shù)據(jù)庫 MongoDB vs. Oracle:為您的需求選擇正確的數(shù)據(jù)庫 Apr 22, 2025 am 12:10 AM

MongoDB適合非結(jié)構(gòu)化數(shù)據(jù)和高擴展性需求,Oracle適合需要嚴格數(shù)據(jù)一致性的場景。1.MongoDB靈活存儲不同結(jié)構(gòu)數(shù)據(jù),適合社交媒體和物聯(lián)網(wǎng)。2.Oracle結(jié)構(gòu)化數(shù)據(jù)模型確保數(shù)據(jù)完整性,適用于金融交易。3.MongoDB通過分片橫向擴展,Oracle通過RAC縱向擴展。4.MongoDB維護成本低,Oracle維護成本高但支持完善。

CentOS MongoDB備份策略是什么 CentOS MongoDB備份策略是什么 Apr 14, 2025 pm 04:51 PM

CentOS系統(tǒng)下MongoDB高效備份策略詳解本文將詳細介紹在CentOS系統(tǒng)上實施MongoDB備份的多種策略,以確保數(shù)據(jù)安全和業(yè)務(wù)連續(xù)性。我們將涵蓋手動備份、定時備份、自動化腳本備份以及Docker容器環(huán)境下的備份方法,并提供備份文件管理的最佳實踐。手動備份:利用mongodump命令進行手動全量備份,例如:mongodump-hlocalhost:27017-u用戶名-p密碼-d數(shù)據(jù)庫名稱-o/備份目錄此命令會將指定數(shù)據(jù)庫的數(shù)據(jù)及元數(shù)據(jù)導(dǎo)出到指定的備份目錄。

mongodb怎么設(shè)置用戶 mongodb怎么設(shè)置用戶 Apr 12, 2025 am 08:51 AM

要設(shè)置 MongoDB 用戶,請按照以下步驟操作:1. 連接到服務(wù)器并創(chuàng)建管理員用戶。2. 創(chuàng)建要授予用戶訪問權(quán)限的數(shù)據(jù)庫。3. 使用 createUser 命令創(chuàng)建用戶并指定其角色和數(shù)據(jù)庫訪問權(quán)限。4. 使用 getUsers 命令檢查創(chuàng)建的用戶。5. 可選地設(shè)置其他權(quán)限或授予用戶對特定集合的權(quán)限。

mongodb怎么啟動 mongodb怎么啟動 Apr 12, 2025 am 08:39 AM

要啟動 MongoDB 服務(wù)器:在 Unix 系統(tǒng)中,運行 mongod 命令。在 Windows 系統(tǒng)中,運行 mongod.exe 命令??蛇x:使用 --dbpath、--port、--auth 或 --replSet 選項設(shè)置配置。使用 mongo 命令驗證連接是否成功。

Debian MongoDB如何進行數(shù)據(jù)加密 Debian MongoDB如何進行數(shù)據(jù)加密 Apr 12, 2025 pm 08:03 PM

在Debian系統(tǒng)上為MongoDB數(shù)據(jù)庫加密,需要遵循以下步驟:第一步:安裝MongoDB首先,確保您的Debian系統(tǒng)已安裝MongoDB。如果沒有,請參考MongoDB官方文檔進行安裝:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-debian/第二步:生成加密密鑰文件創(chuàng)建一個包含加密密鑰的文件,并設(shè)置正確的權(quán)限:ddif=/dev/urandomof=/etc/mongodb-keyfilebs=512

See all articles