数据库 · 2 1 月, 2024

如何修復 MongoDB 錯誤代碼 – 10107 – NotWritablePrimary

如何修復 MongoDB 錯誤代碼 – 10107 – NotWritablePrimary

MongoDB 是一個受歡迎的開源 NoSQL 資料庫,提供高性能、可擴展性和靈活性。然而,像任何軟體一樣,它可能會遇到錯誤,這些錯誤可能會中斷其正常運作。其中一個錯誤是 MongoDB 錯誤代碼 – 10107 – NotWritablePrimary。在本文中,我們將探討造成此錯誤的原因並提供逐步解決方案來修復它。

理解 MongoDB 錯誤代碼 – 10107 – NotWritablePrimary

MongoDB 採用分佈式架構,將數據複製到多個節點以確保高可用性和容錯能力。在此架構中,一個節點被選舉為主節點,負責處理寫操作,而其他節點則作為次級節點,從主節點複製數據。

MongoDB 錯誤代碼 – 10107 – NotWritablePrimary發生在客戶端試圖將數據寫入次級節點而非主節點時。MongoDB 默認限制次級節點的寫操作以維持數據一致性。此錯誤表明客戶端試圖寫入次級節點,這是不允許的。

可能導致 MongoDB 錯誤代碼 – 10107 – NotWritablePrimary 的原因

可能遇到此錯誤的幾個原因包括:

  • 連線字串不正確:客戶端應用程式可能使用了一個不正確的連線字串,該字串指向次級節點而非主節點。
  • 故障轉移:如果主節點由於網絡問題或崩潰變得無法使用,MongoDB 會自動選舉新的主節點。如果客戶端沒有更新為新主節點的地址,它可能繼續向舊主節點發送寫請求,導致該錯誤。
  • 讀取偏好設置:客戶端應用程式可能明確設置了讀取偏好為”次級”,指示 MongoDB 向次級節點發送寫請求。

修復 MongoDB 錯誤代碼 – 10107 – NotWritablePrimary

要解決 MongoDB 錯誤代碼 – 10107 – NotWritablePrimary,請按照以下步驟操作:

步驟 1:驗證連線字串

仔細檢查客戶端應用程式使用的連線字串。確保它指向主節點。連線字串應包括主節點的主機名或 IP 地址及相應的端口號。

步驟 2:檢查故障轉移

如果主節點已失敗或進行了故障轉移,您需要用新主節點的地址更新客戶端應用程式。您可以使用 MongoDB shell 或管理工具來檢查當前的主節點,並相應地更新連線字串。

步驟 3:調整讀取偏好

如果客戶端應用程式明確設置了讀取偏好為”次級”,您需要將其修改為”主要”或”主要優先”。此更改確保寫操作被定向到主節點。

以下是使用 MongoDB Node.js 驅動程式修改讀取偏好的示例:


const MongoClient = require('mongodb').MongoClient;
const uri = 'mongodb://primary-node:27017,secondary-node:27017/?readPreference=primary';
const client = new MongoClient(uri, { useNewUrlParser: true });

總結

MongoDB 錯誤代碼 – 10107 – NotWritablePrimary 發生在客戶端試圖將數據寫入次級節點而非主節點時。透過驗證連線字串、檢查故障轉移和調整讀取偏好,可以修復此錯誤。如果您遇到此錯誤,請確保按照這些步驟操作以確保您的 MongoDB 部署正常運作。

如需可靠和高性能的 VPS 主機解決方案,請考慮 Server.HK。我們的 VPS 主機服務提供完美的環境,適合運行 MongoDB 和其他應用程式,確保最佳性能和可擴展性。