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

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

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

Dec 21, 2020 pm 06:01 PM
mongodb

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

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

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

為什麼要使用複製集

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

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

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

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

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

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

說說我自己的看法:複製集並不是為了提高讀取效能而存在的,除了個別場景,不建議在從節(jié)點(diǎn)上進(jìn)行讀取操作。如果想提升讀取效能,那麼請使用索引和分片。插一句,如果資料規(guī)模不大,就沒必要使用分片了。我們線上資料庫中單一集合記錄有將近 2 億條,效能還比較 OK(當(dāng)然,機(jī)器配置也不差,而且上面就只跑了一個 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é)點(diǎn)會自動選出新的主節(jié)點(diǎn),程式還是可以繼續(xù)正常運(yùn)作。在選舉的過程中,程序還是會拋出異常的,儘管選舉過程很快,但是為了程序的健壯性,必須考慮異常的處理。當(dāng)然,如果選舉不出新的主節(jié)點(diǎn),那麼整個 MongoDB 就不可用了。 (根據(jù)上面講的,如果複製集的讀取選項是配置的

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

其實如果指定了複製集名

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

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

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

同步的原理是什麼

開啟複製集後,會在

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

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

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

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

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

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

什么情況下需要重新同步

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

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

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

如何重新同步

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

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

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

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

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

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 複製集的幾個問題的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

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

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的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。本文將詳細(xì)介紹如何選擇並配置這些數(shù)據(jù)庫。數(shù)據(jù)庫選擇建議MySQL:一款廣泛應(yīng)用的關(guān)係型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),性能穩(wěn)定,適用於大多數(shù)GitLab部署場景。 PostgreSQL:功能強(qiáng)大的開源RDBMS,支持複雜查詢和高級特性,適合處理大型數(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)定性和強(qiáng)大功能著稱,適用于金融系統(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ù)和高擴(kuò)展性需求,Oracle適合需要嚴(yán)格數(shù)據(jù)一致性的場景。 1.MongoDB靈活存儲不同結(jié)構(gòu)數(shù)據(jù),適合社交媒體和物聯(lián)網(wǎng)。 2.Oracle結(jié)構(gòu)化數(shù)據(jù)模型確保數(shù)據(jù)完整性,適用於金融交易。 3.MongoDB通過分片橫向擴(kuò)展,Oracle通過RAC縱向擴(kuò)展。 4.MongoDB維護(hù)成本低,Oracle維護(hù)成本高但支持完善。

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

CentOS系統(tǒng)下MongoDB高效備份策略詳解本文將詳細(xì)介紹在CentOS系統(tǒng)上實施MongoDB備份的多種策略,以確保數(shù)據(jù)安全和業(yè)務(wù)連續(xù)性。我們將涵蓋手動備份、定時備份、自動化腳本備份以及Docker容器環(huán)境下的備份方法,並提供備份文件管理的最佳實踐。手動備份:利用mongodump命令進(jìn)行手動全量備份,例如: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)中,運(yùn)行 mongod 命令。在 Windows 系統(tǒng)中,運(yùn)行 mongod.exe 命令。可選:使用 --dbpath、--port、--auth 或 --replSet 選項設(shè)置配置。使用 mongo 命令驗證連接是否成功。

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

在Debian系統(tǒng)上為MongoDB數(shù)據(jù)庫加密,需要遵循以下步驟:第一步:安裝MongoDB首先,確保您的Debian系統(tǒng)已安裝MongoDB。如果沒有,請參考MongoDB官方文檔進(jìn)行安裝: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