Mongodb

oplog增量備份失敗

  • March 10, 2021

我已經使用 mongodump 安排了 oplog 增量轉儲,但它在大多數伺服器上經常失敗。我有一個分片集群,定義了大約 200GB 的 oplog 大小和大約 30-40 小時的 oplog 視窗。

我認為這是因為在轉儲開始之前出現消息“WiredTiger 記錄儲存 oplog 截斷”,這在每次失敗期間都很常見。其他時候,轉儲執行得非常好。我已經分析了 oplog 視窗和大小,這很好。oplog 開始數據比我在 oplog 轉儲期間使用的時間戳要舊得多。

以下是一些日誌:

  1. 從 mongod.log 和我的備份腳本:

2020-07-19T16:28:10.472+0000 I STORAGE  [WT RecordStoreThread: local.oplog.rs] WiredTiger record store oplog truncation finished in: 420ms

2020-07-19T16:28:10.502+0000 E QUERY    [conn74791] Plan executor error during find command: DEAD, stats: { stage: "COLLSCAN", filter: { $and: [ { ts: { $lte: Timestamp(1595176086, 2244) } }, { ts: { $gt: Timestamp(1595173520, 25) } } ] }, nReturned: 0, executionTimeMillisEstimate: 2970, works: 356598, advanced: 0, needTime: 356597, needYield: 0, saveState: 2787, restoreState: 2787, isEOF: 0, invalidates: 0, direction: "forward", docsExamined: 356596 }```

oplog-prd-mon-XYZ-shard-hd03.c.XYZ-dr.internal-20200719.log-2020-07-19T16:28:06.794+0000 reading password from standard input
oplog-prd-mon-XYZ-shard-hd03.c.XYZ-dr.internal-20200719.log-Enter password:
oplog-prd-mon-XYZ-shard-hd03.c.XYZ-dr.internal-20200719.log-2020-07-19T16:28:07.153+0000 writing local.oplog.rs to stdout
oplog-prd-mon-XYZ-shard-hd03.c.XYZ-dr.internal-20200719.log-2020-07-19T16:28:09.795+0000 local.oplog.rs  0
oplog-prd-mon-XYZ-shard-hd03.c.XYZ-dr.internal-20200719.log-2020-07-19T16:28:10.517+0000 local.oplog.rs  0
oplog-prd-mon-XYZ-shard-hd03.c.XYZ-dr.internal-20200719.log:2020-07-19T16:28:10.517+0000 Failed: error writing data for collection `local.oplog.rs` to disk: error reading collection: Executor error during find command :: caused by :: errmsg: "CollectionScan died due to position in capped collection being deleted. Last seen record id: RecordId(6850019249918838732)"

你是對的,oplog 截斷正在殺死你的游標。

oplog 上沒有索引,因此 dump 必須從一開始就掃描以找到與查詢匹配的文件。

在這個 mongodump 游標的情況下,它檢查了 356596 個文件,但仍然沒有找到與查詢匹配的任何文件。

失敗消息報告最後看到的記錄是“RecordId(6850019249918838732)”。該數字是一個 64 位值,對應於ts.

您可以從 bash 中獲取前 32 位和相應的時間戳:

% echo $((6850019249918838732 >> 32))
1594894391

該日期Thu Jul 16 10:13:11 UTC 2020仍比第一個感興趣日期早一個多月。

從封頂集合中修剪這些文件時,游標不再指向有效位置,因此無法繼續。

發生這種情況時,您需要重新啟動 mongodump,以便它可以從 oplog 的新開頭開始掃描。

引用自:https://dba.stackexchange.com/questions/273053