MongoDB副本集丟失數據的測試實例教程
在MongoDB副本集的測試中發(fā)現了一個丟數據的案例。
1. 概要描述
測試場景為:一主一從一驗證
測試案例
step1 :關閉從副本;
step 2 ;向主副本中插入那條數據;
step 3 :關閉主副本;
step 4 :開啟輔助副本,此副本升級為主副本,這是后會看到新的主副本沒有剛才插入的幾筆數據。
----測試時,請注意測試步驟。
step 5 :原主節(jié)點 再次加入到集群中后,會變成新的輔助副本。測試插入的數據會產生回滾。
2. 具體的測試步驟
(1)測試服務器,原測試環(huán)境
主Server:Port | 副Server:Port | 見證Server:Port |
XXX.XXX.XXX.124:27220 | XXX.XXX.XXX.123:27221 | XXX.XXX.XXX.134:27220 |
(2)測試步驟
Step 1 向主數據庫(XXX.XXX.XXX.124:27220),插入以下數據,執(zhí)行時間要長一些。
for(var i = 0; i < 100000; i++) { db.order0522.insert({a: i});};
Step 2 在上述命令執(zhí)行的過程中,關于副主Server上的mongodb服務,服務命名為mongodboplogtest.service
systemctl stop mongodboplogtest.service
Step 3.查詢主副本上數據庫insert的數據量,為100000.命令完全插入。
Step 4.關閉主副本上的Mongodb 服務,服務命名為mongodboplogtest.service
systemctl stop mongodboplogtest.service
Step 5 開啟輔助節(jié)點上的MongoDB服務
systemctl start mongodboplogtest.service
step 6 此時輔助節(jié)點(XXX.XXX.XXX.123)升級為主節(jié)點,此時數據為30337(100000-30337 筆記錄丟失了)
此時 124 (原主節(jié)點)為"stateStr" : "(not reachable/healthy)"
step 7 開啟原主節(jié)點上的服務,集群的狀態(tài),關于原主節(jié)點的描述短暫處于"stateStr" : "ROLLBACK"
step 8 回滾后,狀態(tài)變?yōu)?stateStr" : "SECONDARY"
step 9 查詢原主節(jié)點數據,此時數據量為30337(100000-30337 筆也記錄丟失了)
3.丟失的數據是否可以找到
我們發(fā)現,重啟原主節(jié)點(XXX.XXX.XXX.124)mongodb服務后,在數據目錄下多了一個rollback 目錄。
重啟前的數據目錄
重啟后的數據目錄
進去這個目錄后,我們看到生成了一個以數據庫+集合名字+時間的 bson 文件。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。
相關文章
MongoDB的備份(mongodump)與恢復(mongorestore)
在使用MongoDB時,數據備份與恢復是非常重要的一環(huán),以防止數據丟失或意外刪除,本文就來介紹一下MongoDB的備份(mongodump)與恢復(mongorestore),感興趣的可以了解一下2023-12-12基于Mongodb分布式鎖解決定時任務并發(fā)執(zhí)行問題
這篇文章主要介紹了基于Mongodb分布式鎖解決定時任務并發(fā)執(zhí)行問題,網上有很多分布式鎖的實現方案,基于redis、zk、等有很多,但是我的就是一個用了mysql和mongo的小應用,本文給大家詳細講解,需要的朋友可以參考下2023-04-04