Replication

UnknownError:獲取開始時間戳的最後一個 oplog 條目時出錯:find 命令尚未實現

  • July 26, 2017

我有 2 個 mongoDB。一個作為 PRIMARY 執行,它的版本是 3.0.13。另一個在副本集中作為 SECONDARY,它的版本是 3.0.11。複製在這一點上完美執行。

我想添加第三個 mongoDB,空數據文件夾,它的版本是 3.4.5。

使用 mongo 客戶端我可以訪問 PRIMARY 和 SECONDARY,從 PRIMARY 我可以訪問第三個 mongoDB,從 SECONDARY 我也可以訪問第三個 mongoDB。

在主伺服器中,我執行rs.add("server3:27017"),命令 rs.status() 以狀態 STARTUP2 顯示這第三台伺服器。但是過了一會兒我得到了這個錯誤

2017-07-25T09:24:52.159+0000 I REPL     [replication-0] Initial sync attempt finishing up.
2017-07-25T09:24:52.159+0000 I REPL     [replication-0] Initial Sync Attempt Statistics: { failedInitialSyncAttempts: 0, maxFailedInitialSyncAttempts: 10, initialSyncStart: new Date(1500974688699), initialSyncAttempts: [] }
2017-07-25T09:24:52.159+0000 E REPL     [replication-0] Initial sync attempt failed -- attempts left: 9 cause: UnknownError: error while getting last oplog entry for begin timestamp: find command not yet implemented

當剩下的嘗試次數達到 0 時,守護程序就會死掉。

2017-07-25T09:25:03.887+0000 F REPL     [replication-0] The maximum number of retries have been exhausted for initial sync.
2017-07-25T09:25:03.899+0000 E REPL     [replication-1] Initial sync failed, shutting down now. Restart the server to attempt a new initial sync.
2017-07-25T09:25:03.899+0000 I -        [replication-1] Fatal assertion 40088 UnknownError: error while getting last oplog entry for begin timestamp: find command not yet implemented at src/mongo/db/repl/replication_coordinator_impl.cpp 635
2017-07-25T09:25:03.899+0000 I -        [replication-1] 

***在 fassert() 失敗後中止

這是什麼意思find command not yet implemented?讓這第三台伺服器加入副本集的任何解決方法?

您不能將 MongoDB 3.4.x 成員添加到 MongoDB 3.0.x 副本集。

混合版本之間的複制僅支持相鄰的 MongoDB 主要版本(例如,3.0 和 3.2 或 3.2 和 3.4),即便如此,通常也僅用於臨時用於滾動升級

這個 find 命令尚未實現是什麼意思?

find命令是在 MongoDB 3.2 生產版本系列中引入的,MongoDB 3.4 複製期望該命令可用。

讓這第三台伺服器加入副本集的任何解決方法?

安裝 MongoDB 3.0 或 3.2 以與現有的 MongoDB 3.0 副本集成員兼容。如果您使用 MongoDB 3.2 添加新成員,我建議您將其他副本集成員升級到相同的發布版本。

有關更多資訊,請參閱:

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